Bài viết gần đây
-
-
Bot MT5 Free, Bot Trade Vàng Free Có Đáng Tin? Rủi Ro Cần Biết
Tháng 6 29, 2026 -
Lập Trình Bot Trade Exness Bằng MT5: Hướng Dẫn Kết Nối
Tháng 6 29, 2026 -
Cài Bot MT5 Trên Điện Thoại Được Không? Sự Thật Cần Biết
Tháng 6 29, 2026 -
Cách Lập Trình Bot Trade Forex MT5 Từ A-Z (2026)
Tháng 6 29, 2026
| Truy Vấn SQL Nâng Cao trong SQL Server
Được viết bởi admin vào ngày 13/11/2025 lúc 06:11 | 113 lượt xem
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
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
LEFT JOIN
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
RIGHT JOIN
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
FULL JOIN
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
SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice > (
SELECT AVG(UnitPrice)
FROM Products
);
Trong mệnh đề FROM
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
SELECT
ProductName,
UnitPrice,
(SELECT AVG(UnitPrice) FROM Products) as AvgPrice
FROM Products;
Common Table Expressions (CTE)
CTE cơ bản
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
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()
SELECT
ProductName,
UnitPrice,
ROW_NUMBER() OVER (ORDER BY UnitPrice DESC) as PriceRank
FROM Products;
RANK() và DENSE_RANK()
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()
SELECT
OrderID,
OrderDate,
LAG(OrderDate) OVER (ORDER BY OrderDate) as PreviousOrder,
LEAD(OrderDate) OVER (ORDER BY OrderDate) as NextOrder
FROM Orders;
Best Practices
- Sử dụng JOIN thay vì Subquery khi có thể
- Tối ưu hiệu suất với Index
- Tránh SELECT *
- Sử dụng CTE để cải thiện khả năng đọc
- 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.
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
admin
Biên tập viên, Hướng Nghiệp Dữ LiệuBiên tập viên nội dung tại Hướng Nghiệp Dữ Liệu, phụ trách tổng hợp và biên soạn các bài viết về lập trình Python, dữ liệu và công nghệ.