Truy vấn lồng SQL

Truy vấn lồng SQL P2 - Multi-values Subqueries

Trong phần trước, GNV đã giới thiệu các bạn về Subquery và Scalar subqueries cùng với một số ví dụ minh họa. Nếu bạn chưa xem Truy vấn lồng SQL phần 1 thì có thể xem lại trước khi xem P2  nhé.

Ví dụ về Multi-values Subqueries:

SELECT CustomerID, SalesOrderID
FROM Sales.SalesOrderHeader
WHERE CustomerID IN (
                                             SELECT CustomerID
                                             FROM Sales.Customer
                                             WHERE CountryRegion = ‘Canada’
                                             );

Câu lệnh được mình bôi màu hồng chính là một ví dụ của truy vấn lồng SQL: “Multi-values Subqueries”, Multi-values vì bạn sẽ giá trị trả lại khi bạn thực thi câu lệnh trên là một cột  “CustomerID” chứa nhiều giá trị khác nhau thay vì một giá trị như câu lệnh Scalar Subqueries.

Ví dụ mình muốn lấy ra những ID khách hàng đã đặt hàng thành công và lấy ra địa chỉ của họ để giao hàng. Như vậy, từ bảng Transaction mình chọn ra những ID có giao dịch đã được “Approved”, từ đó tìm đ.chỉ của những ID này để giao hàng (bảng Customers_address). Câu lệnh sẽ như sau:

SELECT CA.customer_id, CA.address, CA.country, CA.[state]
FROM DBO.CustomerAddress AS CA 
WHERE CA.customer_id IN (
                                                  SELECT distinct customer_id
                                                  FROM DBO.Transactions 
                                                  WHERE order_status = ‘Approved’ 
                                                                    ); 

Thông thường, chúng ta vẫn có thể sử dụng  mệnh đề JOIN để tìm ra kết quả tương tự. Đúng vậy chúng ta có thể sử dụng mệnh đề JOIN để thực hiện câu truy vấn trên.

Truy vấn lồng SQL

Vậy khi nào chúng ta cần sử dụng truy vấn lồng SQL trên thay vì sử dụng JOIN ? Câu trả lời là chúng ta không thể có câu trả lởi chính xác được, đôi khi sử dụng truy vấn nào sẽ phụ thuộc vào bạn. Nếu bạn cảm thấy tự tin sử dụng truy vấn lồng SQL thay thì JOIN thì sử dụng Subqueries. 

Sometimes, sử dụng các truy vấn lồng SQL để thực hiện các truy vấn phức tạp vẫn nhanh hơn sử dụng JOIN. Nhưng chỉ có những SQL Developer hay Data Engineer hay phải viết những câu truy vấn khó mới cần quan tâm những điều trên.

Hầu hết dữ liệu chúng ta xử lý thường không quá lớn đến nỗi để có thể phân biệt được tốc độ xử lý của hai câu lệnh sử dụng Truy vấn lồng SQL và sử dụng JOIN. Nếu bạn cảm thấy vẫn chưa hiểu được Subqueries thì có thể đặt câu hỏi cho GNV tại đây và tham khảo các video để có thể hiểu được nhé.

Nội dung