Subqueries là một câu lệnh Select mà nó trả về một giá trị đơn hoặc một tập các giá trị và nó được nằm trong các câu lệnh như Select, Insert, Update, or Delete. Một SubQuery có thể được dùng bất kỳ nơi nào trong biểu thức được cho phép. Một SubQuery cũng được
gọi trong một truy vấn khác, hoặc một câu lệnh select có subquery cũgn có thể được gọi từ một câu Select khác (32 cấp).
Ngắt câu lệnh phức tạp thành những đoạn truy vấn đơn giản. Trả lời một truy vấn từ một truy vấn khác.
Các Sub Query hầu như có thể viết bằng Join và SQL Server luôn luôn thi hành những câu lệnh Join nhanh hơn SubQueries.
Không thể dùng SubQueries trên cột hình ảnh.
/* SELECT statement built using a subquery. */
Lọc ra những Product Name có UnitPrice bằng với Unitprice của ProductName là 'Sir Rodney''s Scones'
SELECT ProductName FROM Products WHERE UnitPrice =
(SELECT UnitPrice FROM Products
WHERE ProductName = 'Sir Rodney''s Scones')
/* SELECT statement built using a join that returns the same result set. */
SELECT ProductName FROM Products AS Prd1 JOIN Products AS Prd2
ON (Prd1.UnitPrice = Prd2.UnitPrice) WHERE Prd2.ProductName = 'Sir Rodney''s Scones'
Dùng từ khóa IN trong subquery.
Lọc ra những OrderId, EmployeeId do những Employee ở City Seattle Order. SELECT OrderId, EmployeeID AS EmpID
FROM Orders WHERE EmployeeID IN ( SELECT EmployeeId FROM Employees WHERE City='Seattle' ) ORDER BY OrderID
Dùng các toán tử so sánh trong Subquery: Các toán tử bao gồm =, >, >=, <, <=, <>, >=ALL, > ANY, ….
Lọc ra những OrderId, ProductId, UnitPrice mà có Unitprice lớn hơn nhữ Unitprice được bán bởi EmployeeID=5
SELECT OrderId, [Order Details].ProductId, [Order Details].UnitPrice
FROM [Order Details]
WHERE Unitprice > ALL ( SELECT [Order Details].UnitPrice
FROM [Order Details] JOIN Orders ON [Order Details].OrderId=
Orders.OrderId
where Orders.EmployeeID=5 )
ORDER BY [Order Details].UnitPrice,OrderID) ORDER BY UnitPrice.OrderID
Dùng từ khóa EXISTS, NO EXISTS trong subquery:
Lọc ra những OrderId ứng với các CustomerId mà những Customer này ở London City.
SELECT OrderId, CustomerId FROM Orders
WHERE EXISTS ( SELECT * FROM Customers WHERE
Customers.CustomerId=Orders.CustomerId AND City='LonDon'
) ORDER BY OrderID