Cách sử dụng truy vấn con trong FROM và truy vấn con trong WHERE

Cách sử dụng truy vấn con trong FROM và truy vấn con trong WHERE

Chia sẻ kiến thức 05/05/2022

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ể.

>> Khóa học lập trình cơ bản

>> Kỹ thuật lập trình PHP

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.

Truy vấn con
Truy vấn con

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.

Cách sử dụng truy vấn con trong FROM
Cách sử dụng truy vấn con trong FROM.

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

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, phường Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        

Cơ quan chủ quản: Công ty Cổ phần Giáo dục Trực tuyến FUNiX
MST: 0108171240 do Sở kế hoạch và Đầu tư thành phố Hà Nội cấp ngày 27 tháng 02 năm 2018
Địa chỉ:
Văn phòng Hà Nội: Tầng 4, Tòa nhà 25T2, Đường Nguyễn Thị Thập, phường Yên Hòa, Hà Nội.
Văn phòng TP.HCM: Lầu 8, Tòa nhà Giày Việt Plaza 180-182 Lý Chính Thắng, phường Nhiêu Lộc, TP. Hồ Chí Minh.
Hotline: 078 231 3602 – Email: info@funix.edu.vn

yêu cầu gọi lại