SQL Query là một câu truy vấn yêu cầu dữ liệu từ DBMS.

Thứ tự thực thi các từ khóa ở trong một câu truy vấn SQL:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

Quá trình thực thi câu truy vấn SQL sẽ bao gồm ba giai đoạn:

  1. Row filtering lần 1: thực thi các mệnh đề FROM, WHERE, GROUP BYHAVING.
  2. Column filtering: lọc các cột bằng cách thực thi mệnh đề SELECT.
  3. Row filtering lần 2: thực thi các mệnh đề còn lại.

Giả sử ta có một bảng thông tin sinh viên:

id_name_markssection_
1Julia88A
2Samantha68B
3Maria10C
4Scarlet78A
5Ashley63B
6Abir95D
7Jane81A
8Jahid25C
9Sohel90D
10Rahim80A
11Karim81B
12Abdullah92D

Và ta gọi câu truy vấn sau:

SELECT section_, sum(marks) 
FROM students 
WHERE id_ < 10 
GROUP BY section_ 
HAVING sum(marks) > 100 
ORDER BY section_ 
LIMIT 2;

Kết quả của câu truy vấn:

section_sum
A247
B131

Các bước thực hiện:

FROM, WHERE Clause Execution

Câu truy vấn FROM students WHERE id_ < 10 sẽ loại bỏ các dòng có id_ lớn hơn hoặc bằng 10.

Bảng dữ liệu trở thành:

id_name_markssection_
1Julia88A
2Samantha68B
3Maria10C
4Scarlet78A
5Ashley63B
6Abir95D
7Jane81A
8Jahid25C
9Sohel90D

GROUP BY Clause Execution

Câu truy vấn GROUP BY section_ sẽ gom nhóm các dòng dữ liệu dựa trên thuộc tính section_.

Bảng dữ liệu khi đó có thể có dạng như sau:

id_name_markssection_
9Sohel90D
6Abir95D
1Julia88A
4Scarlet78A
7Jane81A
2Samantha68B
5Ashley63B
3Maria10C
8Jahid25C

HAVING Clause Execution

Câu lệnh having sum(marks) > 100 sẽ loại bỏ những nhóm mà có tổng điểm nhỏ hơn hoặc bằng 100. Tổng điểm của các nhóm là:

  • D: 185
  • A: 247
  • B: 131
  • C: 35

Do tổng điểm của nhóm C nhỏ hơn 100 nên nó sẽ bị loại bỏ:

id_name_markssection_
9Sohel90D
6Abir95D
1Julia88A
4Scarlet78A
7Jane81A
2Samantha68B
5Ashley63B

SELECT Clause Execution

Câu lệnh SELECT section_, sum(marks) sẽ lọc ra các cột cần hiển thị:

section_sum
D185
A245
B131

ORDER BY Clause Execution

Câu lệnh ORDER BY section_ sẽ sắp xếp các dòng theo thứ tự tăng dần:

section_sum
A245
B131
D185

LIMIT Clause Execution

Câu lệnh LIMIT 2; chỉ in ra hai dòng đầu tiên:

section_sum
A245
B131

Resources