Chuong 7
Chuong 7
Ngôn ngữ SQL
Ngôn ngữ SQL
1
Nội dung
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
◦
Thống kê dữ liệu qua các hàm gộp
◦
Các kiểu kết nối
◦
Subquery
Biểu thức đại số quan hệ và câu truy vấn
2
Giới thiệu chung
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
Gồm 3 nhóm lệnh:
◦
DDL (Data Definition Language)
◦
DML (Data Manipulation Language)
◦
DCL (Data Control Language)
3
DDL
DDL
Là ngôn ngữ định nghĩa dữ liệu
gồm các lệnh
CREATE/ALTER/DROP DATABASE
CREATE/ALTER/DROP TABLE
4
DML
DML
Là ngôn ngữ thao tác dữ liệu
Gồm các lệnh:
SELECT
INSERT, UPDATE, DELETE, TRUNCATE
5
DCL
DCL
Là ngôn ngữ điều khiển dữ liệu
Gồm các lệnh
GRANT/REVOKE/ADD
COMMIT/ROLLBACK
6
Truy vấn dữ liệu
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
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
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
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
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
Mệnh đề SELECT
Mệnh đề SELECT
Ví dụ 1:
SELECT OrderID, ProductID,
Amount =UnitPrice*Quantity* (1- Discount)
FROM [Order Details]
12
Các hàm tập hợp (Aggregate function)
Các hàm tập hợp (Aggregate function)
Tên hàm
Tên hàm
Ý nghĩa
Ý nghĩa
SUM
SUM
Tính tổng các số
Tính tổng các số
MIN
MIN
Trả về giá trị nhỏ nhất
Trả về giá trị nhỏ nhất
MAX
MAX
Trả về giá trị lớn nhất
Trả về giá trị lớn nhất
AVG
AVG
Tính giá trị trung bình
Tính giá trị trung bình
COUNT
COUNT
Đếm số phần tử
Đếm số phần tử
13
Đượ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
Ví dụ các hàm gộp trong lệnh select
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
14
Mệnh đề WHERE
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'
15
Mệnh đề ORDER BY
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
16
Nhóm dữ liệu trong bảng
Nhóm dữ liệu trong bảng
kết quả
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
17
Mệnh đề GROUP BY
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
18
Ví dụ
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)
19
Ví dụ 2
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)
20
GROUP BY và HAVING
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)
21
Sử dụng WHERE và HAVING
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ả.
22
Ví dụ
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
23
SELECT INTO
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
24
Mệnh đề JOIN
Mệnh đề JOIN
Mệnh đề join dùng để khôi phục 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]
25