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.
Bài viết này được đăng tại [kiso.vn]
Đâ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.
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. Subquery trong Oracle2. Một vài ví dụ Subquery...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. Subquery trong Oracle2. Một vài ví dụ Subquery trong OracleSử dụng ở FROMSử dụng ở WHERESử dụng ở SELECTNested Subquery3. Lời kết1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. Subquery trong Oracle2. Một vài ví dụ Subquery trong OracleSử dụng ở FROMSử dụng ở WHERESử dụng ở SELECTNested Subquery3. Lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. Subquery trong Oracle2. Một vài ví dụ Subquery trong OracleSử dụng ở FROMSử dụng ở WHERESử dụng ở SELECTNested Subquery3. Lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. Subquery trong Oracle2. Một vài ví dụ Subquery trong OracleSử dụng ở FROMSử dụng ở WHERESử dụng ở SELECTNested Subquery3. Lời kếtIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi...