Xem thêm

Tài liệu học SQL: Phần 6 - SQL nâng cao với SUBQUERY và CTE

Huy Erick
Trong quá trình sử dụng SQL, chúng ta thường gặp phải những vấn đề phức tạp đòi hỏi nhiều hơn là chỉ một truy vấn đơn giản. Để giải quyết những vấn đề này, chúng...

Trong quá trình sử dụng SQL, chúng ta thường gặp phải những vấn đề phức tạp đòi hỏi nhiều hơn là chỉ một truy vấn đơn giản. Để giải quyết những vấn đề này, chúng ta cần tìm hiểu về Subquery và CTE và ứng dụng của chúng. Đây là phần khép lại cho chuỗi series tài liệu tự học SQL của DATAPOT. Đừng bỏ lỡ các phần tài liệu hữu ích phía trước.

Truy vấn con (Subquery)

Truy vấn con (Subquery) thường được sử dụng trong các câu truy vấn đòi hỏi tính toán phức tạp. Chúng ta sử dụng Subquery khi cần tính toán dữ liệu và tạo ra một bảng dữ liệu tạm thời mới. Truy vấn con có thể được sử dụng trong các câu lệnh như SELECT, FROM, JOIN hoặc bất kỳ phép toán tập hợp nào.

Truy vấn con (Subquery) dùng với IN

Khi sử dụng Subquery với IN, chúng ta xem Subquery là một điều kiện trong hàm IN. Dưới đây là một ví dụ về cú pháp và giải thích truy vấn con.

SELECT BusinessEntityID, LastName
FROM Person.Person
WHERE BusinessEntityID IN (
    SELECT BusinessEntityID
    FROM HumanResources.Employee
    WHERE JobTitle = 'Marketing Specialist'
);

Truy vấn con (Subquery) sử dụng với mệnh đề FROM

Subquery cũng có thể được sử dụng như một bảng dữ liệu khi nằm trong mệnh đề FROM của câu truy vấn. Dưới đây là một ví dụ về cú pháp và giải thích truy vấn con.

SELECT SP.Name, SP.ProductCategoryID, SP.ProductNumber, SPD.Description
FROM Product AS SP, (
    SELECT Description
    FROM ProductDescription
    WHERE ModifiedDate = '2007-06-01'
) AS SPD
WHERE SP.ProductID = SPD.ProductID;

Truy vấn con tương quan (Correlated Subquery)

Một ứng dụng khác của Subquery là Correlated Subquery, trong đó Subquery sử dụng các giá trị từ truy vấn chính trong mệnh đề WHERE của nó. Dưới đây là một ví dụ về cú pháp và giải thích truy vấn con tương quan.

SELECT ProductID, Name, ListPrice
FROM Production.Product PD1
WHERE ListPrice > (
    SELECT AVG(ListPrice)
    FROM Production.Product PD2
    WHERE PD1.ProductCategoryID = PD2.ProductCategoryID
);

Bảng chứa dữ liệu tạm thời (Common Table Expressions)

Bảng chứa dữ liệu tạm thời (Common Table Expressions - CTE) là một công cụ mạnh mẽ trong SQL để tính toán và tạo ra các bảng chứa dữ liệu tạm thời để có thể tái sử dụng trong câu lệnh truy vấn chính. CTE không làm cho cơ sở dữ liệu trở nên nặng nề. Dưới đây là một ví dụ về cú pháp và giải thích CTE.

WITH ProductInformation (Name, ProductNumber, StandardCost)
AS (
    SELECT p.Name, p.ProductNumber, p.StandardCost
    FROM SalesLT.Product AS p
    INNER JOIN SalesLT.ProductCategory AS pc
    ON p.ProductCategoryID = pc.ProductCategoryID
    WHERE p.StandardCost > 1000
)
SELECT *
FROM ProductInformation
ORDER BY Name ASC;

Một số lưu ý thường gặp khi sử dụng Subquery và CTE

Khi sử dụng Subquery trong mệnh đề FROM, cần gán tên alias để tránh lỗi. Nên sử dụng CTE thay cho Subquery để làm cho truy vấn dễ hiểu hơn. Có thể có nhiều CTE trong một câu lệnh.

Ưu và nhược điểm

  • CTE có thể sử dụng nhiều lần trong một truy vấn, trong khi SUBQUERY chỉ có thể sử dụng một lần.
  • SUBQUERY có thể sử dụng trong mệnh đề WHERE kết hợp với từ khóa IN hoặc EXISTS, nhưng bạn không thể thực hiện điều này với CTE.
  • CTE có thể được sử dụng để thực hiện các truy vấn đệ quy, rất hữu ích cho việc xử lý dữ liệu phân cấp hoặc dạng cây, nhưng các truy vấn phụ thì không thể.

Sử dụng Subquery và CTE cho phép chúng ta viết các truy vấn SQL nâng cao và mạnh mẽ, giúp trả lời nhiều câu hỏi thú vị và hữu ích về dữ liệu. Chúng cũng giúp cải thiện khả năng đọc và duy trì các truy vấn bằng cách chia nhỏ chúng thành các đơn vị nhỏ hơn, dễ quản lý hơn. DATAPOT hy vọng rằng chuỗi series này hữu ích cho bạn trong việc tìm hiểu về SQL. Chúng tôi mong nhận được phản hồi tích cực từ bạn để có thể mang đến giá trị tốt hơn. Xin cảm ơn sự quan tâm và ủng hộ của bạn!

1