Trong bài này mình sẽ nói đến một cách sử dụng câu truy vấn SLECT nâng cao đó là subquery, đây là cách chạy nhiều câu truy vấn trong một câu lệnh.
1. Subquery là gì?
Subquery hay còn gọi là truy vấn con, đây là cách viết một câu lệnh SQL mà trong đó có lồng thêm một hoặc nhiều câu truy vấn khác, và thường được sử dụng trong bốn lệnh: SELECT, INSERT, UPDATE hoặc DELETE.
Trước khi đi vào phần chi tiết thì mình xin nhắc lại kiến thức cũ một chút. Khi bạn thực hiện một câu SELECT thì kết quả nó sẽ trả về một bảng tạm, bảng tạm này có số records và column phụ thuộc vào câu SELECT, vì là một bảng nên ta có thể viết câu truy vấn dạng readonly trên bangr đó.
SELECT SV.MASINHVIEN, SV.TENSINHVIEN FROM (SELECT MASINHVIEN, TENSINHVIEN FROM SINHVIEN) AS SV
Trong ví dụ này mình đã thực hiện một câu truy vấn và trong đó có thêm một câu truy vấn con (subquery). Vì là bảng tạm nên ta phải sử dụng từ khóa AS để đặt tên cho nó thì ở câu SELECT cha bên ngoài mới hiểu, đây là cách viết tường minh. Nếu bạn không thích tường minh thì cũng có thể viết như sau:
Bài viết này được đăng tại [kiso.vn]
SELECT MASINHVIEN, TENSINHVIEN FROM (SELECT MASINHVIEN, TENSINHVIEN FROM SINHVIEN)
Nhìn gọn hơn nhưng mình khuyên không nên viết theo cách này.
2. Một vài ví dụ với subquery
Truy vấn con (subquery) rất hữu ích trong một số trường hợp liên quan đến nhiều bảng. và sau đây là một vài ví dụ tham khảo.
SELECT * FROM EMPLOYEES E WHERE E.ID IN (SELECT s.SalesPersonID FROM Sales s);
SELECT * FROM Customers c WHERE c.ID =ANY (SELECT s.CustomerID FROM Sales s);
SELECT * FROM Students s WHERE s.id = SOME (SELECT l.Student_id FROM Library l);
SELECT * FROM Students s WHERE EXISTS (SELECT * FROM Students_Math m WHERE m.id=s.id);
SELECT * FROM Students s WHERE NOT EXISTS (SELECT * FROM Students_Math m WHERE m.id=s.id);
Trên là một vài cách sử dụng căn bản, thực tế có có những trường hợp viết rất phức tạp nên mình không thể đăng lên đây được, sẽ rất khó hiểu.
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 là gì?2. Một vài ví dụ với...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. Subquery là gì?2. Một vài ví dụ với subquery1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux như một firewall được phát hành miễn...
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 là gì?2. Một vài ví dụ với subqueryV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi trang web sử dụng đường dẫn đầy...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. Subquery là gì?2. Một vài ví dụ với subqueryV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi sử dụng các hàm đọc file và...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. Subquery là gì?2. Một vài ví dụ với subqueryIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau, điểm xuất hiện các lỗ hổng Directory...