Truy vấn con - SUBQUERY trong SQL
Bài viết dưới đây sẽ hướng dẫn cách dùng truy vấn con trong SQL cùng với cú pháp và các ví dụ cụ thể.
SUBQUERY - Truy vấn con là một truy vấn bên trong truy vấn SQL khác và được nhúng bên trong mệnh đề WHERE. Yếu tố này còn được gọi truy vấn phụ hay truy vấn lồng nhau.
Truy vấn con trả về dữ liệu sẽ sử dụng trong truy vấn chính, được xem như là một điều kiện để thu hẹp dữ liệu thu nhận.
Các truy vấn con có thể được sử dụng với các lệnh SELECT, INSERT, UPDATE VÀ DELETE cùng với các toán tử như =, <, >, >=, <=, IN, BETWEEN...
Truy vấn con phải tuân theo các quy tắc sau:
- SUBQUERY phải nằm trong các dấu ngoặc đơn.
- Một SUBQUERY có thể chỉ có một cột trong mệnh đề SELECT, trừ khi nhiều cột trong truy vấn chính cho SUBQUERY để so sánh các cột đã chọn của nó.
- Một ORDER BY không thể được sử dụng trong một truy vấn con, mặc dù truy vấn chính có thể sử dụng một ORDER BY. GROUP BY được sử dụng để thực hiện tính năng như ORDER BY trong một truy vấn con.
- Truy vấn con trả về nhiều hơn một hàng chỉ có thể được sử dụng với toán tử nhiều giá trị như toán tử IN.
- Danh sách SELECT không được bao gồm bất kỳ tham chiếu nào đến các giá trị đánh giá BLOB, ARRAY, CLOB hoặc NCLOB.
- Truy vấn con không thể đi kèm set function.
- Toán tử BETWEEN không thể được sử dụng với một truy vấn con tuy nhiên có thể được sử dụng bên trong truy vấn con.
SUBQUERY với lệnh SELECT trong SQL
Các truy vấn con thường xuyên được sử dụng với lệnh SELECT. Cú pháp cơ bản như sau:
SELECT ten_cot [, ten_cot ]FROM bang1 [, bang2 ]WHERE ten_cot OPERATOR(SELECT ten_cot [, ten_cot ]FROM bang1 [, bang2 ][WHERE])
Xét bảng NHANVIEN có các bản ghi sau:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 1 | Thanh | 32 | Haiphong | 2000.00 | | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Bây giờ, chúng ta kiểm tra truy vấn con với lệnh SELECT như sau:
SQL> SELECT *FROM NHANVIENWHERE ID IN (SELECT IDFROM NHANVIENWHERE LUONG > 4500);
Kết quả trả về là:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 4 | Manh | 25 | Hue | 6500.00 | | 5 | Huy | 27 | Hatinh | 8500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
SUBQUERY với lệnh INSERT trong SQL
Truy vấn con cũng có thể được sử dụng với các câu lệnh INSERT. Câu lệnh INSERT sử dụng dữ liệu được trả về từ truy vấn con để chèn vào một bảng khác. Dữ liệu đã chọn trong truy vấn con có thể được sửa đổi bằng bất kỳ ký tự, hàm date/time hoặc hàm number nào.
Cú pháp cơ bản như sau:
INSERT INTO ten_bang [ (cot1 [, cot2 ]) ]SELECT [ *|cot1 [, cot2 ]FROM bang1 [, bang2 ][ WHERE GIA_TRI TOAN_TU ]
Theo dõi bảng NHANVIEN_QTM với cấu trúc tương tự như bảng NHANVIEN. Bây giờ, sao chép cả bảng NHANVIEN vào trong bảng NHANVIEN_QTM, bạn có thể sử dụng cú pháp sau:
SQL> INSERT INTO NHANVIEN_QTMSELECT * FROM NHANVIENWHERE ID IN (SELECT IDFROM NHANVIEN);
SUBQUERY với lệnh UPDATE trong SQL
Có thể sử dụng truy vấn con kết hợp với câu lệnh UPDATE. Một hoặc nhiều cột trong một bảng có thể được cập nhật khi sử dụng một truy vấn con với câu lệnh UPDATE.
Cú pháp cơ bản như sau:
UPDATE bangSET ten_cot = giatri_moi[ WHERE TOAN_TU [ GIA_TRI ](SELECT TEN_COTFROM TEN_BANG)[ WHERE) ]
Giả sử ta có bảng NHANVIEN_QTM có sẵn là bảng sao lưu của NHANVIEN. Ví dụ sau cập nhật LUONG gấp 2 lần trong bảng NHANVIEN cho tất cả khách hàng có LUONG lớn hơn hoặc bằng 27:
SQL> UPDATE NHANVIENSET LUONG = LUONG * 2WHERE TUOI IN (SELECT TUOI FROM NHANVIEN_QTMWHERE TUOI >= 27 );
Lệnh này tác động lên hai hàng và cuối cùng bảng NHANVIEN sẽ có các bản ghi sau:

SUBQUERY với lệnh DELETE trong SQL
Các truy vấn con cũng được sử dụng với lệnh DELETE và ta có cú pháp cơ bản như sau:
DELETE FROM TEN_BANG[ WHERE TOAN_TU [ GIA_TRI ](SELECT TEN_COTFROM TEN_BANG)[ WHERE) ]
Giả sử ta có bảng NHANVIEN_QTM có sẵn mà là sao lưu của bảng NHANVIEN. Ví dụ sau sẽ xóa các bản ghi từ bảng NHANVIEN có TUOI lớn hơn hoặc bằng 27.
SQL> DELETE FROM NHANVIENWHERE TUOI IN (SELECT TUOI FROM NHANVIEN_QTMWHERE TUOI >= 27);
Lệnh này tác động lên hai hàng và cuối cùng bảng NHANVIEN sẽ có các bản ghi sau:
+----+----------+-----+-----------+----------+ | ID | TEN |TUOI | DIACHI | LUONG | +----+----------+-----+-----------+----------+ | 2 | Loan | 25 | Hanoi | 1500.00 | | 3 | Nga | 23 | Hanam | 2000.00 | | 4 | Manh | 25 | Hue | 6500.00 | | 6 | Cao | 22 | HCM | 4500.00 | | 7 | Lam | 24 | Hanoi | 10000.00 | +----+----------+-----+-----------+----------+
Trong phần tiếp theo, chúng ta sẽ tìm hiểu về cách sử dụng Sequece trong SQL, các bạn nhớ theo dõi nhé.
Bạn nên đọc
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Cũ vẫn chất
-

Cài đặt Python Package với PIP trên Windows, Mac và Linux
Hôm qua -

Cách cho người lạ xem Nhật ký Zalo
Hôm qua -

Cách chia sẻ một thư mục (folder) trên Windows 10
Hôm qua -

Stt về tiền hài hước, những câu nói hài hước về tiền nhưng thâm thúy, ‘thô mà thật’
Hôm qua -

Những stt hay nói về miệng lưỡi thế gian đáng để suy ngẫm
Hôm qua -

30+ bài thơ về rượu bia hay, thơ chế về rượu bia hài hước và bá đạo cho dân nhậu
Hôm qua -

Sửa lỗi 0x80070643 trên Windows
Hôm qua -

Những trang web đen siêu hay không thể tìm thấy trên Google
Hôm qua 3 -

Công thức tính chu vi hình tứ giác, diện tích hình tứ giác
Hôm qua 1 -

Tổng hợp thao tác Touchpad trên Windows 10, Windows 11
Hôm qua
Học IT
Công nghệ
Microsoft Word 2013
Microsoft Word 2007
Microsoft Excel 2019
Microsoft Excel 2016
Microsoft PowerPoint 2019
Google Sheets
Lập trình Scratch
Bootstrap
Hướng dẫn
Ô tô, Xe máy