Cách sử dụng truy vấn con (SubQuery) trong SQL

Nội dung được viết bởi G-LEARNING

Một truy vấn con trong SQL (SubQuery) là một truy vấn được chứa trong một truy vấn khác. Truy vấn bên trong thường được sử dụng để xác định kết quả của truy vấn bên ngoài. Cùng xem ứng dụng của SubQuery trong truy vấn dữ liệu ở MySQL như nào nhé!

Cú pháp Truy vấn con (SubQuery) trong SQL

Truy vấn con (SubQuery) trong SQL 1

Trong đó:

  • column_name(s): Các cột bạn muốn lấy dữ liệu từ bảng chính.
  • table_name: Tên bảng mà bạn muốn truy vấn.
  • Truy vấn con: Đây là một câu truy vấn SQL độc lập, được thực hiện trước và kết quả của nó sẽ được sử dụng trong câu truy vấn chính.

Ví dụ về truy vấn con trong SQL

Ví dụ 1: Một số khiếu nại phổ biến của khách hàng tại Thư viện video MyFlix là số lượng tiêu đề phim ít. Ban quản lý muốn mua một thể loại phim có tiêu đề ít nhất.

Bạn có thể sử dụng một truy vấn như sau:

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies); 

Kết quả như sau:

Truy vấn con (SubQuery) trong SQL 2

Hãy xem cách truy vấn này hoạt động:

Truy vấn con (SubQuery) trong SQL 3

Trên đây là  truy vấn con hàng ( Row SubQuery ) . Trong các truy vấn con như vậy, truy vấn bên trong chỉ có thể cung cấp 1 kết quả. Các phép toán được phép sử dụng khi làm việc với các truy vấn con là [=,>, =, <= ,,! =,]

Ví dụ 2:

Giả sử bạn muốn Tên và số điện thoại của của những người đã thuê phim và chưa trả lại chúng. Khi bạn nhận được Tên và Số điện thoại, bạn gọi cho họ để nhắc nhở. 

Bạn có thể sử dụng một truy vấn như sau:

SELECT full_names, contact_number 
FROM members 
WHERE membership_number IN 
   (SELECT membership_number 
    FROM movierentals 
    WHERE return_date IS NULL);
Truy vấn con (SubQuery) trong SQL 4

Hãy xem cách truy vấn này hoạt động

Truy vấn con (SubQuery) trong SQL 5

Trong trường hợp này, truy vấn bên trong trả về nhiều hơn một kết quả. Đó gọi là truy vấn con bảng ( Table sub-query).

Ví dụ 3: Cho đến bây giờ chúng ta đã thấy hai truy vấn, bây giờ hãy thử một ví dụ với ba truy vấn.

Ban quản lý muốn thưởng cho thành viên sử dụng dịch vụ nhiều nhất.

Chúng ta có thể chạy một truy vấn như sau:

 Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments)); 

Truy vấn trên cho kết quả như sau

Truy vấn con (SubQuery) trong SQL 6

So sánh Truy vấn con và lênh Join !

Khi so sánh với Join trong SQL, các truy vấn con rất dễ sử dụng và dễ đọc. Chúng không phức tạp như Join

Do đó chúng thường được sử dụng bởi những người mới bắt đầu SQL.

Nhưng các truy vấn con có vấn đề về hiệu suất. Nếu sử dụng lênh Join thay vì dùng truy vấn con đôi khi có thể giúp bạn tăng hiệu suất lên tới 500 lần.

Lời khuyên các bạn nên sử dụng Join thay vì truy vấn con.

Các truy vấn con chỉ nên được sử dụng làm giải pháp dự phòng khi bạn không thể sử dụng thao tác lệnh Join để thực hiện những điều trên.

Tóm lược

  • Truy vấn con là các truy vấn bên trong một truy vấn khác. Truy vấn con được gọi là truy vấn bên trong và truy vấn chính được gọi là truy vấn bên ngoài.
  • Các truy vấn con rất dễ sử dụng, tính linh hoạt cao và có thể dễ dàng chia thành các thành phần nhỏ rất logic nó rất hữu ích khi kiểm tra và gỡ lỗi các truy vấn.
  • MySQL hỗ trợ ba loại truy vấn con đó là truy vấn vô hướng, hàng và bảng.
  • Các truy vấn con vô hướng chỉ trả về một hàng đơn và cột đơn.
  • Các truy vấn con hàng chỉ trả về một hàng duy nhất nhưng có thể có nhiều hơn một cột.
  • Các truy vấn con bảng có thể trả về nhiều hàng cũng như các cột.
  • Các truy vấn con cũng có thể được sử dụng trong các truy vấn INSERT,  DELETE và UPDATE trong SQL.
  • Đối với các vấn đề về hiệu năng, khi cần lấy dữ liệu từ nhiều bảng, chúng tôi khuyên bạn nên sử dụng lệnh Join thay vì truy vấn con. 

Chúc các bạn thành công!

Khóa học giúp bạn làm chủ ngôn ngữ truy vấn dữ liệu phổ biến SQL từ cơ bản đến nâng cao. Từ đó có thể tự tin xây dựng, truy vấn, và tối ưu hóa các cơ sở dữ liệu phức tạp, hỗ trợ phân tích, làm báo cáo và ra quyết định kinh doanh một cách hiệu quả.

Đăng ký học thử để trải nghiệm ngay hôm nay!

/5 - ( bình chọn)

/5 - ( bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông