# Bài tập SQL

Bài tập SQL từ cơ bản đến nâng cao

# BÀI SQL Cơ bản – CHỦ ĐỀ: HỆ THỐNG BÁN HÀNG / ĐƠN HÀNG

###  Bảng users

users (

 id BIGINT PRIMARY KEY,

 username VARCHAR(50),

 full\_name VARCHAR(100),

 email VARCHAR(100),

 department\_id BIGINT,

 status INT, -- 1: active, 0: inactive

 created\_at TIMESTAMP

)

###  Bảng departments

departments (

 id BIGINT PRIMARY KEY,

 name VARCHAR(100)

)

###  Bảng documents

documents (

 id BIGINT PRIMARY KEY,

 title VARCHAR(255),

 creator\_id BIGINT,

 status VARCHAR(20), -- draft, processing, completed

 created\_at TIMESTAMP

)

###  Bảng document\_logs

document\_logs (

 id BIGINT PRIMARY KEY,

 document\_id BIGINT,

 action VARCHAR(50), -- create, approve, reject, view

 user\_id BIGINT,

 created\_at TIMESTAMP

)

---

# Bài test

⏱ Thời gian gợi ý: 30–40 phút  
🎯 Mục tiêu:

- SELECT, WHERE
- JOIN cơ bản
- COUNT, GROUP BY
- ORDER BY
- Hiểu dữ liệu nghiệp vụ

---

##  Câu 1: Lấy danh sách user đang hoạt động

Yêu cầu:  
Lấy username, full\_name, email của user có status = 1

---

##  Câu 2: User theo phòng ban

Yêu cầu:  
Lấy danh sách user kèm tên phòng ban, sắp xếp theo tên phòng ban tăng dần

---

##  Câu 3: Đếm số user theo phòng ban

Yêu cầu:  
Mỗi phòng ban có bao nhiêu user (chỉ tính user active)

Output:

department\_name | total\_users

---

##  Câu 4: Văn bản do user tạo

Yêu cầu:  
Lấy danh sách văn bản (title, created\_at) do user có username = 'admin' tạo

---

##  Câu 5: Thống kê văn bản theo trạng thái

Yêu cầu:  
Đếm số văn bản theo từng status

---

### Tiêu chí pass Cơ bản

- Viết được SELECT đúng
- JOIN không sai logic
- Không dùng SELECT \*
- Kết quả đúng nghiệp vụ

# BÀI TEST SQL – CHỦ ĐỀ: HỆ THỐNG BÁN HÀNG / ĐƠN HÀNG

---

# I. MÔ TẢ CHUNG

### Giả định CSDL: MySQL / PostgreSQL

---

## 1️⃣ Bảng customers

customers (

 id BIGINT PRIMARY KEY,

 customer\_code VARCHAR(50),

 full\_name VARCHAR(100),

 email VARCHAR(100),

 status INT, -- 1: active, 0: inactive

 created\_at TIMESTAMP

)

---

## 2️⃣ Bảng products

products (

 id BIGINT PRIMARY KEY,

 product\_code VARCHAR(50),

 name VARCHAR(255),

 price DECIMAL(12,2),

 status INT -- 1: selling, 0: stopped

)

---

## 3️⃣ Bảng orders

orders (

 id BIGINT PRIMARY KEY,

 order\_code VARCHAR(50),

 customer\_id BIGINT,

 order\_date TIMESTAMP,

 status VARCHAR(20) -- new, paid, cancelled, completed

)

---

## 4️⃣ Bảng order\_items

order\_items (

 id BIGINT PRIMARY KEY,

 order\_id BIGINT,

 product\_id BIGINT,

 quantity INT,

 unit\_price DECIMAL(12,2)

)

---

## 5️⃣ Bảng payment\_logs

payment\_logs (

 id BIGINT PRIMARY KEY,

 order\_id BIGINT,

 payment\_method VARCHAR(50), -- cash, bank, momo

 amount DECIMAL(12,2),

 payment\_time TIMESTAMP

)

---

# II. BÀI TEST SQL – MỨC ĐỘ CƠ BẢN

⏱ Thời gian: 30–40 phút  
🎯 Mục tiêu:

- SELECT, WHERE
- JOIN cơ bản
- COUNT, SUM
- GROUP BY
- Hiểu nghiệp vụ bán hàng

---

## 🟢 Câu 1: Khách hàng đang hoạt động

Yêu cầu:  
Lấy danh sách customer\_code, full\_name, email của khách hàng có status = 1

---

## 🟢 Câu 2: Danh sách đơn hàng kèm tên khách hàng

Yêu cầu:  
Lấy order\_code, order\_date, status, full\_name

Sắp xếp theo order\_date giảm dần

---

## 🟢 Câu 3: Thống kê số đơn theo trạng thái

Yêu cầu:  
Đếm số lượng đơn theo từng status

---

## 🟢 Câu 4: Sản phẩm trong một đơn hàng

Yêu cầu:  
Với order\_code = 'ORD001', liệt kê:

product\_code | product\_name | quantity | unit\_price

---

## 🟢 Câu 5: Tổng tiền của mỗi đơn hàng

Yêu cầu:  
Tính tổng tiền = SUM(quantity \* unit\_price) cho từng đơn hàng

---

### ✅ Tiêu chí pass Cơ bản

- JOIN đúng
- Tính toán chính xác
- Không lạm dụng SELECT \*

---

# III. BÀI TEST SQL – MỨC ĐỘ NÂNG CAO

⏱ Thời gian: 60–90 phút  
🎯 Mục tiêu:

- Subquery
- LEFT JOIN / NOT EXISTS
- Kiểm thử dữ liệu
- Phát hiện sai lệch nghiệp vụ
- SQL tối ưu

---

## 🔵 Câu 1: Khách hàng chưa từng đặt đơn

Yêu cầu:  
Liệt kê khách hàng chưa có bất kỳ order nào

---

## 🔵 Câu 2: Đơn hàng chưa được thanh toán

Yêu cầu:  
Lấy danh sách đơn hàng không có bản ghi trong payment\_logs

---

## 🔵 Câu 3: Đơn hàng có tổng tiền khác tổng thanh toán

Yêu cầu:  
Phát hiện các đơn hàng mà:

SUM(order\_items) ≠ SUM(payment\_logs.amount)

➡️ Mục tiêu: kiểm thử sai lệch dữ liệu tài chính

---

## 🔵 Câu 4: Sản phẩm bán chạy nhất

Yêu cầu:  
Tìm sản phẩm có tổng số lượng bán ra cao nhất  
(Chỉ tính đơn status = 'completed')

---

## 🔵 Câu 5: Lần mua gần nhất của mỗi khách hàng

Yêu cầu:  
Với mỗi khách hàng, lấy đơn hàng mới nhất

Output:

customer\_code | full\_name | last\_order\_date

➡️ Gợi ý:

- MAX(order\_date)
- CTE hoặc subquery

---

## 🔵 Câu 6: Phát hiện dữ liệu bất thường

Yêu cầu:  
Liệt kê:

1. order\_items có product\_id không tồn tại
2. orders có customer\_id không tồn tại

➡️ Mục tiêu: Data Integrity Testing

---

## 🔵 Câu 7 (Bonus – Tư duy hệ thống)

Câu hỏi lý thuyết:

1. Nên index những cột nào?
2. Vì sao không nên tính tổng tiền từ orders.total\_amount nếu có order\_items?

---

# ĐỀ TEST SQL – CHỦ ĐỀ: QUẢN LÝ SINH VIÊN

<span lang="vi" style="font-family: 'Arial Unicode MS'; mso-fareast-font-family: 'Arial Unicode MS'; mso-bidi-font-family: 'Arial Unicode MS';">⏱ Thời gian làm bài: </span>**<span lang="vi">90 phút  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>🎯 Mục tiêu đánh giá:</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">Viết SQL chính xác  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">Hiểu nghiệp vụ giáo dục  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">Phát hiện dữ liệu bất thường  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">Tư duy kiểm thử dữ liệu  
  
</span>

<div align="center" class="MsoNormal" id="bkmrk-" style="text-align: center;">---

</div>### <a name="_z6gvhtcmlp5o"></a>**<span lang="vi" style="font-size: 23.0pt; line-height: 115%;">I. MÔ TẢ HỆ THỐNG &amp; CSDL</span>**

<span lang="vi">Giả định DB: MySQL / PostgreSQL</span>

<div align="center" class="MsoNormal" id="bkmrk--1" style="text-align: center;">---

</div>## <a name="_mohh93ryenjv"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">1️⃣ Bảng </span><span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">students</span>**

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">students (</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>id BIGINT PRIMARY KEY,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>student\_code VARCHAR(20),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>full\_name VARCHAR(100),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>gender VARCHAR(10),<span style="mso-spacerun: yes;"> </span>-- male, female</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>date\_of\_birth DATE,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>class\_id BIGINT,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>status VARCHAR(20),<span style="mso-spacerun: yes;"> </span>-- studying, graduated, dropped</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>created\_at TIMESTAMP</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">)</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--2" style="text-align: center;">---

</div>## <a name="_cmj9gjw02bqw"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">2️⃣ Bảng </span><span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">classes</span>**

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">classes (</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>id BIGINT PRIMARY KEY,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>class\_code VARCHAR(20),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>class\_name VARCHAR(100),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>department VARCHAR(100)</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">)</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--3" style="text-align: center;">---

</div>## <a name="_7hnhnex9ij02"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">3️⃣ Bảng </span><span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">subjects</span>**

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">subjects (</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>id BIGINT PRIMARY KEY,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>subject\_code VARCHAR(20),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>subject\_name VARCHAR(100),</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>credit INT</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">)</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--4" style="text-align: center;">---

</div>## <a name="_phf6kfiwtnxb"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">4️⃣ Bảng </span><span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">enrollments</span>**

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">enrollments (</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>id BIGINT PRIMARY KEY,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>student\_id BIGINT,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>subject\_id BIGINT,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>semester VARCHAR(20),<span style="mso-spacerun: yes;"> </span>-- 2024-1, 2024-2</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>score DECIMAL(4,2)</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">)</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--5" style="text-align: center;">---

</div>## <a name="_uu7gj7bykt5c"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">5️⃣ Bảng </span><span lang="vi" style="font-size: 17.0pt; line-height: 115%; font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">attendance\_logs</span>**

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">attendance\_logs (</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>id BIGINT PRIMARY KEY,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>student\_id BIGINT,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>subject\_id BIGINT,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>attend\_date DATE,</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;"><span style="mso-spacerun: yes;"> </span>status VARCHAR(20)<span style="mso-spacerun: yes;"> </span>-- present, absent</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">)</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--6" style="text-align: center;">---

</div># <a name="_7exc8foz8mvr"></a>**<span lang="vi" style="font-size: 23.0pt; line-height: 115%;">II. PHẦN A – SQL CƠ BẢN</span>**

<span lang="vi" style="font-family: 'Arial Unicode MS'; mso-fareast-font-family: 'Arial Unicode MS'; mso-bidi-font-family: 'Arial Unicode MS';">⏱ Thời gian gợi ý: </span>**<span lang="vi">35–40 phút</span>**

<div align="center" class="MsoNormal" id="bkmrk--7" style="text-align: center;">---

</div>## <a name="_4a86x6ukyvac"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🟢 Câu 1: Danh sách sinh viên đang học</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Lấy </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">student\_code, full\_name, gender, status</span><span lang="vi"> của sinh viên có </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">status = 'studying'</span>

<div align="center" class="MsoNormal" id="bkmrk--8" style="text-align: center;">---

</div>## <a name="_xcwcrkorkft8"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🟢 Câu 2: Sinh viên và lớp học</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Lấy danh sách sinh viên kèm </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">class\_code, class\_name</span>

<div align="center" class="MsoNormal" id="bkmrk--9" style="text-align: center;">---

</div>## <a name="_ywhiy39tbf6k"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🟢 Câu 3: Số sinh viên theo khoa</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Thống kê số lượng sinh viên theo </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">department</span>

<div align="center" class="MsoNormal" id="bkmrk--10" style="text-align: center;">---

</div>## <a name="_dglgsun2vbbp"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🟢 Câu 4: Môn học mà sinh viên đăng ký</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Với </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">student\_code = 'SV001'</span><span lang="vi">, liệt kê:</span>

<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">subject\_code | subject\_name | semester | score</span>

<span lang="vi"> </span>

<div align="center" class="MsoNormal" id="bkmrk--11" style="text-align: center;">---

</div>## <a name="_ik8ki855l3mb"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🟢 Câu 5: Điểm trung bình của mỗi sinh viên</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Tính **điểm trung bình (AVG)** của từng sinh viên</span>

<div align="center" class="MsoNormal" id="bkmrk--12" style="text-align: center;">---

</div>### <a name="_2c0276arrd2m"></a>**<span lang="vi" style="font-size: 13.0pt; line-height: 115%; font-family: 'Arial Unicode MS'; mso-fareast-font-family: 'Arial Unicode MS'; mso-bidi-font-family: 'Arial Unicode MS'; color: black;">✅ Tiêu chí pass Cơ bản</span>**

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">JOIN đúng  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">GROUP BY chính xác  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">Không </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">SELECT \*  
  
</span>

<span lang="vi"><span style="mso-list: Ignore;">●<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="vi">SQL chạy được  
  
</span>

<div align="center" class="MsoNormal" id="bkmrk--13" style="text-align: center;">---

</div>### <a name="_rjuqw6cntzqx"></a>**<span lang="vi" style="font-size: 23.0pt; line-height: 115%;">III. PHẦN B – SQL NÂNG CAO</span>**

<span lang="vi" style="font-family: 'Arial Unicode MS'; mso-fareast-font-family: 'Arial Unicode MS'; mso-bidi-font-family: 'Arial Unicode MS';">⏱ Thời gian gợi ý: </span>**<span lang="vi">50–55 phút</span>**

<div align="center" class="MsoNormal" id="bkmrk--14" style="text-align: center;">---

</div>## <a name="_m1nyxds2z9na"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 6: Sinh viên chưa đăng ký môn học nào</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Liệt kê sinh viên **không có bản ghi trong** </span>**<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">enrollments</span>**

<div align="center" class="MsoNormal" id="bkmrk--15" style="text-align: center;">---

</div>## <a name="_asw6tnm16kjn"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 7: Sinh viên trượt môn</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Liệt kê sinh viên có **bất kỳ môn nào có** </span>**<span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">score &lt; 5</span>**

<div align="center" class="MsoNormal" id="bkmrk--16" style="text-align: center;">---

</div>## <a name="_na8wrqv10ccd"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 8: Môn học có số sinh viên đăng ký nhiều nhất</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Tìm môn học có **số lượng sinh viên đăng ký cao nhất**</span>

<div align="center" class="MsoNormal" id="bkmrk--17" style="text-align: center;">---

</div>## <a name="_3dua5u7kfc6i"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 9: Lần điểm danh gần nhất của mỗi sinh viên</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Với mỗi sinh viên, lấy **bản ghi điểm danh mới nhất** (ngày &amp; trạng thái)</span>

<div align="center" class="MsoNormal" id="bkmrk--18" style="text-align: center;">---

</div>## <a name="_jb56pjpmjee1"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 10: Phát hiện dữ liệu bất thường</span>**

**<span lang="vi">Yêu cầu:  
</span>**<span lang="vi"><span style="mso-spacerun: yes;"> </span>Liệt kê:</span>

1. <span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">enrollments</span><span lang="vi"> có </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">student\_id</span><span lang="vi"> không tồn tại  
      
    </span>
2. <span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">attendance\_logs</span><span lang="vi"> có </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">subject\_id</span><span lang="vi"> không tồn tại  
      
    </span>

<span lang="vi">➡️ Mục tiêu: **Data Integrity Testing**</span>

<div align="center" class="MsoNormal" id="bkmrk--19" style="text-align: center;">---

</div>## <a name="_uikvkil0ffiw"></a>**<span lang="vi" style="font-size: 17.0pt; line-height: 115%;">🔵 Câu 11 (Bonus – Tư duy hệ thống)</span>**

**<span lang="vi">Câu hỏi ngắn:</span>**

1. <span lang="vi">Nên index những cột nào?  
      
    </span>
2. <span lang="vi">Vì sao không nên lưu điểm trung bình sẵn trong bảng </span><span lang="vi" style="font-family: 'Roboto Mono'; mso-fareast-font-family: 'Roboto Mono'; mso-bidi-font-family: 'Roboto Mono'; color: #188038;">students</span><span lang="vi">?</span>

<span lang="vi"></span>

# ĐỀ TEST SQL – CHỦ ĐỀ: QUẢN LÝ Y TẾ

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Thời gian làm bài: 90 phút  
  
🎯 Mục tiêu đánh giá:  
\- Viết SQL chính xác  
\- Hiểu nghiệp vụ y tế  
\- Phát hiện dữ liệu bất thường  
\- Tư duy kiểm thử dữ liệu  
  
  
</span>

## <a name="_c47ki188yoz5"></a>**<span lang="vi" style="font-size: 13.0pt; line-height: 87%; color: #4f81bd;">I. MÔ TẢ HỆ THỐNG &amp; CSDL</span>**

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Giả định DB: MySQL / PostgreSQL</span>

<span lang="vi" style="font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">1️⃣ Bảng patients  
patients (  
<span style="mso-tab-count: 1;"> </span>id BIGINT PRIMARY KEY,  
<span style="mso-tab-count: 1;"> </span>patient\_code VARCHAR(20),  
<span style="mso-tab-count: 1;"> </span>full\_name VARCHAR(100),  
<span style="mso-tab-count: 1;"> </span>gender VARCHAR(10),  
<span style="mso-tab-count: 1;"> </span>date\_of\_birth DATE,  
<span style="mso-tab-count: 1;"> </span>phone VARCHAR(20),  
<span style="mso-tab-count: 1;"> </span>status VARCHAR(20),  
<span style="mso-tab-count: 1;"> </span>created\_at TIMESTAMP  
)  
  
  
</span>

<span lang="vi" style="font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">2️⃣ Bảng doctors  
doctors (  
<span style="mso-tab-count: 1;"> </span>id BIGINT PRIMARY KEY,  
<span style="mso-tab-count: 1;"> </span>doctor\_code VARCHAR(20),  
<span style="mso-tab-count: 1;"> </span>full\_name VARCHAR(100),  
<span style="mso-tab-count: 1;"> </span>specialty VARCHAR(100),  
<span style="mso-tab-count: 1;"> </span>department VARCHAR(100),  
<span style="mso-tab-count: 1;"> </span>status VARCHAR(20)  
)  
  
  
</span>

<span lang="vi" style="font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">3️⃣ Bảng appointments  
appointments (  
<span style="mso-tab-count: 1;"> </span>id BIGINT PRIMARY KEY,  
<span style="mso-tab-count: 1;"> </span>patient\_id BIGINT,  
<span style="mso-tab-count: 1;"> </span>doctor\_id BIGINT,  
<span style="mso-tab-count: 1;"> </span>appointment\_date DATE,  
<span style="mso-tab-count: 1;"> </span>appointment\_time TIME,  
<span style="mso-tab-count: 1;"> </span>status VARCHAR(20)  
)  
  
  
</span>

<span lang="vi" style="font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">4️⃣ Bảng medical\_records  
medical\_records (  
<span style="mso-tab-count: 1;"> </span>id BIGINT PRIMARY KEY,  
<span style="mso-tab-count: 1;"> </span>patient\_id BIGINT,  
<span style="mso-tab-count: 1;"> </span>doctor\_id BIGINT,  
<span style="mso-tab-count: 1;"> </span>diagnosis TEXT,  
<span style="mso-tab-count: 1;"> </span>visit\_date DATE,  
<span style="mso-tab-count: 1;"> </span>note TEXT  
)  
  
  
</span>

<span lang="vi" style="font-family: Andika; mso-fareast-font-family: Andika; mso-bidi-font-family: Andika;">5️⃣ Bảng prescriptions  
prescriptions (  
<span style="mso-tab-count: 1;"> </span>id BIGINT PRIMARY KEY,  
<span style="mso-tab-count: 1;"> </span>medical\_record\_id BIGINT,  
<span style="mso-tab-count: 1;"> </span>medicine\_name VARCHAR(100),  
<span style="mso-tab-count: 1;"> </span>dosage VARCHAR(50),  
<span style="mso-tab-count: 1;"> </span>days INT  
)  
  
  
</span>

## <a name="_5hk23cphpc08"></a>**<span lang="vi" style="font-size: 13.0pt; line-height: 87%; color: #4f81bd;">II. PHẦN A – SQL CƠ BẢN</span>**

<span lang="vi" style="font-family: Cardo; mso-fareast-font-family: Cardo; mso-bidi-font-family: Cardo;">⏱ Thời gian gợi ý: 35–40 phút</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 1: Danh sách bệnh nhân đang hoạt động  
Lấy patient\_code, full\_name, gender, status của bệnh nhân có status = 'active'.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 2: Lịch hẹn khám và bác sĩ  
Liệt kê patient\_code, patient\_name, doctor\_name, specialty, appointment\_date, status.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 3: Số lượng bác sĩ theo khoa  
Thống kê số lượng bác sĩ theo department.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 4: Lịch sử khám của bệnh nhân  
Với patient\_code = 'BN001', liệt kê visit\_date, doctor\_name, diagnosis.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 5: Số lượt khám của mỗi bệnh nhân  
Đếm số bản ghi medical\_records của từng bệnh nhân.</span>

## <a name="_qaubjy7pr0ra"></a>**<span lang="vi" style="font-size: 13.0pt; line-height: 87%; color: #4f81bd;">III. PHẦN B – SQL NÂNG CAO</span>**

<span lang="vi" style="font-family: Cardo; mso-fareast-font-family: Cardo; mso-bidi-font-family: Cardo;">⏱ Thời gian gợi ý: 50–55 phút</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 6: Bệnh nhân chưa từng đi khám  
Liệt kê bệnh nhân không có bản ghi trong medical\_records.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 7: Bác sĩ có lịch hẹn bị hủy  
Liệt kê bác sĩ có ít nhất 1 lịch hẹn status = 'canceled'.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 8: Bác sĩ khám nhiều bệnh nhân nhất  
Tìm bác sĩ có số lượt khám nhiều nhất.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 9: Lần khám gần nhất của mỗi bệnh nhân  
Lấy patient\_code, last\_visit\_date, doctor\_name, diagnosis.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 10: Phát hiện dữ liệu bất thường  
Liệt kê appointments có patient\_id không tồn tại và prescriptions có medical\_record\_id không tồn tại.</span>

<span lang="vi" style="font-family: 'Times New Roman',serif; mso-fareast-font-family: 'Times New Roman';">Câu 11 (Bonus): Tư duy hệ thống  
1\. Nên index những cột nào?  
2\. Vì sao không nên lưu tổng số lượt khám trong bảng patients?</span>