Mục tiêu:Trình bày cú pháp, chức năng của câu lệnh truy vấn Select lồng nhau.
Cú pháp:
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [,...] / * FROM <bảng 1> [<bí danh 1>] [,...]
[WHERE <điều kiện nối , lọc cóchứa câu truy vấn con >] [ORDER BY <biểu thức sắp xếp 1> [ASC / DESC] [,...]]
Công dụng:
Cho phép tạo ra các điều kiện chứa quan hệ tập hợp và số liệu tổng hợp. Trong quan hệ tập hợp, câu truy vấn con đặt trong ngoặc đơn .
Sử dụng các toán tử so sánh : <, <=, = , > , >=, <> - Liệt kê các khách hàng có số dư lớn nhất: SELECT Ten FROM KHACH WHERE Sodu = (SELECT MAX(Sodu) FROM KHACH)
- Liệt kê hãng cung ứng gạo có DonGia <= DonGia trung bình : SELECT Ten
FROM CUNGUNG a
WHERE (a.Hang = ‘Gạo’) AND DonGia <= (SELECT AVG(b.DonGia)
FROM CUNGUNG b WHERE b.Hang = ‘Gạo’)
Sử dụng các toán tử so sánh : <, <=, = , > , >=, <> với ANY / ALL
- Liệt kê nhân viên từ bảng NHANVIEN có NgaySinh trùng với người khác SELECT a.Manv, a.HoLot, a.Ten
FROM NHANVIEN a WHERE a.NgaySinh = ANY
(SELECT b.NgaySinh
FROM NHANVIEN b WHERE b.Manv <> a.Manv)
- Liệt kê nhân viên từ bảng NHANVIEN có NgaySinh không trùng với người khác
SELECT a.Manv, a.HoLot, a.Ten FROM NHANVIEN a WHERE a.NgaySinh <> ALL
(SELECT b.NgaySinh
FROM NHANVIEN b WHERE b.Manv <> a.Manv)
Sử dụng toán tử IN (NOT IN) biểu diễn quan hệ ∈
- Liệt kê Ten, Hang và DonGia của các hãng cung ứng có ít nhất 1 mặt hàng trong HOPDONG :
SELECT DISTINCT Ten, Hang, DonGia FROM CUNGUNG
WHERE Hang IN (SELECT Hang FROM HOPDONG )
- Liệt kê Ten, Hang và DonGia của các hãng cung ứng có ít nhất 1 mặt hàng mà khách hàng ‘KS. Bạch Đằng’ đặt hàng :
SELECT DISTINCT Ten, Hang, DonGia FROM CUNGUNG
WHERE Hang IN (SELECT Hang
FROM HOPDONG
WHERE TenKh = ‘KS. Bạch Đằng’ )
- Liệt kê Ten, DiaChi các hãng cung ứng không bán Gạo : SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG WHERE Ten NOT IN
(SELECT Ten FROM CUNGUNG WHERE Hang = ‘Gạo’)
- Liệt kê hãng có ít nhất 1 mặt hàng giống Cty Lương thực : SELECT DISTINCT a.Ten, a.DiaChi
FROM CUNGUNG a WHERE a.Hang IN
(SELECT b.Hang FROM CUNGUNG b
WHERE b.Ten = ‘Cty lương thực’)
- Liệt kê hợp đồng có TenKh và Hang giống hợp đồng số 3 : SELECT *
FROM HOPDONG a
WHERE (a.TenKh, a.Hang) IN (SELECT b.TenKh, b.Hang FROM HOPDONG
WHERE b.SoHd = 3)
- Liệt kê Hãng không có mặt hàng trong HOPDONG : SELECT DISTINCT Ten
FROM CUNGUNG
SELECT DISTINCT Ten FROM CUNGUNG WHERE Hang IN
(SELECT Hang FROM HOPDONG )
- Liệt kê Hãng có mặt hàng không có trong HOPDONG : SELECT DISTINCT Ten
FROM CUNGUNG WHERE Hang NOT IN
(SELECT Hang FROM HOPDONG )
- Liệt kê Hãng, mà tất cả mặt hàng của nó đều có trong HOPDONG : SELECT DISTINCT Ten
FROM CUNGUNG GROUP BY Ten HAVING SET(Hang) IN (SELECT Hang FROM HOPDONG ) Sử dụng [NOT] EXISTS <bảng> biểu diễn sự tồn tại
- Liệt kê Ten, DiaChi khách hàng đã đặt hàng : SELECT Ten, DiaChi
FROM KHACH
WHERE EXISTS (SELECT Hang
FROM HOPDONG
WHERE TenKh = Ten)
SELECT Ten, DiaChi
FROM KHACH
WHERE NOT EXISTS (SELECT Hang
FROM HOPDONG
WHERE TenKh = Ten)