Quay lại danh sách bài viết

Truy Vấn SQL Nâng Cao trong SQL Server

30 tháng 11, 2025
admin
Truy Vấn SQL Nâng Cao trong SQL Server
# Truy Vấn SQL Nâng Cao trong SQL Server Trong bài viết này, chúng ta sẽ tìm hiểu về các kỹ thuật truy vấn SQL nâng cao trong SQL Server, bao gồm JOIN, Subquery, và Common Table Expressions (CTE). ## JOIN - Kết hợp dữ liệu từ nhiều bảng ### INNER JOIN ```sql SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID; ``` ### LEFT JOIN ```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` ### RIGHT JOIN ```sql SELECT Orders.OrderID, Customers.CustomerName FROM Orders RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID; ``` ### FULL JOIN ```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` ## Subquery - Truy vấn lồng nhau ### Trong mệnh đề WHERE ```sql SELECT ProductName, UnitPrice FROM Products WHERE UnitPrice > ( SELECT AVG(UnitPrice) FROM Products ); ``` ### Trong mệnh đề FROM ```sql SELECT CategoryName, AvgPrice FROM ( SELECT CategoryID, AVG(UnitPrice) as AvgPrice FROM Products GROUP BY CategoryID ) AS CategoryAvg JOIN Categories ON CategoryAvg.CategoryID = Categories.CategoryID; ``` ### Trong mệnh đề SELECT ```sql SELECT ProductName, UnitPrice, (SELECT AVG(UnitPrice) FROM Products) as AvgPrice FROM Products; ``` ## Common Table Expressions (CTE) ### CTE cơ bản ```sql WITH SalesCTE AS ( SELECT ProductID, SUM(Quantity) as TotalQuantity FROM OrderDetails GROUP BY ProductID ) SELECT p.ProductName, s.TotalQuantity FROM Products p JOIN SalesCTE s ON p.ProductID = s.ProductID; ``` ### CTE đệ quy ```sql WITH EmployeeHierarchy AS ( -- Anchor member SELECT EmployeeID, ManagerID, EmployeeName, 1 as Level FROM Employees WHERE ManagerID IS NULL UNION ALL -- Recursive member SELECT e.EmployeeID, e.ManagerID, e.EmployeeName, eh.Level + 1 FROM Employees e JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID ) SELECT * FROM EmployeeHierarchy; ``` ## Window Functions ### ROW_NUMBER() ```sql SELECT ProductName, UnitPrice, ROW_NUMBER() OVER (ORDER BY UnitPrice DESC) as PriceRank FROM Products; ``` ### RANK() và DENSE_RANK() ```sql SELECT ProductName, UnitPrice, RANK() OVER (ORDER BY UnitPrice DESC) as PriceRank, DENSE_RANK() OVER (ORDER BY UnitPrice DESC) as DensePriceRank FROM Products; ``` ### LAG() và LEAD() ```sql SELECT OrderID, OrderDate, LAG(OrderDate) OVER (ORDER BY OrderDate) as PreviousOrder, LEAD(OrderDate) OVER (ORDER BY OrderDate) as NextOrder FROM Orders; ``` ## Best Practices 1. Sử dụng JOIN thay vì Subquery khi có thể 2. Tối ưu hiệu suất với Index 3. Tránh SELECT * 4. Sử dụng CTE để cải thiện khả năng đọc 5. Kiểm tra Execution Plan ## Kết luận Các kỹ thuật truy vấn SQL nâng cao giúp bạn xử lý dữ liệu phức tạp một cách hiệu quả. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về Stored Procedures và Functions trong SQL Server.
sql-server
sql
advanced
Chia sẻ:

Bài viết liên quan

Stored Procedures và Functions trong SQL Server

Stored Procedures và Functions trong SQL Server Trong bài viết này, chúng ta sẽ tìm hiểu về Stored Procedures và Functions trong SQL Server, hai cô...

Index và Tối Ưu Hiệu Suất trong SQL Server

Index và Tối Ưu Hiệu Suất trong SQL Server Trong bài viết này, chúng ta sẽ tìm hiểu về Index và các kỹ thuật tối ưu hiệu suất trong SQL Server. ...

Backup và Restore trong SQL Server

Backup và Restore trong SQL Server Trong bài viết này, chúng ta sẽ tìm hiểu về các phương pháp backup và restore database trong SQL Server. Các...