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
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:
- Bài giảng Cơ sở dữ liệu - Chương 5 Ngôn ngữ truy vấn SQL.pdf