Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn con một hàng và nhiều hàng trong MySQL


Single Row Subquery (Truy vấn con một hàng)

Dùng khi kết quả truy vấn ngoài dựa trên một giá trị đơn chưa biết. Dù tên gọi "single-row", nó ngụ ý trả về nhiều cột nhưng chỉ một hàng. Tuy nhiên, scalar subquery chỉ trả về 1 hàng 1 cột.

SELECT first_name, salary, department_id 
FROM employees 
WHERE salary = (SELECT MIN(salary) FROM employees);

Truy vấn con trả về lương tối thiểu, truy vấn ngoài lọc nhân viên có lương bằng giá trị đó.

Dùng trong HAVING khi so sánh với hàm nhóm:

SELECT department_id, MIN(salary) 
FROM employees 
GROUP BY department_id 
HAVING MIN(salary) < (SELECT AVG(salary) FROM employees)

Multiple Row Subquery (Truy vấn con nhiều hàng)

Trả về nhiều hàng cho truy vấn cha. Dùng phổ biến trong WHERE và HAVING. Vì trả về nhiều hàng, phải dùng toán tử so sánh tập hợp: IN, ALL, ANY.

  • IN: khớp bất kỳ giá trị nào
  • ANY: so sánh với từng giá trị
  • ALL: so sánh với mọi giá trị

Ví dụ lỗi do dùng = với subquery trả về nhiều hàng:

SELECT first_name, department_id 
FROM employees 
WHERE department_id = (SELECT department_id 
    FROM employees WHERE LOCATION_ID = 100)
-- ERROR: Subquery returns more than 1 row

Phải sửa thành IN hoặc ANY.