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ử.
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
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 80NoteCẩ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ề nullVD: ta đếm xem có bao nhiêu người làm línhToá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ử EXISTSTrả 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ệc12345678910111213141516SQL> select employee_id, last_name2 from employees e3 where exists4 (5 select * from job_history j where j.employee_id = e.employee_id6 );EMPLOYEE_ID LAST_NAME----------- -------------------------102 De Haan201 Hartstein122 Kaufling101 Kochhar114 Raphaely176 Taylor200 WhalenMột số quy tắc khi sử dụng truy vấn con
- Câu truy vấn con phải nằm trong cặp ngoặc đơn.
- Đặt truy vấn con bên phải điều kiện so sánh.
- Mệnh đề ORDER BY trong truy vấn con là không cần thiết ngoại trừ khi có sử dụng mệnh đề TOP.
- Sử dụng các toán tử một dòng với các truy vấn con trả về một dòng và sử dụng các toán tử nhiều dòng với các truy vấn con trả về nhiều dòng.
Các dạng truy vấn con
- Truy vấn con một dòng
- Truy vấn con nhiều dòng
Truy vấn con một dòng
- Trả về duy nhất 1 dòng
- Sử dụng các toán tử so sánh một dòng
- = Bằng
- > Lớn hơn
- >= Lớn hơn hoặc bằng
- < Nhỏ hơn
- <= Nhỏ hơn học bằng
- <> Không bằng
Truy vấn con nhiều dòng
- Trả về nhiều dòng
- Sử dụng các toán tử so sánh nhiều dòng
- IN Bằng một trong các giá trị
- ANY Chỉ cần thỏa một trong các giá trị trả về bởi truy vấn con
- ALL Phải thỏa tất cả các giá trị trả về bởi truy vấn con
Nhận xét
Đăng nhận xét