Cách sử dụng truy vấn con trong FROM và truy vấn con trong WHERE
Sử dụng truy vấn con để tìm nạp dữ liệu, thao tác với các biến hiện có và giúp đạt được nhiều mục tiêu trong một lần. Nội dung bài viết dưới đây, FUNiX sẽ hướng dẫn bạn cách thực hiện cụ thể.
Sử dụng truy vấn con để tìm nạp dữ liệu, thao tác với các biến hiện có và giúp đạt được nhiều mục tiêu trong một lần. Vậy bạn đã biết cách dùng truy vấn con trong FROM và truy vấn con trong WHERE chưa? Nội dung bài viết dưới đây, FUNiX sẽ hướng dẫn bạn cách thực hiện cụ thể.
1. Truy vấn con là gì?
Truy vấn con hay còn gọi là Subquery, đây là cách xử lý dữ liệu của ngôn ngữ T-SQL nói chung và MySQL nói riêng. Thực tế, bản chất của subquery trong MySQL là trả về một bảng ảo, sau đó sử dụng bảng ảo đó để thực hiện tiếp các câu lệnh khác.
Lệnh subquery sẽ có tốc độ chậm hơn bình thường vì nó tạo ra table ảo nên tốn nhiều tài nguyên lưu trữ hơn.


Lưu ý: Lệnh Select được dùng để bắt đầu một câu truy vấn, vì vậy muốn biết một câu lệnh SQL có bao nhiêu truy vấn con, chúng ta sẽ dùng lệnh này.
Cú pháp như sau:
SELECT ds_cot
FROM bang
WHERE bieu_thuc toan_tu(SELECT bieu_thuc FROM bang)
Tổng hợp các quy tắc khi sử dụng truy vấn con:
- Câu truy vấn con phải nằm trong cặp ngoặc đơn.
- Đặt truy vấn con bên phải điều kiện so sánh.
- Mệnh đề ORDER BY trong truy vấn con là không cần thiết, trừ khi sử dụng mệnh đề TOP.
- Sử dụng các toán tử một dòng với các truy vấn con trả về một dòng và sử dụng các toán tử nhiều dòng với các truy vấn con trả về nhiều dòng.
Nhìn chung, một truy vấn con có thể được sử dụng ở bất cứ nơi đâu mà một biểu thức có thể được sử dụng (sau SELECT, FROM, WHERE..) với số lượng không giới hạn.
2. Cách sử dụng truy vấn con trong FROM
Một truy vấn con có thể được viết trong mệnh đề FROM. Thế nhưng, khi sử dụng các hàm tổng hợp trong một truy vấn con, bạn phải chỉ định một tên cột khác cho cột tổng hợp.
Ngoài ra, một truy vấn con được chỉ định trong điều khoản này phải được đặt trong dấu ngoặc đơn và được gán một bí danh.


Dưới đây là ví dụ hướng dẫn :
SELECT nhacung.nhacung_ten, truyvancon1.tong_sl
FROM nhacung,
(SELECT nhacung_id, SUM(donhang.soluong) AS tong_sl
FROM donhang
GROUP BY nhacung_id) truyvancon1
WHERE truyvancon1.nhacung_id = nhacung.nhacung_id;
Trong ví dụ trên đây, chúng ta đã tạo truy vấn con trong mệnh đề FROM như sau:
(SELECT nhacung_id, SUM(donhang.soluong) AS tong_sl
FROM donhang
GROUP BY nhacung_id) truyvancon1
Truy vấn con này được gắn bí danh là truyvancon1. Đây sẽ là tên dùng để tham chiếu tới truy vấn con này hoặc bất kỳ trường thông tin nào của nó.
3. Cách sử dụng truy vấn con trong WHERE
Khi sử dụng truy vấn con trong WHERE việc dùng toán tử so sánh trong cài đặt điều kiện. Cần đảm bảo truy vấn con sẽ chỉ trả về một kết quả. Nếu kết quả nhiều hơn một hàng sẽ gây ra lỗi.
Dưới đây là ví dụ hướng dẫn :
Trong mệnh đề WHERE thường có truy vấn con. Các truy vấn con này gọi là truy vấn lồng nhau hay còn được gọi là truy vấn phụ.
SELECT s.sanpham_id, s.sanpham_ten
FROM sanpham s
WHERE s.sanpham_id IN
(SELECT htk.sanpham_id
FROM hangtonkho htk
WHERE htk.soluong > 10);
Video Player is loading.
PlayUnmute
Fullscreen
VDO.AI
Đây là đoạn truy vấn con trong lệnh SELECT nói trên:
(SELECT htk.sanpham_id
FROM hangtonkho htk
WHERE htk.soluong > 10);
Truy vấn con cho phép tìm các giá trị sanpham_id từ bảng hangtonkho có số lượng lớn hơn 10. Sau đó truy vấn con được dùng để lọc kết quả từ truy vấn chính bằng điều kiện IN.
Truy vấn con có thể được viết thành INNER JOIN như dưới đây.
SELECT s.sanpham_id, s.sanpham_ten
FROM sanpham s
INNER JOIN hangtonkho htk
ON s.sanpham_id = htk.sanpham_id
WHERE htk.soluong > 10;
INNER JOIN sẽ trả về hiệu quả hơn truy vấn con ban đầu. Lưu ý: không phải truy vấn con nào cũng viết lại bằng JOIN được.
Bài viết trên đây, FUNiX vừa hướng dẫn bạn cách sử dụng truy vấn con trong FROM và truy vấn con trong WHERE. Hy vọng, nội dung bài viết này phần nào đem đến giá trị và kiến thức về Subquery hay truy vấn lồng trong SQL cho bạn.
Phạm Thị Thanh Ngọc







Bình luận (0
)