MySQL Hướng dẫn SubQuery với các ví dụ

Truy vấn phụ là gì?

Truy vấn phụ là truy vấn chọn được chứa bên trong một truy vấn khác. Truy vấn chọn bên trong thường được sử dụng để xác định kết quả của truy vấn chọn bên ngoài.

Hãy xem xét cú pháp truy vấn phụ –

MySQL Truy vấn con

Lời phàn nàn thường gặp của khách hàng tại Thư viện Video MyFlix là số lượng tựa phim thấp. Ban quản lý muốn mua phim thuộc danh mục có ít tựa đề nhất.

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

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

Nó cho một kết quả

MySQL Truy vấn con

Hãy xem truy vấn này hoạt động như thế nào

MySQL Truy vấn con

Trên đây là một dạng Truy vấn phụ hàng. Trong các truy vấn phụ như vậy, truy vấn bên trong chỉ có thể cho MỘT kết quả. Các toán tử được phép khi làm việc với truy vấn con hàng là [=, >, =, <=, ,!=, ]

Hãy xem một ví dụ khác,

Giả sử bạn muốn Tên và Số điện thoại của các thành viên trong số những người đã thuê phim và chưa trả lại. Khi bạn nhận được Tên và Số điện thoại, bạn hãy gọi cho họ để nhắc nhở. Bạn có thể sử dụng một truy vấn như

SELECT full_names,contact_number FROM   members  WHERE  membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );


MySQL Truy vấn con

Hãy xem truy vấn này hoạt động như thế nào

MySQL Truy vấn con

Trong trường hợp này, truy vấn bên trong trả về nhiều kết quả. Trên đây là loại Tcó thể truy vấn phụy.

Cho đến bây giờ chúng ta đã thấy hai truy vấn, bây giờ hãy xem một ví dụ về truy vấn ba lần!!!

Giả sử ban quản lý muốn thưởng cho thành viên được trả lương cao nhất.

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

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 đưa ra kết quả sau –

MySQL Truy vấn con

Truy vấn phụ và tham gia!

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

Do đó thường được sử dụng bởi Người mới bắt đầu học SQL.

Nhưng các truy vấn phụ có vấn đề về hiệu suất. Đôi khi, việc sử dụng phép nối thay vì truy vấn phụ có thể giúp bạn tăng hiệu suất lên tới 500 lần.

Khi được lựa chọn, bạn nên sử dụng THAM GIA thay vì truy vấn phụ.


Chỉ nên sử dụng Truy vấn phụ làm giải pháp dự phòng khi bạn không thể sử dụng thao tác THAM GIA để đạt được mục tiêu trên

Truy vấn phụ Vs Tham gia

Tổng kết

  • Truy vấn con là các truy vấn được nhúng bên trong một truy vấn khác. Truy vấn nhúng được gọi là truy vấn bên trong và truy vấn vùng chứa được gọi là truy vấn bên ngoài.
  • Truy vấn phụ rất dễ sử dụng, mang lại tính linh hoạt cao và có thể dễ dàng chia thành các thành phần logic đơn lẻ tạo nên truy vấ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, truy vấn con vô hướng, hàng và bảng.
  • Truy vấn phụ vô hướng chỉ trả về một hàng và một cột.
  • Truy vấn phụ hàng chỉ trả về một hàng duy nhất nhưng có thể có nhiều cột.
  • Truy vấn con bảng có thể trả về nhiều hàng cũng như nhiều cột.
  • Truy vấn con cũng có thể được sử dụng trong các truy vấn INSERT, UPDATE và DELETE.
  • Đối với các vấn đề về hiệu suất, 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 THAM GIA thay vì truy vấn phụ. Truy vấn phụ chỉ nên được sử dụng với lý do chính đáng.