Truy vấn lồng nhau (nested query) trong MySQL, còn được gọi là subquery (truy vấn con), là một truy vấn được đặt bên trong một truy vấn khác. Có nhiều cách để sử dụng truy vấn lồng nhau trong MySQL, dưới đây là một số ví dụ phổ biến:
WHERE
Truy vấn con thường được sử dụng trong mệnh đề WHERE
để lọc dữ liệu dựa trên kết quả của một truy vấn khác.
SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
Giải thích: Truy vấn này sẽ tìm tất cả các nhân viên có mức lương cao hơn mức lương trung bình của tất cả nhân viên.
FROM
Một truy vấn con có thể được sử dụng trong mệnh đề FROM
, cho phép bạn coi kết quả của truy vấn con như một bảng tạm thời.
SELECT department, avg_salary FROM (SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department) AS avg_dept WHERE avg_salary > 50000;
Giải thích: Ở đây, truy vấn con tính toán mức lương trung bình cho từng phòng ban và sau đó lọc ra các phòng ban có mức lương trung bình lớn hơn 50,000.
SELECT
Truy vấn con có thể được sử dụng trong mệnh đề SELECT
để tính toán một giá trị cụ thể cho từng hàng.
SELECT name, salary, (SELECT MAX(salary) FROM employees) AS max_salary FROM employees;
Giải thích: Truy vấn con này trả về mức lương cao nhất từ bảng employees
, và kết quả này được hiển thị cho mỗi nhân viên.
IN
Sử dụng truy vấn con với mệnh đề IN
để lọc ra các hàng khớp với kết quả của truy vấn con.
SELECT name, department FROM employees WHERE department IN (SELECT department FROM departments WHERE location = 'New York');
Giải thích: Truy vấn này sẽ trả về tên của các nhân viên làm việc trong các phòng ban ở New York.
EXISTS
EXISTS
kiểm tra sự tồn tại của một tập kết quả trả về từ truy vấn con.
SELECT name, department FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE d.department = e.department AND d.location = 'New York');
Giải thích: Truy vấn này trả về thông tin của các nhân viên làm việc trong các phòng ban có trụ sở tại New York.
WHERE
hoặc SELECT
).