Subquery đơn giản chỉ là 1 câu lệnh SELECT nằm trong 1 câu lệnh SELECT khác, với mục đích trả về kết quả cho câu SELECT bên ngoài sử dụng. Subquery có thể nằm ở mệnh đề SELECT, FROM (gọi là inline view), WHERE hay HAVING.

 

Khi sử dụng subquery, ta nên để subquery trong dấu ngoặc đơn và viết ở phía bên phải toán tử.

 

VD: ta tìm xem ông nào có lương lớn hơn lương của ông Kochhar

 

 

Do kết quả được câu SELECT bên ngoài sử dụng, subquery cần trả về lượng dữ liệu chính xác, phù hợp với toán tử sử dụng:

  • Với các toán tử so sánh như =   >   <   >=   <=   <>  subquery cần trả về 1 giá trị duy nhất, gọi là single-row subquery
  • Với các toán tử như IN, ANY, ALL, EXISTS, subquery có thể trả về nhiều giá trị, gọi là multiple-row subquery

 

VD trên chỉ có 1 ông Kochhar. Ta thử đổi qua ông Smith. Do có 2 ông Smith với 2 mức lương khác nhau, câu query sẽ bị lỗi

 

 

VD: sử dụng subquery trong mệnh đề SELECT

 

 

VD: sử dụng subquery trong mệnh đề HAVING. Tìm những job có mức lương trung bình thấp hơn mức lương trung bình của cả công ty

 

 

Sử dụng multiple-row subquery

 

Toán tử IN: bằng 1 trong những giá trị trong danh sách

VD: tìm những người có lương bằng với lương thấp nhất của phòng ban 50 hoặc 80

 

 

Note
Cẩn thận với NOT IN khi câu subquery có giá trị null. So sánh với null sẽ luôn trả về null 

 

VD: ta đếm xem có bao nhiêu người làm lính

 

 

 

 Toán tử ANY

  • > ANY: chỉ cần lớn hơn giá trị nhỏ nhất trong danh sách
  • < ANY: chỉ cần nhỏ hơn giá trị lớn nhất trong danh sách
  • = ANY: tương đương với IN

VD:

 

 

 Toán tử ALL

  • > ALL: phải lớn hơn tất cả các giá trị trong danh sách
  • < ALL: phải nhỏ hơn tất cả các giá trị trong danh sách

VD:

 

 

Toán tử EXISTS

Trả về true khi câu subquery trả về ít nhất 1 dòng.

 

VD: ta tìm những người đã từng thay đổi công việc