Bài MySQL 25: Các truy vấn con (subquery) trong MySQL

0
72

Xin chào các bạn, trong bài học ngày hôm nay mình sẽ hướng dẫn các bạn sử dụng các truy vấn con hay còn gọi là subquery để viết các truy vấn phức tạp trong MySQL.

Giới thiệu

Truy vấn con là một truy vấn được lồng vào trong một truy vấn khác như SELECT, INSERT, UPDATE hoặc DELETE. Ngoài ra, truy vấn con cũng có thể được lồng vào bên trong một truy vấn con khác.

Truy vấn con được gọi là truy vấn bên trong còn truy vấn chứa truy vấn con được gọi là truy vấn bên ngoài. Truy vấn con có thể được sử dụng ở mọi nơi mà biểu thức được sử dụng và phải được đóng trong cặp dấu ngoặc đơn.

Truy vấn con trong câu lệnh WHERE

Truy vấn sau đây trả về các nhân viên làm việc tại các văn phòng đặt tại Hoa Kỳ:

Trong ví dụ trên:

  • Truy vấn con trả về tất cả các mã văn phòng (code offices) của các văn phòng đặt tại Hoa Kỳ.
  • Truy vấn bên ngoài sẽ lấy ra họ và tên của nhân viên làm việc trong các văn phòng có mã văn phòng nằm trong tập kết quả được truy vấn con trả về.

Khi truy vấn được thực thi, truy vấn con chạy trước và trả về một tập kết quả. Sau đó, tập kết quả này được sử dụng làm đầu vào của truy vấn bên ngoài.

Truy vấn con với các toán tử so sánh

Chúng ta sẽ sử dụng bảng payments để xây dựng các ví dụ:

Bạn có thể sử dụng toán tử so sánh như =, >, <… để so sánh một giá trị được trả về bởi truy vấn con với biểu thức trong câu lệnh WHERE.

Ví dụ: truy vấn sau trả về khách hàng có số thanh toán tối đa.

kết quả là:

Ngoài toán tử ‘=’ như trên, bạn có thể sử dụng các toán tử so sánh khác như lớn hơn (>), nhỏ hơn (<) để xây dựng các câu lệnh truy vấn của mình.

Truy vấn con với các toán tử IN và NOT IN

Nếu truy vấn con trả về nhiều giá trị, bạn có thể sử dụng toán tử khác như toán tử IN hoặc NOT IN trong câu lệnh WHERE.

Ở đây mình có 2 bảng là customersorders như sau:

Bạn có thể sử dụng truy vấn con với toán tử NOT IN để tìm khách hàng chưa đặt bất kỳ đơn hàng nào như sau:

kết quả trả về là:

Truy vấn con với câu lệnh FROM

Khi bạn sử dụng truy vấn con trong câu lệnh FROM, tập kết quả được trả về từ truy vấn con sẽ được sử dụng như một bảng tạm thời. Bảng này được gọi là bảng dẫn xuất.

Truy vấn con sau tìm số lượng tối đa, tối thiểu và trung bình của các đơn đặt hàng:

kết quả trả về là:

Lưu ý: hàm FLOOR() được sử dụng để xóa các số thập phân khỏi các giá trị trung bình được trả về.

Kết luận

Như vậy trong bài học ngày hôm nay mình đã hướng dẫn các bạn sử dụng các truy vấn con để viết các câu truy vấn phức tạp hơn trong MySQL. Trong bài học tiếp theo chúng ta sẽ tìm hiểu về toán tử UNION trong MySQL.

Chúc các bạn học tập tốt!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây