06/04/2021, 14:51

ìm hiểu Subquery trong Oracle - Oracle căn bản

Trong bài viết này chúng ta sẽ tìm hiểu một phần khá hay đó là subquery trong Oracle. Subquery hay còn gọi là truy vấn con, nghĩa là bạn sẽ tạo ra những truy vấn nhỏ để đưa nó vào truy vấn cha. 1. Subquery trong Oracle Như các bạn biết lệnh SELECT sẽ trả về một bảng dữ liệu mới, bảng này sẽ ...

Trong bài viết này chúng ta sẽ tìm hiểu một phần khá hay đó là subquery trong Oracle. Subquery hay còn gọi là truy vấn con, nghĩa là bạn sẽ tạo ra những truy vấn nhỏ để đưa nó vào truy vấn cha.

1. Subquery trong Oracle

Như các bạn biết lệnh SELECT sẽ trả về một bảng dữ liệu mới, bảng này sẽ không lưu vào hệ thống mà là một bảng tạm (local temporary) và sẽ tự giải phóng khi câu truy vấn kết thúc. Như vậy ta hoàn toàn có thể thực hiện một truy vấn trên bảng kết quả đó, và ta chỉ thực hiện được truy vấn tìm kiếm trên nó mà thôi.

Ví dụ: Tìm nhân viên có mức lương cao nhất

SELECT * 
FROM employees 
WHERE salary = 
(
	SELECT max(salary) 
	FROM employees
);

Ở lệnh truy vấn con sẽ trả về row có mức lương cao nhất, sau đó sẽ thực hiện so sánh ở truy vấn cha và đưa ra kết quả chính xác.

Đây chỉ là một ví dụ giúp các bạn hiểu, chứ thực tế bài này bạn không nên sử dụng subquery vì sẽ không tối ưu.

2. Một vài ví dụ Subquery trong Oracle

Dưới đây sẽ là một vài ví dụ, mình sẽ không giải thích ý nghĩa của từng lệnh mà thay vào đó bạn hãy tự đọc và suy ngẫm nhé.

Sử dụng ở FROM

SELECT count(*) 
FROM 
(
	SELECT *
	FROM employees
	WHERE last_name LIKE 'A%'
);

Sử dụng ở WHERE

SELECT * 
FROM employees e1 
WHERE e1.salary = (
	SELECT max(salary) 
	FROM employees e2 
	WHERE e1.department_id = e2.department_id
);

Sử dụng ở SELECT

SELECT (
  	SELECT avg(salary) 
	FROM employees) AS avg_sal, 
	salary 
FROM employees;

Nested Subquery

Nested subquery tức là bạn sử dụng nhiều lệnh truy vấn con trong một lệnh cha.

SELECT count(*) 
FROM 
(
	SELECT salary, 
		(
			SELECT avg(salary) 
			FROM employees) avg_sal 
	FROM employees
)
WHERE salary > avg_sal;

Oracle chỉ cho phép bạn sử dụng 255 cấp truy vấn con, một con số không ai sử dụng hết được :)

3. Lời kết

Nếu một bài toán có thể giải quyết được ở cách thông thường mà không cần sử dụng subquery thì bạn nên dùng cách thông thường nhé, bởi subquery sẽ tốn nhiều tài nguyên hơn.

Bài này đã hướng dẫn bạn subquery và gì và cách sử dụng trong Oracle, hẹn gặp lại các bạn ở bài tiếp theo.

Trần Trung Dũng

15 chủ đề

2610 bài viết

Cùng chủ đề
0