You are on page 1of 15

Dựa vào DB quản lý trường tiểu học, hãy thực hiê ̣n các truy vấn SQL sau:

1. Tạo lược đồ CSDL đã cho trong SQL Server. Học viên tư định nghĩa các kiểu dữ liê ̣u cho
từng cô ̣t ở các bảng.

Chú ý:

- Cột nào KHÔNG được thiết lập (KHÔNG được chọn) là NOT
NULL nghĩa là các cột đó chúng ta có quyền không nhập dữ liệu cho
nó mà chỉ để chữ NULL. Để chữ NULL chứ không phải là ‘NULL’,
để ‘NULL’ thì nghĩa là chuỗi có giá trị là NULL mất rồi. Các cột là
khóa chính, khóa ngoại đương nhiên phải NOT NULL.

- Các cột dữ liệu có liên quan với nhau ở các bảng thì phải có kiểu dữ
liệu giống hệt nhau. Vd: Nếu cột MaGV trong bảng GIAOVIEN có
kiểu dữ liệu là char(10) thì cột MaGVCN trong bảng LOP cũng phải
có kiểu dữ liệu là char(10) vì cột MaGVCN là khóa ngoại ở trong
bảng LOP, nó được nối với MaGV (là khóa chính trong bảng
GIAOVIEN).

- Để nhập được tiếng Việt có dấu thì chúng ta sẽ khai kiểu dữ liệu là
nchar hoặc nvarchar (kiểu char và varchar thì chỉ có thể nhập được
dữ liệu là tiếng Anh/Mỹ).

- Phải để ý các cột nào là ngày tháng năm thì phải khai kiểu dữ liệu là
Date. Cột nào là giờ mà không có ngày tháng năm thì phải khai là
Time. Còn cột nào vừa chứa ngày tháng năm vừa chứa giờ thì khai
là Datetime.

- Nếu tạo diagram bị lỗi (không tạo được như hướng dẫn trong video
hoặc tài liệu hướng dẫn) thì tạm thời không cần tạo diagram cũng
được. Nhưng phải đảm bảo dữ liệu ở các bảng phải chính xác với
nhau.

Lưu ý: Nếu bài học trước mà học viên đã tạo DB cho hê ̣ thống này rồi thì thôi,
không cần tạo nữa

2. INSERT dữ liê ̣u (Không cần nhập tiếng Việt có dấu) vào tất cả các bảng theo 2 cách:

a. Cách 1: INSERT bằng tay. Mỗi bảng cần insert tối thiểu 10 dòng bằng cách này.

b. Cách 2: INSERT bằng lê ̣nh. Mỗi bảng cần insert tối thiểu 10 dòng bằng cách này.

3. UPDATE dữ liê ̣u (sửa dữ liệu cho các dòng có sẵn) cho bảng HOCSINH theo 3 cách:

a. Cách 1: UPDATE bằng tay.

Confidential 1/15
b. Cách 2: UPDATE bằng lê ̣nh (không có điều kiê ̣n WHERE).

c. Cách 3: UPDATE bằng lê ̣nh (có điều kiê ̣n WHERE).

4. DELETE dữ liê ̣u cho bảng HOCSINH theo 3 cách:

a. Cách 1: DELETE bằng tay.

b. Cách 2: DELETE bằng lê ̣nh (có điều kiê ̣n WHERE). Lưu ý: đừng DELETE bằng
lê ̣nh mà không có điều kiê ̣n WHERE, vì nếu làm như vâ ̣y thì toàn bô ̣ các dòng dữ
liê ̣u trong bảng sẽ bị mất hết, mất công ngồi nhâ ̣p lại dữ liê ̣u.

5. Hãy liê ̣t kê (sử dụng lệnh SELECT đơn giản không có WHERE):

a. Toàn bô ̣ thông tin của toàn bô ̣ giáo viên trong trường.

SELECT *

FROM GIAOVIEN

b. Họ tên học sinh, giới tính, họ tên phụ huynh của toàn bô ̣ sinh viên trong trường.

Select HotenHS, GioiTinh, HotenPH

From GIAOVIEN

c. Toàn bô ̣ thông tin của tất cả các lớp trong trường.

Gợi ý: Xem tài liê ̣u của thầy Phong, từ trang 18 đến trang 22 hoă ̣c truy câ ̣p vào
các link sau:

https://quantrimang.com/lenh-select-trong-sql-server-147319

https://www.w3schools.com/sql/sql_select.asp

6. Hãy liê ̣t kê:

a. Những học sinh có giới tính là Nam

SELECT MaHS, HoTenHS

FROM HOCSINH

Where GioiTinh='Nam'

b. Những học sinh chưa có tên của phụ huynh.

Confidential 2/15
c. Những lớp chưa có giáo viên chủ nhiê ̣m.

d. Những học sinh chưa được phân lớp.

e. Những học sinh nữ có địa chỉ ở Thanh Khê.

f. Những học sinh nam có địa chỉ ở Hải Châu hoă ̣c những học sinh nữ có địa chỉ ở
Thanh Khê.

g. Những học sinh nam chưa có tên phụ huynh và những học sinh nữ chưa được
phân lớp.

h. Những học sinh nam chưa được phân lớp và những học sinh nam chưa có tên phụ
huynh.

i. Mã môn học của những môn học được dạy trong học kỳ 2.

Gợi ý: Lệnh SELECT đơn giản có WHERE trên 1 bảng. Các toán tử so sánh,
quan hê.̣ Đô ̣ ưu tiên của các toán tử.

Xem giáo trình của thầy Phong trang 25, 26, 28, 29

https://quantrimang.com/menh-de-where-trong-sql-server-147325

https://www.w3schools.com/sql/sql_where.asp

7. Hãy liê ̣t kê:

a. Những học sinh có họ tên bắt đầu bằng từ Nguyễn.

select MaHS, HoTenHS, GioiTinh, DiaChi, MaLop

from HOCSINH

where HoTenHS like 'Nguyen%'

b. Những học sinh có họ tên kết thúc bằng từ Nở.

c. Những học sinh có họ tên chứa từ Thị.

d. Những học sinh chứa từ Thị ở giữa (không được chứa ở đầu và ở cuối).

e. Những học sinh có họ tên với đô ̣ dài là 30 ký tự (kể cả khoảng trắng).

f. Những học sinh có họ tên với đô ̣ dài tối đa là 30 ký tự.

Confidential 3/15
g. Những học sinh có họ tên với đô ̣ dài tối đa là 30 ký tự và bắt đầu bằng ký tự N.

h. Những học sinh có họ tên bắt đầu bằng các ký tự: N, T, V.

i. Những học sinh có họ tên không được bắt đầu bằng các ký tự: N, T, V.

j. Những học sinh có họ tên với phần họ có đúng 4 ký tự.

k. Những học sinh có họ tên KHÔNG bắt đầu bằng Ng (Ví dụ Nguyen Van A là
không được hiển thị ra).

Gợi ý: Sử dụng từ khóa LIKE trong câu SELECT. Có sử dụng %, _, [] và


[^].

Xem giáo trình của thầy Phong trang 27, 28

https://quantrimang.com/dieu-kien-like-trong-sql-server-147583

https://quantrimang.com/dieu-kien-not-trong-sql-server-147625

https://www.w3schools.com/sql/sql_like.asp

8. Hãy liê ̣t:

a. Họ tên của toàn bô ̣ học sinh trong trường, nếu họ tên nào trùng nhau thì chỉ hiển
thị 1 lần.

SELECT DISTINCT HoTenHS

FROM HOCSINH

b. Mã lớp của các lớp đã có học sinh học ở lớp đó. Nếu mã lớp nào trùng nhau thì
chỉ hiển thị 1 lần.

c. Mã môn học của những môn học đã có ít nhất 1 giáo viên được phân công phụ
trách rồi. (*)

d. Mã môn học của những môn học đã từng được tổ chức thi ít nhất 1 lần.

e. Mã giáo viên của những giáo viên đã từng làm chủ nhiê ̣m cho ít nhất 1 lớp nào
đó.

Gợi ý: Sử dụng từ khóa DISTINCT

Xem giáo trình của thầy Phong trang 24, 25

Confidential 4/15
https://quantrimang.com/menh-de-distinct-trong-sql-server-147487

https://www.w3schools.com/sql/sql_distinct.asp

9. Hãy liê ̣t kê:

a. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp tăng
dần theo họ tên học sinh.

SELECT MaHS, HoTenHS, HoTenPH, GioiTinh, DiaChi, MaLop

FROM HocSinh

ORDER BY HoTenHS ASC

(Có chữ ASC cũng được mà ko có cũng được, vì nó mă ̣c định là tăng dần)

b. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp
giảm dần theo địa chỉ.

c. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp tăng
dần theo họ tên học sinh và giảm dần theo địa chỉ.

d. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp tăng
dần theo họ tên học sinh và tăng dần theo địa chỉ.

e. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp
giảm dần theo họ tên học sinh, giảm dần theo địa chỉ.

f. Thông tin của toàn bô ̣ học sinh trong trường. Kết quả trả về cần được sắp xếp
giảm dần theo họ tên học sinh, giảm dần theo địa chỉ và tăng dần theo họ tên phụ
huynh.

*** Trả lời thêm: Trong 2 từ khóa ASC và DESC, từ nào là không bắt buô ̣c phải
ghi rõ trong câu SELECT mà kết quả thực hiê ̣n vẫn đảm bảo tính đúng đắn?

Gợi ý: Sử dụng từ khóa ORDER BY

Xem giáo trình của thầy Phong trang 29, 30

https://quantrimang.com/menh-de-order-by-trong-sql-server-147326

https://www.w3schools.com/sql/sql_orderby.asp

Confidential 5/15
https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

10. Hãy liê ̣t kê:

a. MaHS, HoTenHS, GioiTinh, MaLop, TenLop, MaGVCN của học sinh trong
trường.

SELECT MaHS, HoTenHS, GioiTinh, LOP.MaLop, TenLop, MaGVCN

FROM HOCSINH

INNER JOIN LOP

ON HOCSINH.MaLop=LOP.MaLop

Hoặc là:

SELECT * FROM HOCSINH

INNER JOIN LOP

ON HOCSINH.MaLop=LOP.MaLop

b. MaHS, HoTenHS, HocKy, MaMH, DiemThiGiuaKy, DiemThiCuoiKy của học


sinh và các môn học đã có kết quả tương ứng với từng học sinh trong trường.

c. MaGV, HoTenGV, MaLop, MaMH, HocKy của những giáo viên đã được giao
phụ trách ít nhất 1 môn học.

Gợi ý: Sử dụng LỆNH INNER JOIN 2 BẢNG và nhiều bảng.

https://quantrimang.com/inner-join-trong-sql-162351

https://www.w3schools.com/sql/sql_join_inner.asp

11. Hãy liê ̣t kê:

a. MaHS, HoTenHS, GioiTinh, MaLop, TenLop, NamHoc, MaGVCN, HoTenGV


(chủ nhiê ̣m) của học sinh trong trường.

SELECT MaHS, HoTenHS, GioiTinh, HOCSINH.MaLop, TenLop, NamHoc,


MaGVCN, HoTenGV

Confidential 6/15
FROM HOCSINH

INNER JOIN LOP ON HOCSINH.MaLop=LOP.MaLop

INNER JOIN GIAOVIEN ON LOP.MaGVCN=GIAOVIEN.MaGV

b. MaHS, HoTenHS, HocKy, MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy


của học sinh và các môn học đã có kết quả tương ứng với từng học sinh trong
trường.

c. MaHS, HoTenHS, HocKy, MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy,


MaLop, MaGV (phụ trách), HoTenGV (phụ trách) của học sinh và các môn
học đã có kết quả tương ứng với từng học sinh trong trường.

d. MaHS, HoTenHS, MaLop, MaGVCN, HoTenGV (chủ nhiêm), ̣ HocKy,


MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy, MaGV (phụ trách),
HoTenGV (phụ trách) của học sinh và các môn học đã có kết quả tương ứng với
từng học sinh trong trường. (***)

e. MaHS, HoTenHS, MaLop, MaGVCN, HoTenGV (chủ nhiêm), ̣ HocKy,


MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy, MaGV (phụ trách),
HoTenGV (phụ trách) của những học sinh nữ với các môn học đã có kết quả
thi cuối kỳ hoă ̣c giữa kỳ được 9 điểm trở lên. (***)

f. MaHS, HoTenHS, HocKy, MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy,


MaLop, MaGV (phụ trách), HoTenGV (phụ trách) của học sinh và các môn
học đã có kết quả tương ứng với từng học sinh trong trường. Với điều kiêṇ là chỉ
hiển thị những môn học mà giáo viên phụ trách môn đó cũng chính là giáo viên
chủ nhiêm ̣ của lớp. (***)

g. MaMH, MaLop, HocKy của những môn học đã được thi cuối kỳ vào năm 2019

h. MaMH, MaLop, HocKy của những môn học đã được thi vào tháng 8 năm 2019

i. MaMH, MaLop, HocKy của những môn học đã được thi trước ngày 20 tháng 8
năm 2019

j. MaMH, MaLop, HocKy của những môn học đã được thi trước ngày 20 tháng 8
năm 2019 đúng 1 tuần. (***)

k. MaMH, MaLop, HocKy của những môn học đã được thi sau ngày 20 tháng 8 năm
2019 đúng 21 ngày. (***)

l. MaMH, MaLop, HocKy của những môn học đã được thi trong khoảng từ ngày 10
đến ngày 20 tháng 8 năm 2019.

Confidential 7/15
m. MaMH, MaLop, HocKy của những môn học đã được thi trong khoảng từ 10 giờ
00 phút ngày 10 đến 20 giờ 30 phút ngày 20 tháng 8 năm 2019.

Gợi ý: Sử dụng INNER JOIN nhiều bảng và có dùng các hàm xử lý Ngày, giờ
và có BETWEEN và AND

https://quantrimang.com/ham-datediff-trong-sql-server-161896

https://www.w3schools.com/sql/func_sqlserver_datediff.asp

12. Hãy liê ̣t kê:

a. Liê ̣t kê những địa chỉ khác nhau trong bảng HOCSINH (bằng 2 cách khác nhau)
(*)

Cách 1:

SELECT DISTINCT DiaChi

FROM HOCSINH

Cách 2:

SELECT DiaCHi

FROM HOCSINH

Group by DiaChi

b. Liê ̣t kê HoTenHS, GioiTinh của các nhóm được phân nhóm theo HoTenHS và
GioiTinh trong bảng HOCSINH.

c. Liê ̣t kê HoTenHS của các nhóm được phân nhóm theo HoTenHS và GioiTinh
trong bảng HOCSINH. Chú ý thử giải thích vì sao không liê ̣t kê GioiTinh mà vẫn
không bị lỗi. (*)

d. Liê ̣t kê MaMH, TenMH, DiemThiCuoiKy của từng môn học chia theo từng
mức điểm thi cuối kỳ. (Gợi ý: chỉ liê ̣t kê những môn đã từng có học sinh thi cuối
kỳ). (*)

e. Liê ̣t kê MaGV, TenGV của những giáo viên đã từng được phân công phụ trách ít
nhất 1 môn học. Nếu MaGV, TenGV trùng lă ̣p nhiều lần thì chỉ hiển thị ra 1 lần
trong kết quả trả về.

Gợi ý: Sử dụng từ khóa GROUP BY

Confidential 8/15
Xem giáo trình của thầy Phong trang 43, 44, 45

https://quantrimang.com/menh-de-group-by-trong-sql-server-147832

https://www.w3schools.com/sql/sql_groupby.asp

https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

13. Hãy liê ̣t:

a. Liê ̣t kê HoTenHS, GioiTinh, DiaChi của các nhóm được phân nhóm theo
HoTenHS và GioiTinh trong bảng HOCSINH. Thử suy nghĩ về nguyên nhân lỗi
nếu có lỗi xảy ra (*)

select HoTenHS, GioiTinh, DiaChi

from HOCSINH

group by HoTenHS, GioiTinh

*Nguyên nhân lỗi ở đây là: mỗi GROUP chỉ được trả về 1 dòng kết quả. Mỗi

học sinh có nhiều Địa Chỉ khác nhau nên không biết chọn địa chỉ nào để trả về kết

quả dẫn đến lỗi.

b. Đếm số lượng học sinh là nam.

c. Đếm số lượng học sinh trong lớp có tên là Lơp 1/1 và lớp đó nằm trong năm học
2019-2020.

d. Đếm số lớp đã phụ trách (có thể là 1 hoă ̣c nhiều môn nào đó) của từng giáo viên.

Gợi ý: Sử dụng từ khóa GROUP BY kết hợp SELECT TOP và truy vấn con
(còn gọi là truy vấn lồng nhau – SUB QUERY)

https://quantrimang.com/truy-van-con-subquery-trong-sql-server-148049

Xem giáo trình của thầy Phong trang 49, 50, 51

https://www.tutorialspoint.com/sql/sql-sub-queries.htm

https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

Confidential 9/15
14. Hãy liê ̣t kê:

a. Học sinh chưa từng thi môn nào.

SELECT HOCSINH.MaHS

FROM HOCSINH WHERE NOT EXITS

(SELECT HOCSINH.MaHS

FROM KETQUAHOCTAP

WHERE KETQUAHOCTAP.MaHS=HOCSINH.MaHS)

Hoặc:

SELECT HOCSINH.MaHS

FROM HOCSINH

WHERE MaHS NOT IN (SELECT MaHS

FROM KETQUAHOCTAP)

Lưu ý: 1 cái là tìm HS ko có trong tâ ̣p hợp những HS đã từng thi (NOT IN)

còn 1 cái là phủ định lại của phép NỐI, từng là PHÉP KHÔNG NỐI ĐƯỢC (NOT
EXITS)

b. Giáo viên chưa từng phụ trách môn học nào.

c. Giáo viên chưa từng chủ nhiê ̣m lớp nào.

d. Môn học chưa từng được tổ chức thi lần nào.

e. Đếm xem tương ứng với mỗi địa chỉ (của học sinh), số lượng học sinh đang ở mỗi
địa chỉ là bao nhiêu em. Chỉ hiển thị kết quả cho những địa chỉ có ít nhất 5 học
sinh đang ở đó.

Gợi ý: Sử dụng từ khóa HAVING, NOT IN, NOT EXIST

https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

https://quantrimang.com/menh-de-having-trong-sql-server-147839

https://www.w3schools.com/sql/sql_having.asp

Confidential 10/15
Xem giáo trình của thầy Phong trang 51, 52

https://trongthaonh.wordpress.com/2011/11/06/not-in-and-not-exists-in-sql/

https://www.w3schools.com/sql/sql_in.asp

https://freetuts.net/toan-tu-in-va-not-in-trong-sql-1471.html

https://v1study.com/sql-in-va-not-in.html

https://webcoban.vn/mysql/exists-trong-mysql

https://shareprogramming.net/sql-exists-kiem-tra-su-ton-tai-trong-sql/

15. Hãy liê ̣t kê:

a. Học sinh nam ở Thanh Khê và học sinh nữ ở Hải Châu (theo 2 cách khác nhau).

Cách 1:

Select MaHS, HoTenHS, HoTenPH, DiaChi, GioiTinh

From HOCSINH

Where (Gioitinh='Nam' and DiaChi = 'ThanhKhe')

or (GioiTinh='Nu' and DiaChi = 'HaiChau')

Cách 2:

(Select MaHS, HoTenHS, HoTenPH, DiaChi, GioiTinh

From HOCSINH

Where (Gioitinh='Nam' and DiaChi = 'ThanhKhe'))

UNION

(Select MaHS, HoTenHS, HoTenPH, DiaChi, GioiTinh

From HOCSINH

Where (GioiTinh='Nu' and DiaChi = 'HaiChau'))

b. Họ tên của học sinh và giáo viên trong toàn trường.

c. Họ tên, nghề nghiê ̣p của học sinh và giáo viên trong toàn trường. (Nghề nghiê ̣p
bao gồm: học sinh hoă ̣c giáo viên).

Confidential 11/15
d. Những học sinh đang học ở năm học 2019-2020 và những học sinh chưa từng thi
môn Toán và môn Tiếng Viê ̣t.

Gợi ý: Sử dụng từ khóa UNION, ALIAS, phân biệt WHERE và HAVING

Xem giáo trình của thầy Phong trang 31, 32

https://quantrimang.com/toan-tu-union-trong-sql-server-148035

https://www.w3schools.com/sql/sql_union.asp

16. Đếm tổng số lượt thi 2 môn Toán và tiếng Viê ̣t của tất cả học sinh trong toàn trường. Yêu
cầu: (YC1) Đếm Theo từng tháng (đầy đủ 12 tháng, từ tháng 1 đến tháng 12) trong năm
2019. (YC2) Tháng nào có tổng số lượt thi của riêng môn Toán dưới 3 lượt, thì tháng đó
không tính (không cô ̣ng) số lượt thi môn Toán vào kết quả trả về. (***)

Gợi ý: Sử dụng từ khóa UNION ALL. Bài này rất khó, có thể bỏ qua.

17. Hãy liê ̣t:

a. MaLop, TenLop, MaGVCN, HoTenGV (chủ nhiê ̣m) của tất cả các lớp trong
trường. (Gợi ý: tất cả các lớp nghĩa là kể cả những lớp chưa được phân công
GVCN).

SELECT MaLop, TenLop, MaGVCN, HoTenGV

FROM LOP

LEFT JOIN GIAOVIEN

ON LOP.MaGVCN = GIAOVIEN.MaGV

b. MaHS, HoTenHS, HocKy, MaMH, TenMH, DiemThiGiuaKy, DiemThiCuoiKy


của tất cả học sinh trong trường.

c. MaHS, HoTenHS, MaLop, TenLop, MaGVCN, HoTenGV (Chủ nhiê ̣m) của tất
cả học sinh trong trường. (Chú ý những trường hợp: học sinh chưa được phân lớp
và lớp chưa được phân GVCN).

d. MaGV, HoTenGV, MaLop, TenLop, MaMH, HocKy, TenMH của tất cả giáo
viên trong trường.

Gợi ý: Sử dụng phép LEFT JOIN

Confidential 12/15
https://quantrimang.com/left-join-trong-sql-162356

https://www.w3schools.com/sql/sql_join_left.asp

https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

18. Sử dụng RIGHT JOIN (hoă ̣c LEFT JOIN và RIGHT JOIN kết hợp với nhau) để trả lời
các câu hỏi của yêu cầu ngay ở trên.

Như câu 17 thay LEFT JOIN -> RIGHT JOIN

Gợi ý: Sử dụng phép RIGHT JOIN

https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

https://quantrimang.com/right-join-trong-sql-162359

https://www.w3schools.com/sql/sql_join_right.asp

19. Hãy liê ̣t:

a. MaHS, HoTenHS, MaLop, TenLop của tất cả học sinh và tất cả các lớp trong
trường. (Gợi ý: lớp chưa có học sinh và học sinh chưa được phân lớp đều phải
được trả về kết quả).

SELECT MaHS, HoTenHS, HOCSINH.MaLop, TenLop

FROM HOCSINH

FULL JOIN LOP

ON LOP.MaLop = HOCSINH.MaLop

b. MaMH, TenMH, MaGV (phụ trách), HoTenGV (phụ trách) của tất cả những
môn học và tất cả giáo viên trong trường. Kết quả trả về cần loại bỏ bớt những
dòng trùng lă ̣p (những dòng nào trùng nhau thì chỉ hiển thị kết quả 1 lần).

Gợi ý: Sử dụng phép FULL JOIN

Confidential 13/15
https://docs.google.com/document/d/e/2PACX-
1vQRBS3qGVVUYX7ntSBfmg7iTiwXVOb13-Y8ckUhY-
IDkZhMpQvADLrZRjurljK08ATh_tRzjj1Pur45/pub

https://quantrimang.com/full-join-trong-sql-162362

https://www.w3schools.com/sql/sql_join_full.asp

20. Hãy liê ̣t kê:

a. MaGV, HoTenGV của những giáo viên đã từng làm chủ nhiê ̣m lớp và từng dạy
môn Âm nhạc.

(SELECT MaGV, HoTenGV

FROM GIAOVIEN

inner join LOP

on LOP.MaGVCN=GIAOVIEN.MaGV)

intersect

(SELECT MaGV, HoTenGV

FROM GIAOVIEN GV

INNER JOIN PHUTRACHBOMON PTBM

On GV.MaGV = PTBM.MaGVPT

Where MaMH='AN')

b. MaHS, TenHS của những học sinh đã từng thi môn Toán trong học kỳ 1 và đã
từng thi môn Âm nhạc trong học kỳ 2.

c. MaMH, TenMH của những môn học đã từng được ít nhất 5 học sinh thi cuối kỳ
và đã từng được ít nhất 2 giáo viên phụ trách giảng dạy.

Gợi ý: Sử dụng từ khóa INTERSECT

https://quantrimang.com/toan-tu-intersect-trong-sql-server-148044

https://www.tutorialspoint.com/sql/sql-intersect-clause.htm

21. Hãy liê ̣t kê:

Confidential 14/15
a. MaGV, HoTenGV của những giáo viên đã từng làm chủ nhiê ̣m lớp và chưa từng
dạy môn Âm nhạc.

b. MaHS, TenHS của những học sinh đã từng thi môn Toán trong học kỳ 1 và chưa
từng thi môn Âm nhạc trong học kỳ 2.

c. MaMH, TenMH của những môn học đã từng được ít nhất 5 học sinh thi cuối kỳ
và chỉ được đúng 2 giáo viên phụ trách giảng dạy.

Tương tự bài 20 chỉ đổi INTERSECT->EXCEPT

Gợi ý: Sử dụng từ khóa EXCEPT

https://quantrimang.com/toan-tu-except-trong-sql-server-148048

https://www.tutorialspoint.com/sql/sql-except-clause.htm

Chú ý: (*)(**)(***) là các bài khó

Confidential 15/15

You might also like