Câu lệnh truy vấn lồng nhau

Một phần của tài liệu Giáo trình cơ sở dữ liệu (nghề công nghệ thông tin cao đẳng) (Trang 39 - 43)

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 dng:

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ử dng 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ử dng các toán t so sánh : <, <=, = , > , >=, <> vi 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ử dng toán t IN (NOT IN) biu din 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ử dng [NOT] EXISTS <bng> biu din s tn ti

- 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)

Một phần của tài liệu Giáo trình cơ sở dữ liệu (nghề công nghệ thông tin cao đẳng) (Trang 39 - 43)