CHƯƠNG 4 : NGÔN NGỮ TRUY VẤN SQL
4.3. Các lệnh truy vấn cơ sở dữ liệu
4.3.4. Truy vấn lồng (truy vấn con)
Trong nhiều trường hợp ta phải tìm kiếm thơng tin qua nhiều bước, kết quả của bước trước được sử dụng trong biểu thức của câu truy vấn tiếp theo, rồi kết quả này lại có th ể được sử dụng trong câu truy vấn tiếp theo nữa. Ngôn ngữ SQL với câu lệnh SELECT cho phép lấy ngay kết quả câu truy vấn để xây dựng biếu thức điều kiện cho một câu hỏi khác. Câu hỏi trung gian đó được gọi là câu h ỏi con (SubQuery). Câu hỏi con phải được bao trong cặp dấu ngoặc trong biểu thức của câu hỏi chính.
Truy vấn lồng (SubQuery) là một trong những ưu điểm nổi bật của ngôn ngữ SQL. Các mệnh đề thường được sử dụng với truy vấn con:
– IN/NOTIN
+ Cú pháp: <bi ểu thức>[not] IN (<truy vấn con>)
+ Ví dụ 4.19: Cho biết họ tên các sinh viên chưa có điểm mơn h ọc nào SELECT HOTEN
FROM SINHVIEN
WHERE MASV NOT IN ( SELECT DISTINCT MASV FROM KETQUA)
– Mệnh đề ANY
+ Cú pháp: <bi ểu thức><phép toán so sánh> ANY (<truy v ấn con>). + Ví dụ 4.20: Cho biết họ tên các sinh viên đã có điểm thi mơn CSDL
SELECT HOTEN FROM SINHVIEN
WHERE MASV = ANY ( SELECT MASV FROM KETQUA
WHERE MAMH = ‘CSDL’) – Mệnh đề SOME (tương tự như ANY).
– Mệnh đề ALL.
+ Cú pháp: <bi ểu thức><phép toán so sánh> ALL (<truy v ấn con>). + Ví dụ 4.21: Cho biết tên các mơn h ọc có s ố tín chỉ lớn nhất
SELECT TENMH FROM MONHOC
WHERE SOTC >= ALL ( SELECT SOTC
– Kiểm tra sự tồn tại [NOT]EXISTS
+ Cấu trúc: [NOT]EXISTS (<truy v ấn con>).
+ Ví dụ 4.22: Cho biết họ tên những sinh viên chưa có điểm mơn h ọc nào.
SELECT HOTEN
FROM SINHVIEN
WHERE NOT EXISTS ( SELECT *
FROM KETQUA
WHERE KETQUA.MASV = SINHVIEN.MASV)