CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Thứ tự thực hiện câu lệnh Select trong SQL Server

Đăng lúc: 10:34 AM - 04/01/2024 bởi Charles Chung - 680

SELECT là một câu truy vấn khá phức tạp, nó có thể được áp dụng lồng trong UPDATE, DELETE để lọc ra đúng dữ liệu cần thực hiện truy vấn. Vậy thứ tự thực hiện các mệnh đề của câu SELECT trong SQL Server như thế nào, bài viết này sẽ làm rõ điều đó.

Câu lệnh SELECT (mang nghĩa lấy dữ liệu hay câu lệnh truy vấn) trong SQL trả về một tập kết quả các bản ghi từ một hoặc nhiều bảng. Sau đây là cú pháp của câu lệnh SELECT trong SQL Server:

Cú pháp đầy đủ của câu lệnh SELECT trong SQL Server rất phức tạp, nhưng các mệnh đề chính có thể được tóm tắt như sau:

[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> ] } ]

SELECT select_list [ INTO new_table ]

[ FROM table_source ] [ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Bỏ qua [ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> ] } ] có thể diễn giải cụ thể như sau:

SELECT DISTINCT <TOP> <danh sách các cột>
FROM <tên bảng 1>
<kiểu join> JOIN <tên bảng 2>
ON <các điều kiện join>
WHERE <các điều kiện where>
GROUP BY <danh sách các cột group by>
HAVING <các điều kiện having>
ORDER BY <danh sách các cột order by>

Trong đó thứ tự thực hiện như sau:

(1) FROM <tên bảng 1>

(2) ON <các điều kiện join>

(3) <kiểu join> JOIN <tên bảng 2>

(4) WHERE <các điều kiện where>

(5) GROUP BY <danh sách các cột group by>

(6) HAVING <các điều kiện having>

(7) SELECT

(8) DISTINCT

(9) ORDER BY <danh sách các cột order by>

(10) <TOP> <danh sách các cột>

Ví dụ 1

1
2
3
4
5
6
7
8
9
/*
	Lấy ra 5 quyển sách có giá cao nhất 
	thông tin lấy từ 2 bảng books và categories 
	gồm (bookid, title, price, categoryname)
*/
SELECT TOP 5 BookId, Title, Price,CategoryName FROM Books b
INNER JOIN Categories c
ON c.CategoryId=b.CategoryId
ORDER BY Price DESC

 

Chiếu theo ở trên thứ tự thực hiện lần lượt sẽ là: FROM->ON->INNER JOIN->SELECT->ORDER BY->TOP và kết quả như hình dưới

Ví dụ 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
/*
	Thống kế các loại sách có tên loại bắt đầu bằng chữ 'Sách' và  có tổng giá >200000
	Thông tin đưa ra gồm (CategoryId, CategoryName, TotalPrice)
	và được sắp xếp tăng dần theo tên loại
*/
SELECT c.CategoryId,CategoryName, sum(Price) as TotalPrice
FROM Books b
INNER JOIN Categories c
ON c.CategoryId=b.CategoryId
WHERE CategoryName like N'Sách%'
GROUP BY c.CategoryId, CategoryName
HAVING sum(Price)>200000
ORDER BY c.CategoryName ASC

 

Chiếu theo ở trên thứ tự thực hiện lần lượt sẽ là: FROM->ON->INNER JOIN->WHERE->GROUP BY->HAVING->SELECT->ORDER BY và kết quả như hình dưới
Chúc các bạn thành công, các bạn có thể tham khảo bài viết Luồng xử lý câu lệnh T-SQL trong SQL Server để hiểu về quá trình phân tích và xử lý câu SQL

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ