Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL

Nội dung trình bày

ƒGiới thiệu

ƒĐịnh nghĩa dữliệu

ƒCập nhật dữliệu

ƒTruy vấn dữliệu

pdf24 trang | Chuyên mục: Hệ Quản Trị Cơ Sở Dữ Liệu | Chia sẻ: dkS00TYs | Lượt xem: 2691 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
t *
from R, S
where 
ƒ π(σ(R))
select 
from R
where 
Ngôn ngữ truy vấn SQL 11
Ví dụ
ƒ Tìm các nhân viên làm việc trong phòng số 4.
• σMaPB = 4(NHANVIEN)
• select *
from NHANVIEN
where MaPB = 4
ƒ Cho biết họ, tên, giới tính và mức lương của các nhân viên.
• πHo, Ten, GTinh, Luong(NHANVIEN)
• select Ho, Ten, GTinh, Luong
from NHANVIEN
ƒ Cho biết tên các trưởng phòng
• πHo, Ten(PHONGBAN TrPhg=MaNV NHANVIEN)
• select Ho, Ten
from NHANVIEN, PHONGBAN
where TrPhg = MaNV
Phép toán tập hợp
ƒ SQL hổ trợ các phép toán
• UNION (Hội)
• EXCEPT (Hiệu).
• INTERSECT (Giao).
• Đặc điểm
- Các dòng giống nhau bị loại 
trong bảng kết quả.
- Các bảng tham gia phép 
toán phải có tính khả hợp
ƒ Giữ lại các dòng giống 
nhau
• UNION ALL
• EXCEPT ALL
• INTERSECT ALL
ƒ (SELECT FROM 
WHERE )
UNION [ALL]
(SELECT FROM 
WHERE )
ƒ (SELECT FROM 
WHERE )
EXCEPT [ALL]
(SELECT FROM 
WHERE )
ƒ (SELECT FROM 
WHERE )
INTERSECT [ALL]
(SELECT FROM 
WHERE )
Ngôn ngữ truy vấn SQL 12
Đặt tên
ƒ Đặt tên trong mệnh đề SELECT:
select count(*) as ‘Tong so nhan vien’
from NHANVIEN
ƒ Đặt tên trong mệnh đề FROM:
• Đặt tên cho bảng
select NV.Ho, NV.Ten. PB.Ten
from NHANVIEN, PHONGBAN
where MaPB = MaPB
• Đặt tên cho bảng và thuộc tính
select *
from PHONGBAN AS PB(Ten, Maso, MaTrPhg, Ngay)
select .Ho, NV.Ten. PB.Ten
from NHANVIE as NV, PHONGBAN as PB
where NV.MaPB = PB.MaPB
Phép toán số học
ƒ +, –, *, / có thể áp dụng cho các giá trị số trong mệnh đề
SELECT
select 1.1 * SUM(Luong) as ‘Luong moi’
from NHANVIEN
ƒ +, - có thể áp dụng cho các giá trị kiểu ngày giờ
select NgNhanChuc + 150 as ‘Cong Ngay’
from PHONGBAN
NHANVIEN ...
25000
38000
30000
40000
Luong ...
27500
41800
33000
44000
Luong moi
Ngôn ngữ truy vấn SQL 13
Phép toán so sánh và luận lý
ƒ Dùng trong mệnh đề WHERE hoặc HAVING để xây dựng 
các điều kiện chọn và điều kiện kết.
• =, , ≥, 
• BETWEEN AND 
• AND, OR, NOT
ƒ Tìm các nhân viên phòng số 5 có lương giữa 30.000 và
40.000
• select *
from NHANVIEN
where (Luong >= 30000) and (Luong <= 40000) and Phg = 5
• select *
from NHANVIEN
where (Luong between 30000 and 40000) and Phg = 5
Phép toán so sánh chuỗi
ƒ LIKE 
[ESCAPE ]
ƒ Mẫu đối sánh
• Chuỗi ký tự để so sánh.
• % - thay cho một đoạn ký tự
tùy ý.
• _ - thay cho một ký tự tùy ý.
ƒ Ký tự thoát
• Ký tự để loại bỏ chức năng 
đặc biệt của % và _.
• Có thể dùng ký tự bất kỳ
không xuất hiện trong mẫu 
đối sánh.
ƒ Tìm nhân viên họ Nguyen
• select MaNV, Ho, Ten from 
NHANVIEN
where Ho LIKE ‘Nguyen%’
ƒ Tìm nhân viên họ Nguyen_
• select MaNV, Ho, Ten from 
NHANVIEN
where Ho LIKE ‘Nguyen\_%
escape ‘\’
Ngôn ngữ truy vấn SQL 14
Khử các dòng giống nhau
ƒ select Luong
from NHANVIEN
ƒ SQL không tự động loại các bộ
trùng nhau
• Tốn thời gian so sánh và sắp 
xếp.
• Sử dụng cho các truy vấn thống 
kê
ƒ select distinct Luong
from NHANVIEN
25000
43000
25000
38000
30000
40000
25000
Luong
43000
25000
38000
30000
40000
Luong
Các hàm tập hợp
ƒ SQL cung cấp 5 hàm tập hợp:
• SUM() - tính tổng các giá trị của thuộc tính
• MAX() - tìm giá trị lớn nhất của thuộc tính
• MIN() - tìm giá trị nhỏ nhất của thuộc tính
• AVG() - tính giá trị trung bình của thuộc tính
• COUNT(*) - đếm số dòng của bảng
• COUNT() - đếm các giá trị khác null của thuộc tính
ƒ Ví dụ
select sum(Luong) AS TongLuong,
max(Luong) AS LuongCaonhat,
min(Luong) AS LuongThapnhat,
avg(Luong) AS LuongTB
from NHANVIEN
ƒ Chỉ được xuất hiện trong mệnh đề SELECT hoặc HAVING
Ngôn ngữ truy vấn SQL 15
Gom nhóm các bộ
ƒ GROUP BY - HAVING
SELECT [, ]
FROM 
[WHERE ]
GROUP BY 
[HAVING ]
ƒ Trong đó
• : danh sách thuộc tính gom nhóm
• : danh sách các hàm tập hợp.
• : điều kiện chọn hoặc điều kiện kết.
• : điều kiện lựa chọn các nhóm.
ƒ Chú ý
• WHERE được thực hiện trước GROUP BY.
• HAVING chỉ xuất hiện khi có GROUP BY
Ví dụ
ƒ Với mỗi phòng, cho biết số dự án phòng đó điều phối.
select Phong, count(MaDA) as ‘So du an’
from DUAN
group by Phong
5Phú Nhuận3Sản phẩm Z
5Thủ Đức2Sản phẩm Y
4Gò Vấp10Tin học hóa
4Gò Vấp30Phúc lợi
DUAN
1Phú Nhuận20Tái tổ chức
5Tân Bình1Sản phẩm X
PhongDiadiemMaDATenDA
1
4
5
Phong
2
1
3
So du an
Ngôn ngữ truy vấn SQL 16
Ví dụ
ƒ Cho biết mã số, tên dự án và số nhân viên tham
gia đối với những dự án có nhiều hơn 2 nhân viên
tham gia.
select DA.MaDA, DA.Ten, count(*) as ‘So nhan vien’
from DUAN as DA, THAMGIA as TG
WHERE DA.MaDA=TG.MaDA
group by DA.MaDA, DA.Ten
having count(*) > 2
Gom nhóm các bộ (4)
23334455552Sản phẩm Y
24534534532Sản phẩm Y
21234567892Sản phẩm Y
14534534531Sản phẩm X
...
11234567891Sản phẩm X
...TG.MaDATG.MaNV...DA.MaDADA.TenDA
2
DA.MaDA
3Sản phẩm Y
So nhan vienDA.TenDA
Ngôn ngữ truy vấn SQL 17
Sắp xếp kết quả
ƒ ORDER BY
• SELECT 
FROM 
[WHERE ]
ORDER BY 
• : danh sách các cặp (tên thuộc tính, thứ tự
sắp xếp).
• Thứ tự:
- ASC - tăng dần.
- DESC - giảm dần.
- Mặc định là ASC.
Ví dụ
ƒ Với mỗi nhân viên, cho biết mã nhân viên và mã dự án mà 
nhân viên đó tham giá. Sắp xếp kết quả theo thứ tự tăng 
dần của mã nhân viên và giảm dần của mã dự án.
• select MaNV, MaDA
from THAMGIA
order by MaNV, MaDA desc
2333445555
3333445555
10333445555
1123456789
...
20333445555
2123456789
MaDAMaNV
Ngôn ngữ truy vấn SQL 18
So sánh với NULL
ƒ NULL
• Không biết.
• Không sẳn sàng.
• Không thể áp dụng.
ƒ Tính toán và so sánh với 
NULL
• null + 3 → null.
• null > 3 → unknown.
ƒ SQL cung cấp 2 phép toán
• IS NULL.
• IS NOT NULL.
ƒ Tìm các nhân viên không 
có người giám sát
select MaNV, Ho, Ten
from NHANVIEN
where MaNQL is null
ƒ Tìm các nhân viên có 
người giám sát
select MaNV, Ho, Ten
from NHANVIEN
where MaNQL is not null
Logic 3 chân trị
UNKNOWNUNKNOWN
TRUEFALSE
FALSETRUE
NOT
UNKNOWNFALSEUNKNOWNUNKNOWN
FALSEFALSEFALSEFALSE
UNKNOWNFALSETRUETRUE
UNKNOWNFALSETRUEAND
UNKNOWNUNKNOWNTRUEUNKNOWN
UNKNOWNFALSETRUEFALSE
TRUETRUETRUETRUE
UNKNOWNFALSETRUEOR
Ngôn ngữ truy vấn SQL 19
Truy vấn lồng
ƒ Truy vấn sử dụng các giá trị của truy vấn khác 
trong điều kiện so sánh.
ƒ Chỉ xuất hiện trong mệnh đề WHERE.
SELECT 
FROM 
WHERE (
 SELECT 
 FROM 
 WHERE )
Truy vấn cha
Truy vấn con
So sánh tập hợp (1)
ƒ Phép toán
• IN - kiểm tra sự tồn tại của một giá trị trong một tập hợp.
• ALL - so sánh một giá trị với tất cả các giá trị của tập hợp.
• ANY - so sánh một giá trị với một giá trị nào đó của tập hợp.
• ALL, ANY được kết hợp với các phép toán so sánh {=, , ≥, 
}.
• EXISTS - kiểm tra sự tồn tại của kết quả của một câu truy vấn.
ƒ Cú pháp
• IN 
• ALL 
• ANY 
• EXISTS 
Ngôn ngữ truy vấn SQL 20
Ví dụ
ƒ Tìm các nhân viên của 
phòng số 2 và 5.
select *
from NHANVIEN
where MaPB in (2, 5)
ƒ Tìm các nhân viên của 
phòng ‘Nghiên cứu’.
select *
from NHANVIEN
where MaPB = (
select MaPB
from PHONGBAN
where TenPB =
‘Nghiên cứu’)
Tập hợp tường minh
Truy vấn con vô hướng
Ví dụ
ƒ Cho biết tên nhân viên có
mức lương lớn hơn lương 
của các nhân viên phòng 
số 5.
select *
from NHANVIEN
where Luong > ALL (
select Luong
from NHANVIEN
where MaPB = 5)
ƒ Cho biết các nhân viên 
không tham gia các dự án 
mà phòng số 5 quản lý.
select MaNV
from THAMGIA
where MaDA not in (
select MaNV
from DUAN
where Phg = 5)
Ngôn ngữ truy vấn SQL 21
Truy vấn lồng phân cấp (1)
ƒ Mệnh đề WHERE của truy vấn con không tham 
chiếu đến thuộc tính của các bảng trong mệnh đề
FROM của truy vấn cha.
ƒ Truy vấn con được thực hiện trước truy vấn cha.
ƒ Ví dụ
select *
from NHANVIEN
where Luong > ALL (
select Luong
from NHANVIEN
where MaPB = 5)
Truy vấn lồng phân cấp (2)
38000
25000
30000
40000
Luong
43000987654321
25000987987987
25000999887777
25000453453453
38000666884444
30000123456789
40000333445555
55000888665555
Luong...MaNVNHANVIEN
43000987654321
55000888665555
Luong...MaNV
> ALL
Ngôn ngữ truy vấn SQL 22
Truy vấn lồng tương quan (1)
ƒ Mệnh đề WHERE của truy vấn con tham chiếu đến 
thuộc tính của các bảng trong mệnh đề FROM của 
truy vấn cha.
ƒ Truy vấn con được thực hiện nhiều lần, mỗi lần 
ứng với một bộ của truy vấn cha.
ƒ Tìm các nhân viên không có thân nhân nào
select *
from NHANVIEN as NV
where not exists (
select *
from THANNHAN as TN
where TN.MaNV = NV.MaNV)
Truy vấn lồng tương quan (2)
30000123456789
40000333445555
55000888665555
Luong...MaNVNHANVIEN
Minh123456789
Anh123456789
An987654321
The333445555
Anh333445555
...TenMaNVTHANNHAN
...
55000888665555
LuongMaNV
...TenMaNV
The333445555
Anh333445555 Minh12 56789
Anh12 56789
Ngôn ngữ truy vấn SQL 23
Truy vấn lồng tương quan (3)
1013ββ
5223αβ
101023ββ
2723αβ
1
7
2
7
D
212ββ
212βα
51αα
21αα
ECBAR
3ββ
23ββ
23αβ
12ββ
12βα
1αα
CBA
2
7
D
5
2
ES
πA,B,C(R)
23αβ
1αα
CBAR ÷ S
Truy vấn lồng tương quan (4)
ƒ Biểu diễn bằng EXISTS.
SELECT R1.A, R1.B, R1.C
FROM R as R1
WHERE NOT EXISTS (
SELECT *
FROM S
WHERE NOT EXISTS (
SELECT *
FROM R as R2
WHERE R2.D = S.D AND
R2.E = S.E AND
R2.A = R1.A AND
R2.B = R1.B AND
R2.C = R1.C))
ƒ Tìm các nhân viên tham 
gia tất cả các dự án do 
phòng số 5 quản lý.
select *
from NHANVIEN as NV
where not exists (
select *
from DUAN as DA
where DA.Phong = 5 and 
not exists (
select *
from THAMGIA as TG
where TG.MaNV =
NV.MaNV
and TG.MaDA =
DA.MaNV))
Ngôn ngữ truy vấn SQL 24
Phép kết trong SQL
ƒ JOIN, INNER JOIN
• Dùng kết nối hai bảng trong mệnh đề FROM.
• SELECT 
FROM ( JOIN ON )
ƒ Các phép kết mở rộng:
• LEFT OUTER JOIN, LEFT JOIN.
• RIGHT OUTER JOIN, RIGHT JOIN.
• FULL OUTER JOIN, FULL JOIN.
Ví dụ
ƒ Cho biết tên các nhân viên 
của phòng ‘Nghiên cứu’.
select NV.Ho, NV.Dem, 
NV.Ten
from (NHANVIEN as NV join 
PHONGBAN as PB on
NV.MaPB =
PB.MaPB)
where PB.Ten = ‘Nghiên cứu’
ƒ Các phép kết có thể lồng 
nhau
select DA.MaDA, PB.MaPB, 
NV.Ten
from ((DUAN as DA join
PHONGBAN as PB
on DA.Phong =
PB.Maso)
join NHANVIEN on
MaNQL = NV.MaNV)
where Diadiem = ‘TpHCM’

File đính kèm:

  • pdfBài giảng Cơ sở dữ liệu - Chương 5 Ngôn ngữ truy vấn SQL.pdf