Trong SQL, một truy vấn có thể được sử dụng trong nhiều cách khác nhau để giúp việc tính giá trị của truy vấn khác. Một truy vấn là một phần của truy vấn khác được gọi là một truy vấn con. Các truy vấn con lại có thể có các truy vấn con và như vậy có thể đi xuống rất nhiều mức. Chúng ta đã có cơ hội nhìn thấy việc sử dụng truy vấn con. Trong các ví dụ ở phần trên, chúng ta đã xây dựng các truy vấn hợp, giao, trừ bằng cách nối hai truy vấn con để tạo nên truy vấn đầy đủ. Có rất nhiều cách để sử dụng các truy vấn con:
Các truy vấn con có thể trả lại một hằng đơn và có thể so sánh hằng đó với giá trị khác trong mệnh đề WHERE.
Các truy vấn con có thể trả lại các quan hệ và có thể sử dụng các quan hệ này bằng nhiều cách trong mệnh đề WHERE.
Các truy vấn con có thể có các quan hệ của chúng xuất hiện trong mệnh đề FROM giống như các quan hệ được lưu giữ có thể.
Các truy vấn con tạo ra các giá trị vô hướng
Một giá trị nguyên tử có thể xuất hiện như một thành phần của một bộ được xem là một vô hướng. Một biểu thức select-from-where có thể tạo ra một quan hệ có số các thuộc tính tuỳ ý và có số bộ giá trị tuỳ ý trong quan hệ. Tuy nhiên, thông thường chúng ta chỉ quan tâm đến các giá trị của một thuộc tính đơn. Hơn nữa, đôi lúc chúng ta có thể suy ra từ thông tin về khoá hoặc từ các thông tin khác. Chẳng hạn, chúng ta có thể so sánh kết quả của một truy vấn con như vậy với một hằng hoặc một thuộc tính
Ví dụ 17: Chúng ta muốn đưa ra Họđệm và Tên của các nhân viên trong đơn vị có tên là ‘Nghiêncứu’. Chúng ta cần truy vấn hai quan hệ:
NHÂNVIÊN và ĐƠNVỊ. Bởi vì chỉ có quan hệ đầu có thông tin về Họđệm và Tên và chỉ có quan hệ thứ hai có các tên của đơn vị. Thông tin được liên kết bằng ‘MãsốĐV’.
Có nhiều cách khác nhau để nhìn vào truy vấn này. Chúng ta chỉ cần quan hệ ĐƠNVỊ để nhận được số MãsốĐV cho đơn vị có tên là ‘Nghiên cứu’. Mỗi khi chúng ta có nó, chúng ta có thể truy vấn quan hệ NHÂNVIÊN để tìm ra họ đệm và tên của các nhân viên trong đơn vị đó. Vấn đề đầu tiên là nhận được MãsốĐV. Chúng ta có thể viết nó như một truy vấn con và kết quả của nó sẽ là một giá trị đơn. Có thể sử dụng giá trị này trong truy vấn “chính” để đạt được kết quả mong muốn:
SELECT Họđệm, Tên
FROM NHÂNVIÊN
WHERE MãsốĐV =
(SELECT MãsốĐV
FROM ĐƠNVỊ
WHERE TênĐV = ‘Nghiêncứu’ ;
Các dòng từ 4) đến 6) là truy vấn con. Chỉ nhìn vào truy vấn con này chúng ta sẽ thấy rằng kết quả sẽ là một quan hệ có một thuộc tính là MãsốĐV và chúng ta hy vọng sẽ tìm thấy chỉ một bộ trong quan hệ này, giả sử đó là 5.
Khi đã thực hiện truy vấn con này, chúng ta có thể thực hiện các dòng từ 1) đến 3) của truy vấn trên như là giá trị 5 đã thay thế truy vấn con. Như vậy, truy vấn “chính” sẽ được thực hiện như là
SELECT Họđệm, Tên
FROM NHÂNVIÊN
WHERE MãsốĐV = 5 ;
Kết quả của truy vấn là Họđệm và Tên của các nhân viên của đơn vị có tên là ‘Nghiên cứu’.