SQL Server - Truy vấn con
• Truy vấn con thi hành môt lần trước
truy vấn chính (truy vấn cha).
• Kết quả trả về từ truy vấn con được sử
dụng trong câu truy vấn chính.
Tóm tắt nội dung SQL Server - Truy vấn con, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con 2TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Vấn đề cần giải quyết Ai có mức lương cao hơn lương của ‘Trần Hồng’ ? Những nhân viên nào có mức lương lớn hơn lương của NV ‘Trần Hồng’? Truy vấn chính: ? Mức lương của Trần Hồng là bao nhiêu? ? Truy vấn con 3TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Cú pháp truy vấn con • Truy vấn con thi hành môt lần trước truy vấn chính (truy vấn cha). • Kết quả trả về từ truy vấn con được sử dụng trong câu truy vấn chính. SELECT ds_cot FROM bang WHERE bieu_thuc toan_tu (SELECT bieu_thuc FROM bang) 4TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT honv, tennv FROM qlns.nhanvien WHERE mucluong > (SELECT mucluong FROM qlns.nhanvien WHERE tennv = N‘Huyền'); Sử dụng truy vấn con 5.000.000 5TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Một số quy tắc khi sử dụng truy vấn con • Câu truy vấn con phải nằm trong cặp ngoặc đơn. • Đặt truy vấn con bên phải điều kiện so sánh. • Mệnh đề ORDER BY trong truy vấn con là không cần thiết ngoại trừ khi có sử dụng mệnh đề TOP. • Sử dụng các toán tử một dòng với các truy vấn con trả về một dòng và sử dụng các toán tử nhiều dòng với các truy vấn con trả về nhiều dòng. 6TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Các dạng truy vấn con Truy vấn chính Truy vấn con Trả về Một dòng • Truy vấn con nhiều dòng Nhiều dòng Truy vấn chính Truy vấn con Trả về • Truy vấn con một dòng 7TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con một dòng • Trả về duy nhất 1 dòng • Sử dụng các toán tử so sánh một dòng Toán tử = > >= < <= Ý nghĩa Bằng Lớn hơn Lớn hơn hoặc bằng Nhỏ hơn Nhỏ hơn học bằng Không bằng 8TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT tennv, macongviec, mucluong FROM qlns.nhanvien WHERE macongviec = (SELECT macongviec FROM qlns.nhanvien WHERE manhanvien = 141) AND mucluong > (SELECT mucluong FROM qlns.nhanvien WHERE manhanvien = 143); Truy vấn con một dòng TTHI 3.000.000 9TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT tennv, macongviec, mucluong FROM qlns.nhanvien WHERE mucluong = (SELECT MIN(mucluong) FROM qlns.nhanvien); Sử dụng hàm nhóm dữ liệu trong truy vấn con 1.200.000 10 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Mệnh đề HAVING với truy vấn con • Các truy vấn con được thi hành trước tiên. • Kết quả được trả về cho mệnh đề HAVING trong truy vấn chính. SELECT maphong, MIN(mucluong) FROM qlns.nhanvien GROUP BY maphong HAVING MIN(mucluong) > (SELECT MIN(mucluong) FROM qlns.nhanvien WHERE maphong = 60) 3.000.000 11 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT manhanvien, tennv FROM qlns.nhanvien WHERE mucluong = (SELECT MIN(mucluong) FROM qlns.nhanvien GROUP BY maphong) Câu lệnh sau sai ở chỗ nào? Toán tử một dòng được sử dụng với truy vấn con nhiều dòng Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value…. 12 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Câu lệnh sau có trả về kết quả nào không? SELECT tennv, macongviec FROM qlns.nhanvien WHERE macongviec = (SELECT macongviec FROM qlns.nhanvien WHERE tennv = 'Haà'); Truy vấn con không trả về giá trị nào cả 13 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con nhiều dòng • Trả về nhiều dòng • Sử dụng các toán tử so sánh nhiều dòng Toán tử IN ANY ALL Ý nghĩa Bằng một trong các giá trị Chỉ cần thỏa một trong các giá trị trả về bởi truy vấn con Phải thỏa tất cả các giá trị trả về bởi truy vấn con 14 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Sử dụng toán tử ANY … SELECT manhanvien, tennv, macongviec, mucluong FROM qlns.nhanvien WHERE mucluong < ANY (SELECT mucluong FROM qlns.nhanvien WHERE macongviec = ‘BHANG') AND macongviec ‘BHANG'; 1.200.000, 4.000.000 15 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT manhanvien, tennv, macongviec, mucluong FROM qlns.nhanvien WHERE mucluong < ALL (SELECT mucluong FROM qlns.nhanvien WHERE macongviec = ‘TPHONG') AND macongviec ‘TPHONG'; Sử dụng toán tử ALL 9.000.000, 3.000.000 16 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Cẩn thận với giá trị NULL trong truy vấn con SELECT nv.tennv FROM qlns.nhanvien nv WHERE nv.manhanvien NOT IN (SELECT qly.manguoiquanly FROM qlns.nhanvien qly) ??? • Tìm những nhân viên không quản lý bất cứ người nào 17 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Thực hành • Tạo truy vấn con để truy vấn các giá trị dựa trên những tiêu chí đã biết khác • Sử dụng truy vấn con để tìm ra những giá trị nào có trong một tập dữ liệu này và không có trong những tập khác 18 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Phần mở rộng của Truy vấn con 19 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Mục tiêu • Truy vấn con nhiều cột • Truy vấn con trong mệnh đề FROM • Sử dụng truy vấn con đơn trị (scalar subquery) • Viết truy vấn con kết hợp (Correlated subquery) • Sử dụng hàm EXISTS 20 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con trả về nhiều cột Liệt kê danh sách những nhân viên được quản lý bởi bởi cùng một người và làm trong cùng phòng với nhân viên có mã số là 143. SELECT manhanvien, manguoiquanly, maphong FROM qlns.nhanvien WHERE (STR(manguoiquanly)+STR(maphong)) IN (SELECT STR(manguoiquanly)+STR(maphong) FROM qlns.nhanvien WHERE manhanvien = 143) AND manhanvien NOT IN (143) 21 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT a.tennv, a.mucluong, a.maphong, b.tb_luong FROM qlns.nhanvien a, (SELECT maphong, AVG(mucluong) tb_luong FROM qlns.nhanvien GROUP BY maphong) b WHERE a.maphong = b.maphong AND a.mucluong > b.tb_luong; Sử dụng truy vấn con trong mệnh đề FROM 22 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Biểu thức truy vấn con đơn trị • Biểu thức truy vấn con đơn trị (A scalar subquery expression) là một truy vấn con trả về duy nhất một cột và một dòng. • Truy vấn con đơn trị có thể sử dụng: − Trong các điều kiện và biểu thức của CASE − Trong tất cả các mệnh đề của SELECT ngoại trừ GROUP BY 23 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Ví dụ Truy vấn con đơn trị Trong biểu thức CASE SELECT manhanvien, tennv, (CASE WHEN maphong = (SELECT maphong FROM qlns.phong WHERE makhuvuc = 1800) THEN N‘Sài gòn' ELSE N‘Hà nội' END) diaban FROM qlns.nhanvien SELECT manhanvien, tennv FROM qlns.nhanvien nv ORDER BY (SELECT tenphong FROM qlns.phong ph WHERE nv.maphong = ph.maphong) 20 Trong mệnh đề ORDER BY 24 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con kết hợp Truy vấn con kết hợp (Correlated subqueries) được sử dụng cho việc xử lý từng dòng. Mỗi truy vấn con sẽ được thi hành một lần ứng với mỗi dòng của truy vấn cha GET Đọc dòng (giá trị) từ truy vấn cha EXECUTE Truy vấn con thi hành theo giá trị vừa đọc USE Các giá trị trả về từ truy vấn con được sử dụng để xử lý hoặc hiển thị 25 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Truy vấn con kết hợp SELECT cot1, cot2, ... FROM bang1 WHERE cot1 toan_tu (SELECT cot1, cot2 FROM bang2 WHERE bieu_thuc1 = .bieu_thuc2) bang_cha Câu truy vấn con liên kết với cột từ bảng của truy vấn cha bang_cha 26 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT tennv, mucluong, maphongFROM qlns.nhanvien BangCha WHERE mucluong > (SELECT AVG(mucluong) FROM qlns.nhanvien WHERE maphong = BangCha.maphong) Sử dụng truy vấn con kết hợp Tìm tất cả những nhân viên có mức lương lớn hơn mức lương trung bình trong phòng của mình Mỗi lần một dòng trong câu truy vấn bên ngoài được xử lý thì câu truy vấn con lại được tính lại 27 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Sử dụng hàm EXISTS • Hàm EXISTS kiểm tra tồn tại kết quả trả về từ câu truy vấn con. • Tìm thấy một dòng trong truy vấn con: − Kết thúc tìm kiếm trong truy vấn con − Trả về kết quả TRUE • Nếu chưa tìm thấy dòng nào: − Trả về FALSE − Tiếp tục tìm kiếm trong truy vấn con 28 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SELECT manhanvien, tennv, macongviec, maphong FROM qlns.nhanvien BangCha WHERE EXISTS ( SELECT 'X' FROM qlns.nhanvien WHERE manguoiquanly = BangCha.manhanvien) Sử dụng hàm EXISTS Tìm những nhân viên có quản lý ít nhất một người 29 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Thực hành • Tạo truy vấn con nhiều cột • Viết truy vấn con kết hợp • Sử dụng truy vấn con đơn trị • Sử dụng hàm EXISTS
File đính kèm:
- SQL Server - Truy vấn con.pdf