1 / 58

Chuong 7 Ngôn ngữ SQL

Chuong 7 Ngôn ngữ SQL. Nội dung. Giới thiệu chung Ba nhóm ngôn ngữ SQL DDL DML DCL Câu lệnh SELECT Lọc dữ liệu Các kiểu kết nối Subquery. Giới thiệu chung. Là ngôn ngữ chuẩn cho các CSDL quan hệ Chuẩn ANSI SQL được công bố vào năm 1989, 1992 và 1999 Đặc điểm của SQL:

lucas
Télécharger la présentation

Chuong 7 Ngôn ngữ SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chuong 7Ngôn ngữ SQL

  2. Nội dung • Giới thiệu chung • Ba nhóm ngôn ngữ SQL • DDL • DML • DCL • Câu lệnh SELECT • Lọc dữ liệu • Các kiểu kết nối • Subquery

  3. Giới thiệu chung • Là ngôn ngữ chuẩn cho các CSDL quan hệ • Chuẩn ANSI SQL được công bố vào năm 1989, 1992 và 1999 • Đặc điểm của SQL: • Ngôn ngữ tựa tiếng Anh • Ngôn ngữ phi thủ tục

  4. Giới thiệu chung • SQL chia thành 3 nhóm: • Data Definition Language (DDL): ngôn ngữ định nghĩa dữ liệu gồm các lệnh • CREATE/ALTER/DROP DATABASE • CREATE/ALTER/DROP TABLE

  5. Giới thiệu chung • Data manipulation Language (DML): ngôn ngữ thao tác dữ liệu • SELECT • INSERT, UPDATE, DELETE, TRUNCATE • Data Control Language (DCL): ngôn ngữ điều khiển dữ liệu • GRANT/REVOKE/ADD • COMMIT/ROLLBACK

  6. Truy vấn dữ liệu • Cú pháp chung của lệnh SELECT SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ]

  7. Mệnh đề SELECT • Để đưa ra danh sách các cột cần xem • Cú pháp: SELECT [ ALL | DISTINCT ][ TOP n [ PERCENT ] [ WITH TIES ] ]  < select_list > < select_list > ::=  {    * |{ table_name | view_name | table_alias }.* |     { column_name | expression }         [ [ AS ] column_alias ] | column_alias = expression }    [ ,...n ]

  8. Mệnh đề SELECT • ALL (DEFAULT): hiển thị tất cả các bản ghi kể cả các hàng trùng nhau. • DISTINCT: chỉ hiển thị các hàng duy nhất không trùng nhau trong bảng kết quả. • Ví dụ: liệt kê tất cả các thành phố mà hiện thời các khách hàng đang sống SELECT DISTINCT City , Region FROM Customers

  9. Mệnh đề SELECT • TOP n [PERCENT]: chỉ có n hàng đầu tiên hay n% của các hàng của bảng kết quả được xuất . • WITH TIES: cho phép 1 số hàng được thêm vào bảng kết quả gốc nếu các hàng này có cùng giá trị trong cột ORDER BY với hàng cuối cùng của n hàng đầu tiên được xác định. • Ví dụ: liệt kê 3 hoá đơn có cước phí cao nhất SELECT top 3 with ties OrderID, Freight from Orders order by Freight DESC Nếu hàng thứ tư có cùng cước phí (freight) với hàng thứ ba trong bảng kết quả thì sao???

  10. Mệnh đề SELECT • Trường tính toán được xây dựng từ biểu thức (Expression) có liên quan đến các trường cơ sở. • Biểu thức bao gồm: • Các trường • Các toán tử số học, logic, so sánh • Các hàm

  11. Database sample NorthWind • Bảng Categories - CategoryID AutoNumber • CategoryName Text • Dessription Memo - Picture OLE Object

  12. Database sample NorthWind • Bảng Customer - CustomerID Text • CompanyName Text - ContectName Text • ContactTitle Text • Address Text • City Text - Region Text

  13. Database sample NorthWind • Bảng Customer - PostalCode Text • Country Text - Phone Text • Fax Text

  14. Database sample NorthWind • BảngEMployees • EmployeeID AutoNumber • LastName Text • Title Text • TitleOfCourtesty Text • BirthDate Date/time • HireDate Date/time • Address Text

  15. Database sample NorthWind • BảngEMployees • City Text • Regoin Text • PostalCode Text • Country Text • HomePhone Text • Extension Text Photo Text

  16. Database sample NorthWind • BảngEMployees • Note Memo • ReporsTo Number

  17. Database sample NorthWind • Bảng Order Details • OderID Number • ProductID Number • UnitPrice Currency • Quantity Number • Discount Numer

  18. Database sample NorthWind • Bảng Order • OderID AutoNumber • CustomerID Text • EmployeeID Number • OrderDate Date/time • RequiredDate Date/time • ShippedDate Date/time • ShipViaNumer

  19. Database sample NorthWind • Bảng Order • Freight Currency • ShipName Text • ShipAddress Text • ShipCity Text • ShipRegion Text • ShipPostalCode Text • ShipCountry Text

  20. Database sample NorthWind • Bảng Products • ProductIDt AutoNumber • ProductName Text • SupplierID Number • CategoryID Number • QuantityPerUnit Text • UnitPriteCurrentcy • UnitsInStock Number

  21. Database sample NorthWind • Bảng Products • UnitsOnOrder Number ReOrderLevel Number • Discontinued Yes/No

  22. Database sample NorthWind • Bảng Shippers • ShipperID AutoNumber CompanyName Text • Phone Text

  23. Database sample NorthWind • Bảng Supplies • SupplierID AutoNumber CompanyName Text • ContactName Text • ContactTitle Text • Address Text • City Text

  24. Database sample NorthWind • Bảng Supplies • Region Text • PostalCode Text • Country Text • Phone Text • Fax Text • HomePage Hyperlink

  25. Mệnh đề SELECT • Ví dụ 1: SELECT OrderID, ProductID, Amount =UnitPrice*Quantity* (1- Discount) FROM [Order Details]

  26. Các hàm tập hợp (Aggregate function) Được dùng để tổng kết các giá trị của 1 cột hay 1 nhóm cột bên trong 1 bảng và cho kết quả là 1 giá trị đơn

  27. Ví dụ các hàm gộp trong lệnh select • SELECT sum(Freight) from dbo.Orders  Tính tổng cước phí chuyên chở của tất cả hoá đơn • SELECT count(OrderID) from dbo.Orders  Đếm số hoá đơn • SELECT SUM(UnitPrice*Quantity*(1-Discount)) FROM dbo.[Order Details]  Tính doanh số bán hàng

  28. Mệnh đề WHERE • Chứa điều kiện lọc dữ liệu cần trả về • Cú pháp: WHERE <search_condition> • Ví dụ: SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = 'WA'

  29. Mệnh đề ORDER BY • Xác định thứ tự của bộ kết quả • Cú pháp [ ORDER BY { order_by_expression [ ASC | DESC ] }     [ ,...n] ] ASC (ascending) : xếp theo thứ tự tăng DESC (descending): xếp theo thứ tự giảm

  30. Nhóm dữ liệu trong bảng kết quả • Những mệnh đề dùng để nhóm dữ trong bảng kết quả: • GROUP BY: tổng hợp bảng kết quả theo nhóm bằng cách dùng các hàm gộp • COMPUTE và COMPUTE BY: mệnh đề COMPUTE trong lệnh SELECT được dùng để phát ra các hàng tổng hợp bằng cách dùng hàm gộp. Mệnh đề COMPUTE BY được dùng để tổng hợp thêm các hàng kết quả theo cột

  31. Mệnh đề GROUP BY • Cú pháp: [ GROUP BY [ ALL ] group_by_expression [ ,...n ] ALL: bảng kết quả sẽ chứa tất cả các nhóm kể cả những nhóm không thỏa mãn điều kiện lọc trong trong mệnh đề WHERE, những nhóm không thoả điều kiện sẽ có giá trị null. • group_by_expression:biểu thức dùng để xác định cột được nhóm

  32. Ví dụ • SELECT Type, Advance = SUM (Advance) FROM Titles WHERE Type IN ('business', 'mod_cook', 'trad_cook') GROUP BY Type Type Advance ------------ --------------------- business 25125.0000 mod_cook 15000.0000 trad_cook 19000.0000 (3 row(s) affected)

  33. Ví dụ 2 • SELECT Type, Advance = SUM (Advance) FROM Titles WHERE Type IN ('business', 'mod_cook', 'trad_cook') GROUP BY ALL Type Type Advance ------------ --------------------- business 25125.0000 mod_cook 15000.0000 popular_comp NULL psychology NULL trad_cook 19000.0000 UNDECIDED NULL (6 row(s) affected)

  34. GROUP BY và HAVING • Có thể hạn chế các nhóm trong bảng kết quả bằng mệnh đề HAVING. • Chỉ sau khi dữ liệu đã được nhóm và tổng hợp , điều kiện trong mệnh đề HAVING mới được áp dụng. • Không thể dùng 1 cột mà nó không tham gia vào hàm gộp của mệnh đề SELECT hay của mệnh đề GROUP BY. • SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10)

  35. Sử dụng WHERE và HAVING • Mệnh đề HAVING giống như mệnh đề WHERE nhưng chỉ áp dụng cho cả nhóm trong khi mệnh đề WHERE áp dụng cho từng hàng. • Một truy vấn có thể chứa cả mệnh đề WHERE và mệnh đề HAVING. • Mệnh đề WHERE được áp dụng trước cho các hàng trong bảng được truy vấn. Chỉ những hàng nào thoả mãn điều kiện của mệnh đề WHERE mới được nhóm dữ liệu. • Sau đó mệnh đề HAVING sẽ được áp dụng cho các nhóm. Chỉ những nhóm thoả mãn điều kiện HAVING mới được xuất ra bảng kết quả.

  36. Ví dụ • SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id HAVING AVG(price) > 10

  37. SELECT INTO • Lệnh SELECT với mệnh đề INTO được dùng dể lưu trữ kết quả truy vấn vào 1 bảng mới mà không cần phải định nghĩa trước bảng. • Cú pháp SELECT columns_list INTO new_table_name FROM table_name1, table_name2,………, table_name n WHERE condition1, condition2,………., condition n • Ví dụ SELECT Title_Id, Title INTO NewTitles FROM Titles WHERE Price > $15

  38. Mệnh đề JOIN • Mệnhđề join dùngđểLiênkếtdữliệutừnhiềuhơn 1 bảng • Cúpháp SELECT column_name [,n..] FROM table_nametable_alias [CROSS|INNER|[LEFT | RIGHT]OUTER] JOIN table_nametable_alias [ON table_name.ref_column_namejoin_operatortable_name.ref_column_name] [WHERE search_condition]

  39. Kết nối các bảng • Kết nối chỉ tồn tại trong thời gian truy vấn. • Kết nối không thay đổi dữ liệu trong các bảng của cơ sở dữ liệu. • Nên tạo bí danh (alias) cho tên bảng để tránh gõ tên dài và làm truy vấn dễ đọc hơn • Ví dụ SELECT t.Title_Id, t.Title, p.Pub_Id from Titles t JOIN Publishers p on t.Pub_Id=p.Pub_Id WHERE Pub_Name='New Moon Books'

  40. Các cột tham gia kết nối • Nếu kết nối nhiều hơn 2 bảng thì kết nối 2 bảng trước, sau đó kết nối nhóm này với bảng thứ ba. • Ví dụ SELECT OrderID,p.ProductID, ProductName, CategoryName ,Quantity FROM [Order Details] o JOIN Products p ON o.ProductID = p.ProductID JOIN Categories c ON p.CategoryID = c.CategoryID

  41. Các loại kết nối • Inner Join • Outer Join • Cross Join • Equi Join • Natural Join • Self Join

  42. Kếtnốinội - Inner joins • Trongkếtnốinội, dữliệutừnhiềubảngđượchiểnthịsaukhi so sánhgiátrịtrong 1 cộtchung. Chỉnhữnghàngmàcógiátrịthoảmãnđiềukiệnkếtnốitrongcộtchungđómớiđượchiểnthị. • TíchCartesian: việckếtnốinhiềubảngmàkhôngcóđiềukiệnkếtnốitrongmệnhđề ON sẽtạoratíchcartesiangiữa 2 bảng

  43. Kết nối nội - Inner joins • Vídụ: SELECT t.title,t.price, p.pub_name, p.city, t.pubdate FROM titles t join publishers p ont.pub_id = p.pub_id

  44. Kết nối nội với toán tử lớn hơn • Có thể thực hiện kết nối 2 bảng với điều kiện kết nối dùng toán tử không bằng nhau. • Ví dụ: SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state FROM publishers p INNER JOIN authors a ON a.state > p.state WHERE p.pub_name = 'New Moon Books' ORDER BY au_lname ASC, au_fname ASC

  45. Kết nối ngoại - Outer joins • Kết nối ngoại được dùng để cho ra kết quả chứa tất cả các hàng của 1 bảng và các hàng trùng nhau của bảng còn lại. Những cột mà không có giá trị phù hợp sẽ được hiển thị giá trị NULL. • Cú pháp SELECT column_name, column_name [,column_name] FROM table_name [LEFT | RIGHT] OUTER JOIN table_name ON table_name.ref_column_name join_operator table_name.ref_column_name

  46. Kết nối trái - LEFT OUTER JOIN • Tất cả các hàng từ bảng bên trái trong mối kết nối giữa 2 bảng sẽ được hiển thị trong bảng kết quả. • Ví dụ: SELECT a.au_fname, a.au_lname, p.pub_name FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

  47. Cross join • Cross join trả về mọi tổ hợp có thể có của tất cả các hàng trong các bảng kết nối. • Cross join không có mệnh đề ON • Nếu không mệnh đề WHERE, cross join sẽ tạo ra tích Cartesian • Nếu có mệnh đề WHERE, cross join sẽ thực hiện như 1 kết nối nội

  48. Kết nối chéo - Cross join • Ví dụ 1: SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers ORDER BY au_lname DESC Kết quả chứa 184 hàng (authors có 23 hàng và publishers có 8 hàng; 23 x 8 = 184 hàng). • Ví dụ 2: SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers WHERE authors.city = publishers.city ORDER BY au_lname DESC SELECT au_fname, au_lname, pub_name FROM authors INNER JOIN publishers ON authors.city = publishers.city ORDER BY au_lname DESC

  49. Truy vấn con - Subqueries • Subquery là lệnh SELECT mà kết quả trả về là 1 giá trị đơn (single value) và được đặt lồng vào bên trong các lệnh SELECT, INSERT, UPDATE, hay DELETE, hay bên trong truy vấn con khác. • Subquery có thể được dùng bất kỳ nơi nào mà biểu thức được phép dùng

  50. Subqueries • Ví dụ 1: SELECT Ord.OrderID, Ord.OrderDate, (SELECT MAX(OrdDet.UnitPrice) FROM Northwind.dbo.[Order Details] AS OrdDet WHERE Ord.OrderID =OrdDet.OrderID) AS MaxUnitPrice FROM Northwind.dbo.Orders AS Ord

More Related