Subquery trong SQL – truy vấn con – Freetuts

Trong bài này mình sẽ nói đến một cách sử dụng câu truy vấn SLECT nâng cao đó là subquery, đây là cách chạy nhiều câu truy vấn trong một câu lệnh .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

1. Subquery là gì?

Subquery hay còn gọi là truy vấn con, đây là cách viết một câu lệnh SQL mà trong đó có lồng thêm một hoặc nhiều câu truy vấn khác, và thường được sử dụng trong bốn lệnh : SELECT, INSERT, UPDATE hoặc DELETE .

Trước khi đi vào phần chi tiết thì mình xin nhắc lại kiến thức cũ một chút. Khi bạn thực hiện một câu SELECT thì kết quả nó sẽ trả về một bảng tạm, bảng tạm này có số records và column phụ thuộc vào câu SELECT, vì là một bảng nên ta có thể viết câu truy vấn dạng readonly trên bangr đó.

Ví dụ

SELECT SV.MASINHVIEN, SV.TENSINHVIEN
FROM (SELECT MASINHVIEN, TENSINHVIEN FROM SINHVIEN) AS SV

Trong ví dụ này mình đã thực thi một câu truy vấn và trong đó có thêm một câu truy vấn con ( subquery ). Vì là bảng tạm nên ta phải sử dụng từ khóa AS để đặt tên cho nó thì ở câu SELECT cha bên ngoài mới hiểu, đây là cách viết tường minh. Nếu bạn không thích tường minh thì cũng hoàn toàn có thể viết như sau :Bài viết này được đăng tại [ không tính tiền tuts. net ]

SELECT MASINHVIEN, TENSINHVIEN
FROM (SELECT MASINHVIEN, TENSINHVIEN FROM SINHVIEN)

Nhìn gọn hơn nhưng mình khuyên không nên viết theo cách này .

2. Một vài ví dụ với subquery

Truy vấn con ( subquery ) rất có ích trong một số ít trường hợp tương quan đến nhiều bảng. và sau đây là một vài ví dụ tìm hiểu thêm .

SỬ DỤNG TRONG IN

SELECT * FROM EMPLOYEES E 
WHERE E.ID IN (SELECT s.SalesPersonID FROM Sales s);

SỬ DỤNG TRONG ANY

SELECT * FROM Customers c 
WHERE c.ID =ANY (SELECT s.CustomerID FROM Sales s);

SỬ DỤNG TRONG SOME

SELECT * FROM Students s 
WHERE s.id = SOME (SELECT l.Student_id FROM Library l);

SỬ DỤNG TRONG EXISTS

SELECT * FROM Students s 
WHERE EXISTS (SELECT * FROM Students_Math m WHERE m.id=s.id);

SỬ DỤNG TRONG NOT EXISTS

SELECT * FROM Students s 
WHERE NOT EXISTS (SELECT * FROM Students_Math m WHERE m.id=s.id);

Trên là một vài cách sử dụng cơ bản, trong thực tiễn có có những trường hợp viết rất phức tạp nên mình không hề đăng lên đây được, sẽ rất khó hiểu .

ĐÁNH GIÁ post
Bài viết liên quan

Tư vấn miễn phí (24/7) 094 179 2255