Các câu lệnh SELECT có thể lồng nhau ở nhiều mức.
Các câu truy vấn con trong cùng một mệnh đề WHERE được kết hợp bằng phép nối logic.
Câu truy vấn con thường trảvề một tập các giá trị.
Truy vấn lồng
Mệnh đề WHERE của câu truy vấn cha
o <biểu thức> <so sánh tập hợp> <truy vấn con> o So sánh tập hợp thường đi cùng với một số toán tử: IN, NOT IN ALL ANY hoặc SOME
o Kiểm tra sự tồn tại: EXISTS, NOT EXISTS
10/4/2012 Nguyễn ThịThúy Loan 257 Có 2 loại truy vấn lồng
o Lồng phân cấp (không tương quan)
Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan hệ
trong mệnh đềFROM ởtruy vấn cha.
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước.
Truy vấn lồng
10/4/2012 Nguyễn ThịThúy Loan 258
o Lồng tương quan
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ
trong mệnh đề FROM ởtruy vấn cha.
Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộcủa truy vấn cha.
Truy vấn lồng
SELECTMANV, TENNV
FROM NHANVIEN, DIADIEM_PHG
WHERE DIADIEM=‘TP HCM’AND PHG=MAPHGSELECTMANV, TENNV SELECTMANV, TENNV
FROM NHANVIENWHERE PHG IN( WHERE PHG IN( SELECTMAPHG FROMDIADIEM_PHG WHEREDIADIEM=‘TP HCM’) Lồng phân cấp
Cho biết MaNV, TenNV làm việc tại các phòng ban có địa
điểm tại TP HCM SELECT SODA
FROMNHANVIEN NV, PHANCONG PC
WHERENV.MANV=PC.MA_NVIEN ANDNV.HONV=‘Nguyen’ UNION
SELECT MADA
FROMNHANVIEN NV, PHONGBAN PB, DEAN DA
WHERENV.MANV=PB.TRPHG ANDPB.MAPHG=DA.PHONG
ANDNV.HONV=‘Nguyen’
10/4/2012 Nguyễn ThịThúy Loan 261
Ví dụ 5
SELECT DISTINCT TENDA FROMDEAN FROMDEAN
WHEREMADA IN(
SELECTSODA
FROMNHANVIEN, PHANCONG
WHEREMANV=MA_NVIEN ANDHONV=‘Nguyen’)
ORMADA IN(
SELECT MADA
FROMNHANVIEN, PHONGBAN, DEAN WHEREMANV=TRPHG ANDMAPHG=PHONG WHEREMANV=TRPHG ANDMAPHG=PHONG
ANDHONV=‘Nguyen’)
10/4/2012 Nguyễn ThịThúy Loan 262
Tìm những nhân viên có lương lớn hơn lương của ít nhất một nhân viên phòng 4
Ví dụ
Tìm những nhân viên không có thân nhân nào
Ví dụ
Tìm những nhân viên có lương lớn hơn lương của tất cả nhân viên phòng 4
10/4/2012 Nguyễn ThịThúy Loan 265 Tìm những trưởng phòng có tối thiểu một
thân nhân
Ví dụ
10/4/2012 Nguyễn ThịThúy Loan 266
SELECTMANV, TENNV FROM NHANVIEN, PHONGBAN FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’AND PHG=MAPHG
SELECTMANV, TENNV FROM NHANVIEN FROM NHANVIEN WHERE EXISTS (
SELECT*FROMPHONGBAN FROMPHONGBAN
WHERETENPHG=‘Nghien cuu’AND PHG=MAPHG )