BÀI TẬP SQL
Cơ sở dữ liệu (Trường Đại học Giao thông Vận tải)
Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
BÀI TẬP SQL
Cơ sở dữ liệu (Trường Đại học Giao thông Vận tải)
Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
BÀI TP SQL
1. Cho biết nhng sinh viên thi li trên 2 ln.
SELECT MaSV
FROM KetQua
GROUP BY MaSV
HAVING COUNT(DISTINCT LanThi) > 2;
2. Cho biết những sinh viên nam có điểm trung bình ln 1 trên 7.0
SELECT MaSV
FROM KetQua
WHERE LanThi = 1 AND MaSV IN (SELECT MaSV FROM DSSinhVien WHERE Phai =
N'Nam')
GROUP BY MaSV
HAVING AVG(Diem) > 7.0;
3. Cho biết danh sách các sinh viên rt trên 2 môn ln thi 1.
SELECT MaSV
FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0
GROUP BY MaSV
HAVING COUNT(*) > 2;
4. Cho biết danh sách nhng khoa có nhiu hơn 2 sinh viên nam
SELECT MaKhoa
FROM DSSinhVien
WHERE Phai = 'Nam'
GROUP BY MaKhoa
HAVING COUNT(*) > 2;
5. Cho biết những khoa có 2 sinh đạt hc bng t 200.000 đến 300.000.
SELECT MaKhoa
FROM DSSinhVien
WHERE HocBong BETWEEN 200000 AND 300000
GROUP BY MaKhoa
HAVING COUNT(*) >= 2;
6. Cho biết s ợng sinh viên đậu và s ng sinh viên rt ca tng môn trong ln thi 1.
SELECT MaMH,
SUM(CASE WHEN Diem >= 5.0 THEN 1 ELSE 0 END) AS SoLuongDau,
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
SUM(CASE WHEN Diem < 5.0 THEN 1 ELSE 0 END) AS SoLuongRot
FROM KetQua
WHERE LanThi = 1
GROUP BY MaMH;
7. Cho biết sinh viên nào có hc bng cao nht.
SELECT *
FROM DSSinhVien
WHERE HocBong = (SELECT MAX(HocBong) FROM DSSinhVien);
8. Cho biết sinh viên nào có điểm thi lần 1 môn cơ sở d liu cao nht.
SELECT DSSinhVien.*
FROM DSSinhVien
JOIN KetQua ON DSSinhVien.MaSV = KetQua.MaSV
WHERE KetQua.LanThi = 1 AND KetQua.MaMH = 01
ORDER BY KetQua.Diem DESC
9. Cho biết sinh viên khoa anh văn có tuổi ln nht.
SELECT *
FROM DSSinhVien
WHERE MaKhoa = 'AV'
ORDER BY NgaySinh DESC
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
10. Cho biết khoa nào có đông sinh viên nhất.
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVien
FROM DSSinhVien
GROUP BY MaKhoa
ORDER BY SoLuongSinhVien DESC
11. Cho biết khoa nào có đông nữ nht.
SELECT TOP 1 MaKhoa, COUNT(*) AS SoLuongNu
FROM DSSinhVien
WHERE Phai = N'N'
GROUP BY MaKhoa
ORDER BY SoLuongNu DESC
12. Cho biết môn nào có nhiu sinh viên rt ln 1 nhiu nht.
SELECT TOP 1 MaMH, COUNT(*) AS SoLuongRot
FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0
GROUP BY MaMH
ORDER BY SoLuongRot DESC
13. Cho biết sinh viên không hc khoa anh văn có điểm thi môn phm lớn hơn điểm thi văn phạm ca
sinh viên học khoa anh văn.
SELECT sv.*
FROM DSSinhVien sv
JOIN KetQua kp ON sv.MaSV = kp.MaSV
JOIN DMMonHoc mh1 ON kp.MaMH = mh1.MaMH AND mh1.TenMH = N'Văn Phạm'
JOIN DMMonHoc mh2 ON kp.MaMH = mh2.MaMH AND mh2.TenMH = N'Văn Phạm'
WHERE sv.MaKhoa != 'AV'
AND kp.LanThi = 1
AND kp.Diem > (SELECT MAX(kq.Diem) FROM KetQua kq WHERE kq.MaSV = sv.MaSV
AND kq.LanThi = 1 AND kq.MaMH = mh2.MaMH);
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
14. Cho biết sinh viênnơi sinhng với Hi.
SELECT *
FROM DSSinhVien
WHERE NoiSinh = (SELECT NoiSinh FROM DSSinhVien WHERE TenSV = N'Hi')
AND MaSV != (SELECT MaSV FROM DSSinhVien WHERE TenSV = N'Hi');
15. Cho biết nhng sinh viên nào có hc bng lớn hơn tất c hc bng ca sinh viên thuộc khoa anh văn
SELECT *
FROM DSSinhVien sv
WHERE HocBong > ALL (SELECT HocBong FROM DSSinhVien WHERE MaKhoa = 'AV');
16. Cho biết nhng sinh viên có hc bng lớn hơn bt k hc bng ca sinh viên học khóa anh văn
SELECT *
FROM DSSinhVien sv
WHERE HocBong > ANY (SELECT HocBong FROM DSSinhVien WHERE MaKhoa = 'AV');
17. Cho biết sinh viên nào có điểm thi môn cơ sở d liu ln 2 lớn hơn tất c điểm thi lần 1 môn cơ sở d
liu ca nhng sinh viên khác.
SELECT kq.MaSV
FROM KetQua kq
JOIN (
SELECT MaSV, MAX(Diem) AS MaxDiem
FROM KetQua
WHERE MaMH = 01 AND LanThi = 1
GROUP BY MaSV
) max_scores ON kq.MaSV = max_scores.MaSV
WHERE kq.MaMH = 01 AND kq.LanThi = 2 AND kq.Diem > max_scores.MaxDiem;
18. Cho biết những sinh viên đạt điểm cao nht trong tng môn.
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
SELECT kq.MaSV, sv.TenSV, mh.TenMH, kq.Diem
FROM KetQua kq
JOIN DSSinhVien sv ON kq.MaSV = sv.MaSV
JOIN DMMonHoc mh ON kq.MaMH = mh.MaMH
JOIN (
SELECT MaMH, MAX(Diem) AS MaxDiem
FROM KetQua
GROUP BY MaMH
) max_scores ON kq.MaMH = max_scores.MaMH AND kq.Diem = max_scores.MaxDiem;
19. Cho biết nhng khoa không có sinh viên hc.
SELECT MaKhoa
FROM DMKhoa
WHERE MaKhoa NOT IN (SELECT DISTINCT MaKhoa FROM DSSinhVien);
20. Cho biết sinh viên chưa thi môn cơ s d liu.
SELECT MaSV
FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE MaMH = 01);
21. Cho biết sinh viên nào không thi ln 1 mà có d thi ln 2.
SELECT DISTINCT MaSV
FROM KetQua
WHERE LanThi = 2 AND MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE
LanThi = 1);
22. Cho biết môn nào không có sinh viên khoa anh văn học.
SELECT MaMH
FROM DMMonHoc
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM KetQua WHERE MaSV IN (SELECT
MaSV FROM DSSinhVien WHERE MaKhoa = 'AV'));
23. Cho biết những sinh viên khoa anh văn chưa học môn văn phạm.
SELECT MaSV
FROM DSSinhVien
WHERE MaKhoa = 'AV' AND MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE
MaMH = N'Văn Phạm');
24. Cho biết nhng sinh viên không rt môno.
SELECT MaSV
FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
25. Cho biết nhng sinh viên học khoa anh văn có học bng và những sinh viên chưa bao giờ rt.
SELECT *
FROM DSSinhVien
WHERE (MaKhoa = 'AV' AND HocBong > 0)
OR MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
26. Cho biết khoa nào có đông sinh viên nhận hc bng nht và khoa nào khoa nào có ít sinh viên nhn
hc bng nht.
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVienHocBong
FROM DSSinhVien
WHERE HocBong > 0
GROUP BY MaKhoa
ORDER BY SoLuongSinhVienHocBong DESC;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVienKhongHocBong
FROM DSSinhVien
WHERE HocBong = 0
GROUP BY MaKhoa
ORDER BY SoLuongSinhVienKhongHocBong ASC;
27. Cho biết 3 sinh viên có hc nhiu môn nht.
SELECT TOP 3 MaSV
FROM KetQua
GROUP BY MaSV
ORDER BY COUNT(DISTINCT MaMH) DESC;
28. Cho biết những môn được tt c các sinh viên theo hc.
SELECT MaMH
FROM DMMonHoc
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM DSSinhVien LEFT JOIN KetQua ON
DSSinhVien.MaSV = KetQua.MaSV WHERE KetQua.MaMH IS NULL);
29. Cho biết nhng sinh viên hc nhng môn ging sinh viên có mã s A02 hc.
SELECT DISTINCT kq.MaSV
FROM KetQua kq
WHERE kq.MaMH IN (SELECT MaMH FROM KetQua WHERE MaSV = 'A02');
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
30. Cho biết nhng sinh viên hc nhng môn bng đúng những môn mà sinh viên A02 hc.
SELECT DISTINCT kq.MaSV
FROM KetQua kq
WHERE NOT EXISTS (
SELECT *
FROM KetQua kq2
WHERE kq2.MaSV = 'A02'
AND kq2.MaMH NOT IN (SELECT MaMH FROM KetQua kq3 WHERE kq3.MaSV =
kq.MaSV)
) AND kq.MaSV != 'A02';
31. To mt bng mi tên sinhvien-ketqua: gồm: MASV, HoSV, TenSV, SoMonHoc. Sau đó Thêm d
liu vào bng này da vào d liệu đã có.
CREATE TABLE sinhvien_ketqua AS
SELECT DSSinhVien.MaSV, HoSV, TenSV, COUNT(DISTINCT MaMH) AS SoMonHoc
FROM DSSinhVien
LEFT JOIN KetQua ON DSSinhVien.MaSV = KetQua.MaSV
GROUP BY DSSinhVien.MaSV, HoSV, TenSV;
32. Thêm vào bng khoa ct Siso, cp nht s s vào khoa t d liu sinh viên.
ALTER TABLE DMKhoa ADD COLUMN Siso INT;
UPDATE DMKhoa
SET Siso = (
SELECT COUNT(*)
FROM DSSinhVien
WHERE DSSinhVien.MaKhoa = DMKhoa.MaKhoa
);
33. Tăng thêm 1 điểm cho các sinh viên vt ln 2. Nhưng chỉ tăng tối đa là 5 điểm
UPDATE KetQua
SET Diem = CASE
WHEN Diem + 1 <= 10 THEN Diem + 1
ELSE 10
END
WHERE LanThi = 2 AND Diem < 5.0;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
34. Tăng học bng lên 100000 cho những sinh viên đim trung bình là 6.5 tr lên
UPDATE DSSinhVien
SET HocBong = HocBong + 100000
WHERE MaSV IN (
SELECT MaSV
FROM KetQua
WHERE LanThi = 1
GROUP BY MaSV
HAVING AVG(Diem) >= 6.5
);
35. Thiết lp hc bng bng 0 cho nhng sinh viên thi hai môn rt ln 1
UPDATE DSSinhVien
SET HocBong = 0
WHERE MaSV IN (
SELECT MaSV
FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0
GROUP BY MaSV
HAVING COUNT(*) = 2
);
36. Xoá tt c nhng sinh viên chưa dự thi n nào.
DELETE FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua);
37. Xóa nhng môn mà không có sinh viên hc.
DELETE FROM DMMonHoc
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM KetQua);
38. Danh sách sinh viên không bi rt môn nào
SELECT DISTINCT MaSV
FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
39. Danh sách sinh viên học môn văn phạm và môn cơ s d liu
SELECT DISTINCT MaSV
FROM KetQua
WHERE MaMH IN (05, 01);
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
40. Trong mi sinh viên cho biết môn có điểm thi ln nht. Thông tin gm: mã sinh viên, tên sinh viên,
tên môn, đim.
SELECT HoSV, TenSV, mh.TenMH, Diem
FROM (
SELECT MaSV, MaMH, Diem, ROW_NUMBER() OVER(PARTITION BY MaSV ORDER BY
Diem DESC) AS rn
FROM KetQua
) max_scores
JOIN DSSinhVien sv ON max_scores.MaSV = sv.MaSV
JOIN DMMonHoc mh ON max_scores.MaMH = mh.MaMH
WHERE rn = 1;
41. Danh sách sinh viên: Không rt ln 1 hoc ,Không hc môn văn phạm
SELECT DISTINCT MaSV
FROM DSSinhVien
WHERE MaSV NOT IN (SELECT MaSV FROM KetQua WHERE LanThi = 1 AND Diem < 5.0)
OR MaSV NOT IN (SELECT MaSV FROM KetQua WHERE MaMH = 05);
42. Danh sách nhng sinh viên khoa 2 sinh viên n tr lên
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421
SELECT MaKhoa
FROM DSSinhVien
WHERE Phai = N'N'
GROUP BY MaKhoa
HAVING COUNT(*) >= 2;
43. Cho biết những nơi nào có hơn 2 sinh viên đang theo hc ti trường.
SELECT NoiSinh
FROM DSSinhVien
GROUP BY NoiSinh
HAVING COUNT(*) > 2;
44. Cho biết nhng môn nào có trên 3 sinh viên d thi.
SELECT MaMH
FROM KetQua
GROUP BY MaMH
HAVING COUNT(DISTINCT MaSV) > 3;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)
lOMoARcPSD|17548421

Preview text:

lOMoARcPSD|17548421 BÀI TẬP SQL
Cơ sở dữ liệu (Trường Đại học Giao thông Vận tải) Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421 BÀI TẬP SQL
1. Cho biết những sinh viên thi lại trên 2 lần. SELECT MaSV FROM KetQua GROUP BY MaSV
HAVING COUNT(DISTINCT LanThi) > 2;
2. Cho biết những sinh viên nam có điểm trung bình lần 1 trên 7.0 SELECT MaSV FROM KetQua
WHERE LanThi = 1 AND MaSV IN (SELECT MaSV FROM DSSinhVien WHERE Phai = N'Nam') GROUP BY MaSV HAVING AVG(Diem) > 7.0;
3. Cho biết danh sách các sinh viên rớt trên 2 môn ở lần thi 1. SELECT MaSV FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0 GROUP BY MaSV HAVING COUNT(*) > 2;
4. Cho biết danh sách những khoa có nhiều hơn 2 sinh viên nam SELECT MaKhoa FROM DSSinhVien WHERE Phai = 'Nam' GROUP BY MaKhoa HAVING COUNT(*) > 2;
5. Cho biết những khoa có 2 sinh đạt học bổng từ 200.000 đến 300.000. SELECT MaKhoa FROM DSSinhVien
WHERE HocBong BETWEEN 200000 AND 300000 GROUP BY MaKhoa HAVING COUNT(*) >= 2;
6. Cho biết số lượng sinh viên đậu và số lượng sinh viên rớt của từng môn trong lần thi 1. SELECT MaMH,
SUM(CASE WHEN Diem >= 5.0 THEN 1 ELSE 0 END) AS SoLuongDau,
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
SUM(CASE WHEN Diem < 5.0 THEN 1 ELSE 0 END) AS SoLuongRot FROM KetQua WHERE LanThi = 1 GROUP BY MaMH;
7. Cho biết sinh viên nào có học bổng cao nhất. SELECT * FROM DSSinhVien
WHERE HocBong = (SELECT MAX(HocBong) FROM DSSinhVien);
8. Cho biết sinh viên nào có điểm thi lần 1 môn cơ sở dữ liệu cao nhất. SELECT DSSinhVien.* FROM DSSinhVien
JOIN KetQua ON DSSinhVien.MaSV = KetQua.MaSV
WHERE KetQua.LanThi = 1 AND KetQua.MaMH = 01 ORDER BY KetQua.Diem DESC
9. Cho biết sinh viên khoa anh văn có tuổi lớn nhất. SELECT * FROM DSSinhVien WHERE MaKhoa = 'AV' ORDER BY NgaySinh DESC
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
10. Cho biết khoa nào có đông sinh viên nhất.
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVien FROM DSSinhVien GROUP BY MaKhoa ORDER BY SoLuongSinhVien DESC
11. Cho biết khoa nào có đông nữ nhất.
SELECT TOP 1 MaKhoa, COUNT(*) AS SoLuongNu FROM DSSinhVien WHERE Phai = N'Nữ' GROUP BY MaKhoa ORDER BY SoLuongNu DESC
12. Cho biết môn nào có nhiều sinh viên rớt lần 1 nhiều nhất.
SELECT TOP 1 MaMH, COUNT(*) AS SoLuongRot FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0 GROUP BY MaMH ORDER BY SoLuongRot DESC
13. Cho biết sinh viên không học khoa anh văn có điểm thi môn phạm lớn hơn điểm thi văn phạm của
sinh viên học khoa anh văn. SELECT sv.* FROM DSSinhVien sv
JOIN KetQua kp ON sv.MaSV = kp.MaSV
JOIN DMMonHoc mh1 ON kp.MaMH = mh1.MaMH AND mh1.TenMH = N'Văn Phạm'
JOIN DMMonHoc mh2 ON kp.MaMH = mh2.MaMH AND mh2.TenMH = N'Văn Phạm' WHERE sv.MaKhoa != 'AV' AND kp.LanThi = 1
AND kp.Diem > (SELECT MAX(kq.Diem) FROM KetQua kq WHERE kq.MaSV = sv.MaSV
AND kq.LanThi = 1 AND kq.MaMH = mh2.MaMH);
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
14. Cho biết sinh viên có nơi sinh cùng với Hải. SELECT * FROM DSSinhVien
WHERE NoiSinh = (SELECT NoiSinh FROM DSSinhVien WHERE TenSV = N'Hải')
AND MaSV != (SELECT MaSV FROM DSSinhVien WHERE TenSV = N'Hải');
15. Cho biết những sinh viên nào có học bổng lớn hơn tất cả học bổng của sinh viên thuộc khoa anh văn SELECT * FROM DSSinhVien sv
WHERE HocBong > ALL (SELECT HocBong FROM DSSinhVien WHERE MaKhoa = 'AV');
16. Cho biết những sinh viên có học bổng lớn hơn bất kỳ học bổng của sinh viên học khóa anh văn SELECT * FROM DSSinhVien sv
WHERE HocBong > ANY (SELECT HocBong FROM DSSinhVien WHERE MaKhoa = 'AV');
17. Cho biết sinh viên nào có điểm thi môn cơ sở dữ liệu lần 2 lớn hơn tất cả điểm thi lần 1 môn cơ sở dữ
liệu của những sinh viên khác. SELECT kq.MaSV FROM KetQua kq JOIN (
SELECT MaSV, MAX(Diem) AS MaxDiem FROM KetQua
WHERE MaMH = 01 AND LanThi = 1 GROUP BY MaSV
) max_scores ON kq.MaSV = max_scores.MaSV
WHERE kq.MaMH = 01 AND kq.LanThi = 2 AND kq.Diem > max_scores.MaxDiem;
18. Cho biết những sinh viên đạt điểm cao nhất trong từng môn.
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
SELECT kq.MaSV, sv.TenSV, mh.TenMH, kq.Diem FROM KetQua kq
JOIN DSSinhVien sv ON kq.MaSV = sv.MaSV
JOIN DMMonHoc mh ON kq.MaMH = mh.MaMH JOIN (
SELECT MaMH, MAX(Diem) AS MaxDiem FROM KetQua GROUP BY MaMH
) max_scores ON kq.MaMH = max_scores.MaMH AND kq.Diem = max_scores.MaxDiem;
19. Cho biết những khoa không có sinh viên học. SELECT MaKhoa FROM DMKhoa
WHERE MaKhoa NOT IN (SELECT DISTINCT MaKhoa FROM DSSinhVien);
20. Cho biết sinh viên chưa thi môn cơ sở dữ liệu. SELECT MaSV FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE MaMH = 01);
21. Cho biết sinh viên nào không thi lần 1 mà có dự thi lần 2. SELECT DISTINCT MaSV FROM KetQua
WHERE LanThi = 2 AND MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE LanThi = 1);
22. Cho biết môn nào không có sinh viên khoa anh văn học. SELECT MaMH FROM DMMonHoc
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM KetQua WHERE MaSV IN (SELECT
MaSV FROM DSSinhVien WHERE MaKhoa = 'AV'));
23. Cho biết những sinh viên khoa anh văn chưa học môn văn phạm. SELECT MaSV FROM DSSinhVien
WHERE MaKhoa = 'AV' AND MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE MaMH = N'Văn Phạm');
24. Cho biết những sinh viên không rớt môn nào. SELECT MaSV FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
25. Cho biết những sinh viên học khoa anh văn có học bổng và những sinh viên chưa bao giờ rớt. SELECT * FROM DSSinhVien
WHERE (MaKhoa = 'AV' AND HocBong > 0)
OR MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
26. Cho biết khoa nào có đông sinh viên nhận học bổng nhất và khoa nào khoa nào có ít sinh viên nhận học bổng nhất.
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVienHocBong FROM DSSinhVien WHERE HocBong > 0 GROUP BY MaKhoa
ORDER BY SoLuongSinhVienHocBong DESC;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
SELECT MaKhoa, COUNT(*) AS SoLuongSinhVienKhongHocBong FROM DSSinhVien WHERE HocBong = 0 GROUP BY MaKhoa
ORDER BY SoLuongSinhVienKhongHocBong ASC;
27. Cho biết 3 sinh viên có học nhiều môn nhất. SELECT TOP 3 MaSV FROM KetQua GROUP BY MaSV
ORDER BY COUNT(DISTINCT MaMH) DESC;
28. Cho biết những môn được tất cả các sinh viên theo học. SELECT MaMH FROM DMMonHoc
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM DSSinhVien LEFT JOIN KetQua ON
DSSinhVien.MaSV = KetQua.MaSV WHERE KetQua.MaMH IS NULL);
29. Cho biết những sinh viên học những môn giống sinh viên có mã số A02 học. SELECT DISTINCT kq.MaSV FROM KetQua kq
WHERE kq.MaMH IN (SELECT MaMH FROM KetQua WHERE MaSV = 'A02');
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
30. Cho biết những sinh viên học những môn bằng đúng những môn mà sinh viên A02 học. SELECT DISTINCT kq.MaSV FROM KetQua kq WHERE NOT EXISTS ( SELECT * FROM KetQua kq2 WHERE kq2.MaSV = 'A02'
AND kq2.MaMH NOT IN (SELECT MaMH FROM KetQua kq3 WHERE kq3.MaSV = kq.MaSV) ) AND kq.MaSV != 'A02';
31. Tạo một bảng mới tên sinhvien-ketqua: gồm: MASV, HoSV, TenSV, SoMonHoc. Sau đó Thêm dữ
liệu vào bảng này dựa vào dữ liệu đã có.
CREATE TABLE sinhvien_ketqua AS
SELECT DSSinhVien.MaSV, HoSV, TenSV, COUNT(DISTINCT MaMH) AS SoMonHoc FROM DSSinhVien
LEFT JOIN KetQua ON DSSinhVien.MaSV = KetQua.MaSV
GROUP BY DSSinhVien.MaSV, HoSV, TenSV;
32. Thêm vào bảng khoa cột Siso, cập nhật sỉ số vào khoa từ dữ liệu sinh viên.
ALTER TABLE DMKhoa ADD COLUMN Siso INT; UPDATE DMKhoa SET Siso = ( SELECT COUNT(*) FROM DSSinhVien
WHERE DSSinhVien.MaKhoa = DMKhoa.MaKhoa );
33. Tăng thêm 1 điểm cho các sinh viên vớt lần 2. Nhưng chỉ tăng tối đa là 5 điểm UPDATE KetQua SET Diem = CASE
WHEN Diem + 1 <= 10 THEN Diem + 1 ELSE 10 END
WHERE LanThi = 2 AND Diem < 5.0;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
34. Tăng học bổng lên 100000 cho những sinh viên có điểm trung bình là 6.5 trở lên UPDATE DSSinhVien
SET HocBong = HocBong + 100000 WHERE MaSV IN ( SELECT MaSV FROM KetQua WHERE LanThi = 1 GROUP BY MaSV HAVING AVG(Diem) >= 6.5 );
35. Thiết lập học bổng bằng 0 cho những sinh viên thi hai môn rớt ở lần 1 UPDATE DSSinhVien SET HocBong = 0 WHERE MaSV IN ( SELECT MaSV FROM KetQua
WHERE LanThi = 1 AND Diem < 5.0 GROUP BY MaSV HAVING COUNT(*) = 2 );
36. Xoá tất cả những sinh viên chưa dự thi môn nào. DELETE FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua);
37. Xóa những môn mà không có sinh viên học. DELETE FROM DMMonHoc
WHERE MaMH NOT IN (SELECT DISTINCT MaMH FROM KetQua);
38. Danh sách sinh viên không bi rớt môn nào SELECT DISTINCT MaSV FROM DSSinhVien
WHERE MaSV NOT IN (SELECT DISTINCT MaSV FROM KetQua WHERE Diem < 5.0);
39. Danh sách sinh viên học môn văn phạm và môn cơ sở dữ liệu SELECT DISTINCT MaSV FROM KetQua WHERE MaMH IN (05, 01);
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421
40. Trong mỗi sinh viên cho biết môn có điểm thi lớn nhất. Thông tin gồm: mã sinh viên, tên sinh viên, tên môn, điểm.
SELECT HoSV, TenSV, mh.TenMH, Diem FROM (
SELECT MaSV, MaMH, Diem, ROW_NUMBER() OVER(PARTITION BY MaSV ORDER BY Diem DESC) AS rn FROM KetQua ) max_scores
JOIN DSSinhVien sv ON max_scores.MaSV = sv.MaSV
JOIN DMMonHoc mh ON max_scores.MaMH = mh.MaMH WHERE rn = 1;
41. Danh sách sinh viên: Không rớt lần 1 hoặc ,Không học môn văn phạm SELECT DISTINCT MaSV FROM DSSinhVien
WHERE MaSV NOT IN (SELECT MaSV FROM KetQua WHERE LanThi = 1 AND Diem < 5.0)
OR MaSV NOT IN (SELECT MaSV FROM KetQua WHERE MaMH = 05);
42. Danh sách những sinh viên khoa có 2 sinh viên nữ trở lên
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com) lOMoARcPSD|17548421 SELECT MaKhoa FROM DSSinhVien WHERE Phai = N'Nữ' GROUP BY MaKhoa HAVING COUNT(*) >= 2;
43. Cho biết những nơi nào có hơn 2 sinh viên đang theo học tại trường. SELECT NoiSinh FROM DSSinhVien GROUP BY NoiSinh HAVING COUNT(*) > 2;
44. Cho biết những môn nào có trên 3 sinh viên dự thi. SELECT MaMH FROM KetQua GROUP BY MaMH
HAVING COUNT(DISTINCT MaSV) > 3;
Downloaded by Nh?t Hoàng ??ng (duongxidaucho@gmail.com)