Single Row Subqueries | Sử dụng Subquery đơn

Subqueries là các truy vấn lồng bên trong một truy vấn SQL khác. Chúng có thể được sử dụng trong nhiều ngữ cảnh khác nhau, bao gồm trong mệnh đề SELECT, FROM, WHERE, và HAVING. Một subquery hàng đơn (single row subquery) trả về một hàng đơn lẻ với một giá trị duy nhất. Chúng thường được sử dụng để so sánh hoặc kiểm tra một giá trị duy nhất với giá trị từ một truy vấn khác.

Single Row Subqueries | Sử dụng Subquery đơn

Cách Sử Dụng Single Row Subqueries

1. Sử dụng trong mệnh đề WHERE

Giả sử bạn muốn tìm các nhân viên có mức lương cao nhất trong phòng ban của họ. Bạn có thể sử dụng một subquery để tìm mức lương cao nhất và sau đó so sánh với mức lương của từng nhân viên.

SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

2. Sử dụng trong mệnh đề SELECT

Bạn có thể sử dụng một subquery trong mệnh đề SELECT để lấy một giá trị cụ thể từ một truy vấn khác và sử dụng nó trong kết quả của truy vấn chính.

SELECT employee_id, first_name, last_name,
(SELECT department_name
FROM departments
WHERE departments.department_id = employees.department_id) AS department_name
FROM employees;

3. Sử dụng trong mệnh đề FROM

Mặc dù ít phổ biến hơn, nhưng bạn cũng có thể sử dụng subquery trong mệnh đề FROM. Điều này thường được sử dụng để tạo các bảng tạm thời hoặc tập hợp kết quả để sử dụng trong truy vấn chính.

SELECT avg_salary.department_id, avg_salary.avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id) avg_salary;

Ví Dụ Minh Họa

Ví Dụ 1: Tìm nhân viên có lương cao nhất trong công ty

SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

Ví Dụ 2: Tìm nhân viên có lương cao nhất trong mỗi phòng ban

SELECT employee_id, first_name, last_name, salary, department_id
FROM employees e
WHERE salary = (SELECT MAX(salary)
FROM employees
WHERE department_id = e.department_id);

Ví Dụ 3: Tìm thông tin phòng ban của một nhân viên cụ thể

SELECT first_name, last_name,
(SELECT department_name
FROM departments d
WHERE d.department_id = e.department_id) AS department_name
FROM employees e
WHERE employee_id = 100;

Lưu Ý Khi Sử Dụng Single Row Subqueries

  1. Subquery phải trả về duy nhất một giá trị (kết quả của truy vấn con chỉ được phép trả về 1 giá trị duy nhất và nó là điều kiện của truy vấn cha): Nếu subquery trả về nhiều hơn một hàng, bạn sẽ gặp lỗi “ORA-01427: single-row subquery returns more than one row”.
  2. Sử dụng toán tử so sánh thích hợp: Bạn có thể sử dụng các toán tử so sánh như =, <, >, <=, >=, và <> với các single row subqueries.
  3. Hiệu suất: Subqueries có thể ảnh hưởng đến hiệu suất của truy vấn, đặc biệt khi chúng được lồng sâu hoặc chạy trên các tập dữ liệu lớn. Hãy chắc chắn tối ưu hóa subqueries của bạn khi cần thiết.

Tóm lại:

Single row subqueries là một công cụ mạnh mẽ trong SQL cho phép bạn thực hiện các truy vấn phức tạp bằng cách sử dụng kết quả của một truy vấn khác. Chúng rất hữu ích trong nhiều ngữ cảnh khác nhau và giúp bạn truy xuất và phân tích dữ liệu một cách linh hoạt và hiệu quả. Tuy nhiên, hãy chú ý đến việc tối ưu hóa và đảm bảo rằng subquery của bạn trả về một hàng duy nhất để tránh các lỗi và cải thiện hiệu suất truy vấn.

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận