Bài giảng Cơ sở dữ liệu - Chương 4: Ngôn ngữ SQL truy vấn cơ sở dữ liệu - Thiều Quang Trung

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 ]

pdf 62 trang kimcuc 17600
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở dữ liệu - Chương 4: Ngôn ngữ SQL truy vấn cơ sở dữ liệu - Thiều Quang Trung", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Cơ sở dữ liệu - Chương 4: Ngôn ngữ SQL truy vấn cơ sở dữ liệu - Thiều Quang Trung

Bài giảng Cơ sở dữ liệu - Chương 4: Ngôn ngữ SQL truy vấn cơ sở dữ liệu - Thiều Quang Trung
CHƯƠNG 4 
NGÔN NGỮ SQL TRUY VẤN CSDL 
GV Th.S. Thiều Quang Trung 
Bộ môn Khoa học cơ bản 
Trường Cao đẳng kinh tế đối ngoại 
• Giới thiệu chung 1 
• Các nhóm lệnh DDL, DML, DCL 2 
• Câu lệnh SELECT 3 
• Các hàm tập hợp 4 
• Các mệnh đề của SELECT 5 
• Truy vấn sub-query 6 
Nội dung 
GV Thiều Quang Trung 2 
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 
3 GV Thiều Quang Trung 
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 
4 GV Thiều Quang Trung 
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 
5 GV Thiều Quang Trung 
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 ] ] 
6 GV Thiều Quang Trung 
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 ] ] 
 ::= 
 { * 
|{ table_name | view_name | table_alias }.* 
| { column_name | expression } 
 [ [ AS ] column_alias ] 
| column_alias = expression 
 } [ ,...n ] 7 GV Thiều Quang Trung 
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 
8 GV Thiều Quang Trung 
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??? 
9 GV Thiều Quang Trung 
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 
10 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Categories 
– CategoryID AutoNumber 
– CategoryName Text 
– Dessription Memo 
– Picture OLE Object 
11 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Customer 
– CustomerID Text 
– CompanyName Text 
– ContectName Text 
– ContactTitle Text 
– Address Text 
– City Text 
– Region Text 
12 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Customer 
– PostalCode Text 
– Country Text 
– Phone Text 
– Fax Text 
13 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Employees 
- EmployeeID AutoNumber 
- LastName Text 
- Title Text 
- TitleOfCourtesty Text 
- BirthDate Date/time 
- HireDate Date/time 
- Address Text 
14 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Employees 
- City Text 
- Regoin Text 
- PostalCode Text 
- Country Text 
- HomePhone Text 
- Extension Text 
- Photo Text 
15 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Employees 
- Note Memo 
- ReporsTo Number 
16 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Order Details 
- OderID Number 
- ProductID Number 
- UnitPrice Currency 
- Quantity Number 
- Discount Numer 
17 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Order 
- OderID AutoNumber 
- CustomerID Text 
- EmployeeID Number 
- OrderDate Date/time 
- RequiredDate Date/time 
- ShippedDate Date/time 
- ShipVia Numer 
18 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Order 
- Freight Currency 
- ShipName Text 
- ShipAddress Text 
- ShipCity Text 
- ShipRegion Text 
- ShipPostalCode Text 
- ShipCountry Text 
 19 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Products 
- ProductIDt AutoNumber 
- ProductName Text 
- SupplierID Number 
- CategoryID Number 
- QuantityPerUnit Text 
- UnitPrite Currentcy 
- UnitsInStock Number 
 20 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Products 
- UnitsOnOrder Number 
ReOrderLevel Number 
- Discontinued Yes/No 
 21 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Shippers 
- ShipperID AutoNumber 
CompanyName Text 
- Phone Text 
 22 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Supplies 
- SupplierID AutoNumber 
- CompanyName Text 
- ContactName Text 
- ContactTitle Text 
- Address Text 
- City Text 
 23 GV Thiều Quang Trung 
Database sample NorthWind 
• Bảng Supplies 
- Region Text 
- PostalCode Text 
- Country Text 
- Phone Text 
- Fax Text 
- HomePage Hyperlink 
 24 GV Thiều Quang Trung 
Mệnh đề SELECT 
• Ví dụ 1: 
SELECT OrderID, ProductID, 
Amount =UnitPrice*Quantity* (1- Discount) 
FROM [Order Details] 
25 GV Thiều Quang Trung 
Các hàm tập hợp (Aggregate 
function) 
Tên hàm Ý nghĩa 
SUM Tính tổng các số 
MIN Trả về giá trị nhỏ nhất 
MAX Trả về giá trị lớn nhất 
AVG Tính giá trị trung bình 
COUNT Đếm số phần tử 
26 
Đượ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 
GV Thiều Quang Trung 
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 
27 GV Thiều Quang Trung 
Mệnh đề WHERE 
• Chứa điều kiện lọc dữ liệu cần trả về 
• Cú pháp: WHERE 
• Ví dụ: 
SELECT CustomerID, CompanyName 
FROM Northwind.dbo.Customers 
WHERE Region = 'WA' 
28 GV Thiều Quang Trung 
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 
29 GV Thiều Quang Trung 
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 
30 GV Thiều Quang Trung 
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 
31 GV Thiều Quang Trung 
Ví dụ mệnh đề group by 
• 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) 
 32 GV Thiều Quang Trung 
Ví dụ mệnh đề group by 
• 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) 
33 GV Thiều Quang Trung 
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) 
34 GV Thiều Quang Trung 
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ả. 
35 GV Thiều Quang Trung 
Ví dụ sử dụng WHERE và HAVING 
• 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 
36 GV Thiều Quang Trung 
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 
37 GV Thiều Quang Trung 
Ví dụ SELECT INTO 
• Ví dụ 
SELECT Title_Id, Title INTO NewTitles 
FROM Titles WHERE Price > $15 
38 GV Thiều Quang Trung 
Mệnh đề JOIN 
• Mệnh đề join dùng để liên kết dữ liệu từ 
nhiều hơn 1 bảng 
• Cú pháp 
SELECT column_name [,n..] 
FROM table_name table_alias 
[CROSS|INNER|[LEFT | RIGHT]OUTER] JOIN 
table_name table_alias 
[ON table_name.ref_column_name join_operator 
table_name.ref_column_name] 
[WHERE search_condition] 
39 GV Thiều Quang Trung 
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 
40 GV Thiều Quang Trung 
Ví dụ kết nối 2 bảng 
• 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' 
41 GV Thiều Quang Trung 
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. 
42 GV Thiều Quang Trung 
Ví dụ kết nối 3 bảng 
• 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 
43 GV Thiều Quang Trung 
Các loại kết nối 
• Inner Join 
• Outer Join 
• Cross Join 
• Equi Join 
• Natural Join 
• Self Join 
44 GV Thiều Quang Trung 
Kết nối nội - Inner joins 
• Trong kết nối nội, dữ liệu từ nhiều bảng được 
hiển thị sau khi so sánh giá trị trong 1 cột 
chung. Chỉ những hàng mà có giá trị thoả 
mãn điều kiện kết nối trong cột chung đó mới 
được hiển thị. 
• Tích Cartesian: việc kết nối nhiều bảng mà 
không có điều kiện kết nối trong mệnh đề ON 
sẽ tạo ra tích cartesian giữa 2 bảng 
45 GV Thiều Quang Trung 
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 
on t.pub_id = p.pub_id 
46 GV Thiều Quang Trung 
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 
47 GV Thiều Quang Trung 
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 
48 GV Thiều Quang Trung 
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 
49 GV Thiều Quang Trung 
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 
50 GV Thiều Quang Trung 
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 
51 GV Thiều Quang Trung 
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 
52 GV Thiều Quang Trung 
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 
53 GV Thiều Quang Trung 
Subqueries 
• Subquery có thể được dùng để khôi phục dữ 
liệu từ nhiều bảng và có thể được dùng như 
1 cách khác của join (alternative to a join) 
54 GV Thiều Quang Trung 
Subqueries 
• Cách 1: dùng subquery. 
SELECT ProductName FROM Products 
WHERE UnitPrice = (SELECT UnitPrice FROM 
Products WHERE ProductName = 'Sir Rodney''s 
Scones') 
• Cách 2: dùng join 
SELECT Prd1.ProductName FROM Products AS 
Prd1 JOIN Products AS Prd2 
ON (Prd1.UnitPrice = Prd2.UnitPrice) 
WHERE Prd2.ProductName = 'Sir Rodney''s Scones' 
55 GV Thiều Quang Trung 
Subqueries 
• Subquery có thể được dùng theo 1 trong các 
dạng sau: 
– WHERE expression [NOT] IN (subquery) 
– WHERE expression comparison_operator [ANY | 
ALL] (subquery) 
– WHERE [NOT] EXISTS (subquery) 
56 GV Thiều Quang Trung 
Subqueries với toán tử IN 
• Kết quả của subquery được dùng với IN (hay 
với NOT IN) thường là 1 danh sách (list) chứa 
từ 0 đến nhiều giá trị. 
• Ví dụ: 
SELECT pub_name FROM publishers WHERE 
pub_id IN (SELECT pub_id FROM titles WHERE 
type = 'business') 
• Dùng cách 2 với mệnh đề join ??? 
57 GV Thiều Quang Trung 
Subquery với các toán tử so sánh 
• Các toán tử so sánh đơn giản: 
=, , >, > =, , ! <, or < = 
• Subquery bắt đầu với toán tử so sánh đơn 
giản và trả về 1 giá trị đơn 
SELECT DISTINCT title FROM titles WHERE price > 
(SELECT MIN(price) FROM titles) 
58 GV Thiều Quang Trung 
Subquery với các toán tử so sánh 
• Toán tử so sánh phức (Modified Comparison 
operators) là toán tử so sánh đơn giản có kèm 
theo các từ All, any hay some 
(=toán tử s/sánh+ [All,Any,some]) 
• Subquery bắt đầu với toán tử so sánh phức sẽ 
trả về 1 danh sách (list) của 0 hay nhiều gia trị 
và có thể bao gồm cả mệnh đề GROUP BY hay 
HAVING. 
59 GV Thiều Quang Trung 
Subquery với các toán tử so sánh 
• >ALL có nghĩa lớn hơn mọi giá trị. 
• >ANY có nghĩa lớn hơn ít nhất 1 giá trị 
 Vd: >ALL (1, 2, 3) lớn hơn 3 
 >ANY (1, 2, 3) lớn hơn 1 
• Ví dụ: 
SELECT au_lname, au_fname 
FROM authors WHERE city ALL (SELECT city 
FROM publishers) 
60 GV Thiều Quang Trung 
Subquery với các toán tử so sánh 
61 GV Thiều Quang Trung 
62 GV Thiều Quang Trung 

File đính kèm:

  • pdfbai_giang_co_so_du_lieu_chuong_4_ngon_ngu_sql_truy_van_co_so.pdf