- Input: Bảng HOCVIEN, LOP, KETQUATHI- Output:- Hướng giải thuật : Sử dụng câu lệnh SELECT để chọn ra họ tên của lớp trưởng, được kết hợp từ hai trườngHO và TEN của bảng HOCVIEN, và đặt
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA HỆ THỐNG THÔNG TIN MÔN CƠ SỞ DỮ LIỆU BÀI TẬP THỰC HÀNH 4 GVHD: Nguyễn Ngọc Quí Sinh viên thực hiện: Nguyễn Hoàng Vũ IT004 – Cơ sở dữ liệu Tp Hồ Chí Minh, 09/2023 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ……., ngày…… tháng……năm 2023 Người nhận xét (Ký tên và ghi rõ họ tên) 2|Page IT004 – Cơ sở dữ liệu MỤC LỤC I Ngôn ngữ truy vấn dữ liệu: 5 1 * Tìm họ tên những LOPTRG thi không đạt quá 3 môn (mỗi môn đều thi không đạt ở tất cả các lần thi) 5 2 Tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất .6 3 Trong từng lớp, tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất 7 4 Trong từng học kỳ của từng năm, mỗi giáo viên phân công dạy bao nhiêu môn học, bao nhiêu lớp 7 5 Trong từng học kỳ của từng năm, tìm giáo viên (mã giáo viên, họ tên) giảng dạy nhiều nhất .8 6 Tìm môn học (mã môn học, tên môn học) có nhiều học viên thi không đạt (ở lần thi thứ 1) nhất .9 7 Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi thứ 1) .10 8 * Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi sau cùng) 11 9 * Tìm học viên (mã học viên, họ tên) đã thi tất cả các môn đều đạt (chỉ xét lần thi thứ 1) 12 10 * Tìm học viên (mã học viên, họ tên) đã thi tất cả các môn đều đạt (chỉ xét lần thi sau cùng) 13 11 ** Tìm học viên (mã học viên, họ tên) có điểm thi cao nhất trong từng môn (lấy điểm ở lần thi sau cùng) .14 II Link code sql .14 DANH MỤC BẢNG 3|Page IT004 – Cơ sở dữ liệu 1 Bảng KHOA 2 Bảng MONHOC 3 Bảng DIEUKIEN 4 Bảng GIAOVIEN 5 Bảng LOP 6 Bảng HOCVIEN 7 Bảng GIANGDAY 8 Bảng KETQUATHI NỘI DUNG BÀI LÀM 4|Page IT004 – Cơ sở dữ liệu Câu 1: * Tìm họ tên những LOPTRG thi không đạt quá 3 môn (mỗi môn đều thi không đạt ở tất cả các lần thi) - Input: Bảng HOCVIEN, LOP, KETQUATHI - Output: - Hướng giải thuật : Sử dụng câu lệnh SELECT để chọn ra họ tên của lớp trưởng, được kết hợp từ hai trường HO và TEN của bảng HOCVIEN, và đặt tên hiển thị là 'Họ tên lớp trưởng thi không đạt quá 3 môn' Sau đó, câu lệnh FROM kết hợp các bảng HOCVIEN, KETQUATHI và LOP thông qua điều kiện HV.MAHV = L.TRGLOP và HV.MAHV = KQ.MAHV để lấy thông tin cần thiết từ các bảng Tiếp theo, điều kiện WHERE được sử dụng để lọc ra những dòng có KQUA bằng 'Khong Dat' (tức là kết quả thi không đạt) từ bảng KETQUATHI Sau đó, lệnh GROUP BY được sử dụng để nhóm kết quả theo trường HO, TEN và TRGLOP Cuối cùng, điều kiện HAVING COUNT(*) > 3 sẽ lọc ra những dòng mà có số lượng dòng lớn hơn 3, tức là chỉ lấy những lớp trưởng thi không đạt quá 3 môn Vậy nên, đoạn mã SQL trên sẽ trả về họ tên của những lớp trưởng mà thi không đạt quá 3 môn, và mỗi môn đều thi không đạt ở tất cả các lần thi Câu 2: Tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất 5|Page IT004 – Cơ sở dữ liệu - Input: Bảng HOCVIEN, KETQUATHI - Output: - Hướng giải thuật: Sử dụng câu lệnh SELECT để chọn ra mã học viên và họ tên của học viên, và đặt tên hiển thị là HOTEN Sau đó, câu lệnh FROM kết hợp hai bảng HOCVIEN và KETQUATHI thông qua điều kiện HV.MAHV = KQ.MAHV để lấy thông tin cần thiết từ các bảng Câu lệnh WHERE được sử dụng để lọc ra những dòng có điểm (DIEM) lớn hơn hoặc bằng 9 từ bảng KETQUATHI Sau đó, lệnh GROUP BY được sử dụng để nhóm kết quả theo trường HV.MAHV, HO và TEN Cuối cùng, điều kiện HAVING COUNT() >= ALL (SELECT COUNT() FROM KETQUATHI WHERE DIEM >= 9 GROUP BY MAHV) sẽ lọc ra những dòng mà số lượng môn có điểm từ 9 trở lên của học viên đó lớn hơn hoặc bằng số lượng môn có điểm từ 9 trở lên của tất cả các học viên Tóm lại, đoạn mã SQL này sẽ trả về thông tin của học viên có số môn đạt điểm 9 hoặc 10 nhiều nhất Câu 3: Trong từng lớp, tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất 6|Page IT004 – Cơ sở dữ liệu - Input: Bảng HOCVIEN, KETQUATHI - Output: - Hướng giải thuật: Sử dụng câu lệnh SELECT với một lệnh con bên trong, trong đó lệnh con đóng vai trò như một bảng tạm thời được đặt tên là XH Lệnh con trong câu lệnh SELECT đầu tiên thực hiện việc tính toán số lượng môn học có điểm từ 9 trở lên cho mỗi học viên trong từng lớp Sau đó, sử dụng hàm RANK() để xếp hạng số lượng môn học có điểm cao nhất đến thấp nhất trong từng lớp (được phân nhóm bởi MALOP) và gán kết quả xếp hạng này vào cột XEPHANG Tiếp theo, câu lệnh SELECT chính sẽ chọn ra mã lớp (MALOP), mã học viên (MAHV), và họ tên học viên (HOTEN) từ bảng tạm thời XH, với điều kiện là chỉ lấy ra những học viên có xếp hạng (XEPHANG) bằng 1, tức là học viên có số môn điểm 9 hoặc 10 nhiều nhất trong từng lớp Tóm lại, câu lệnh SQL này sẽ trả về thông tin về học viên trong từng lớp có số môn đạt điểm 9 hoặc 10 nhiều nhất Câu 4: Trong từng học kỳ của từng năm, mỗi giáo viên phân công dạy bao nhiêu môn học, bao nhiêu lớp - Input: Bảng GIANGDAY 7|Page IT004 – Cơ sở dữ liệu - Output: - Hướng giải thuật: Sử dụng lệnh SELECT để chọn ra mã giáo viên (MAGV), đồng thời sử dụng hàm COUNT để đếm số lượng môn học (sử dụng DISTINCT để loại bỏ các giá trị trùng lặp) dựa trên trường MAMH và số lượng lớp học (cũng sử dụng DISTINCT) dựa trên trường MALOP từ bảng GIANGDAY Sau đó, sử dụng lệnh GROUP BY để nhóm kết quả theo mã giáo viên (MAGV) Tóm lại, câu lệnh SQL này sẽ trả về số môn học và số lớp mà mỗi giáo viên phân công dạy trong từng học kỳ của từng năm Câu 5: Trong từng học kỳ của từng năm, tìm giáo viên (mã giáo viên, họ tên) giảng dạy nhiều nhất - Input: Bảng GIAOVIEN, GIANGDAY 8|Page IT004 – Cơ sở dữ liệu - Output: - Hướng giải thuật: Sử dụng câu lệnh SELECT với một lệnh con bên trong, trong đó lệnh con đóng vai trò như một bảng tạm thời được đặt tên là XH Lệnh con trong câu lệnh SELECT đầu tiên thực hiện việc tính toán số lượng môn mà mỗi giáo viên đã giảng dạy trong từng học kỳ của từng năm Đồng thời, sử dụng hàm RANK() để xếp hạng số lượng môn học giảng dạy từ cao xuống thấp, dựa trên HOCKY, NAM và MAGV, và gán kết quả xếp hạng vào cột XEPHANG Tiếp theo, câu lệnh SELECT chính sẽ chọn ra học kỳ (HOCKY), năm (NAM), mã giáo viên (MAGV), và họ tên giáo viên từ bảng tạm thời XH, với điều kiện là chỉ lấy ra giáo viên có xếp hạng (XEPHANG) bằng 1, tức là giáo viên giảng dạy nhiều nhất trong từng học kỳ của từng năm Cuối cùng, câu lệnh ORDER BY được sử dụng để sắp xếp kết quả theo năm và học kỳ Tóm lại, câu lệnh SQL này sẽ trả về thông tin về giáo viên giảng dạy nhiều nhất trong từng học kỳ của từng năm Câu 6: Tìm môn học (mã môn học, tên môn học) có nhiều học viên thi không đạt (ở lần thi thứ 1) nhất - Input: Bảng MONHOC, KETQUATHI - Output: 9|Page IT004 – Cơ sở dữ liệu - Hướng giải thuật: Sử dụng lệnh SELECT để chọn ra mã môn học (MAMH) và tên môn học (TENMH) từ bảng MONHOC, đồng thời kết hợp với bảng KETQUATHI để lấy thông tin về kết quả thi Sau đó, sử dụng điều kiện trong câu lệnh WHERE để lọc ra các môn học có kết quả thi là "Không Đạt" ở lần thi đầu tiên (LANTHI = 1) Tiếp theo, sử dụng lệnh GROUP BY để nhóm kết quả theo MAMH và TENMH (mã môn học và tên môn học) từ bảng MONHOC Cuối cùng, sử dụng điều kiện HAVING COUNT() >= ALL (SELECT COUNT() FROM KETQUATHI WHERE LANTHI = 1 AND KQUA = 'Khong dat' GROUP BY MAMH) để lọc ra môn học có số lượng học viên thi không đạt ở lần thi thứ nhất lớn hơn hoặc bằng số lượng học viên thi không đạt ở lần thi thứ nhất của tất cả các môn học Tóm lại, câu lệnh SQL này sẽ trả về thông tin về môn học có nhiều học viên thi không đạt nhất ở lần thi thứ nhất Câu 7: Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi thứ 1) - Input: Bảng HOCVIEN, KETQUATHI - Output: 10 | P a g e IT004 – Cơ sở dữ liệu - Hướng giải thuật: Sử dụng lệnh SELECT để chọn ra mã học viên (MAHV) và họ tên của học viên (kết hợp từ các trường HO và TEN) từ bảng HOCVIEN, và kết hợp với bảng KETQUATHI để lấy thông tin về kết quả thi Sử dụng điều kiện NOT EXISTS để loại bỏ những học viên có kết quả thi "Không Đạt" ở lần thi thứ nhất (LANTHI = 1 và KQUA = 'Khong Dat') từ bảng KETQUATHI đối với từng học viên Cuối cùng, sử dụng từ khóa DISTINCT để đảm bảo chỉ lấy ra các kết quả duy nhất, đảm bảo rằng mỗi học viên chỉ xuất hiện một lần trong kết quả Tóm lại, câu lệnh SQL sẽ trả về thông tin về học viên đã đạt tất cả các môn học chỉ xét lần thi thứ 1 Câu 8: * Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi sau cùng) - Input: Bảng HOCVIEN, KETQUATHI - Output: 11 | P a g e IT004 – Cơ sở dữ liệu - Hướng giải thuật: Sử dụng lệnh SELECT để chọn ra mã học viên (MAHV) và họ tên của học viên (kết hợp từ các trường HO và TEN) từ bảng HOCVIEN, và kết hợp với bảng KETQUATHI để lấy thông tin về kết quả thi Sử dụng điều kiện NOT EXISTS để loại bỏ những học viên có kết quả thi là "Không Đạt" ở lần thi sau cùng (LANTHI là lần thi lớn nhất theo MAHV) từ bảng KETQUATHI đối với từng học viên Cuối cùng, sử dụng từ khóa DISTINCT để đảm bảo chỉ lấy ra các kết quả duy nhất, đảm bảo rằng mỗi học viên chỉ xuất hiện một lần trong kết quả Tóm lại, câu lệnh này sẽ trả về thông tin về học viên đã đạt tất cả các môn học, chỉ xét lần thi sau cùng Câu 9: * Tìm học viên (mã học viên, họ tên) đã thi tất cả các môn đều đạt (chỉ xét lần thi thứ 1) - Input: Bảng HOCVIEN - Output: - Hướng giải thuật: Sử dụng lệnh SELECT để chọn ra mã học viên (MAHV) và họ tên của học viên (kết hợp từ các trường HO và TEN) từ bảng HOCVIEN, và sử dụng điều kiện NOT EXISTS để loại bỏ học viên nào không đạt ở lần thi thứ 1 cho từng môn học Nếu không có bất kỳ môn nào mà học viên không đạt, học viên đó sẽ được lựa chọn 12 | P a g e IT004 – Cơ sở dữ liệu Tóm lại, câu lệnh này sẽ trả về thông tin về học viên đã thi tất cả các môn và đều đạt, chỉ xét lần thi thứ 1 Câu 10: * Tìm học viên (mã học viên, họ tên) đã thi tất cả các môn đều đạt (chỉ xét lần thi sau cùng) - Input: Bảng HOCVIEN - Output: - Hướng giải thuật: Sử dụng câu lệnh SELECT để chọn ra mã học viên (MAHV) và họ tên của học viên (HOTEN) Tiếp theo, câu lệnh FROM sử dụng bảng HOCVIEN và đặt tên tạm thời là HV Sau đó, sử dụng lệnh NOT EXISTS để kiểm tra điều kiện rằng không tồn tại bất kỳ môn học nào mà học viên không đạt kết quả cao nhất ở lần thi sau cùng Lệnh con bên trong NOT EXISTS thực hiện việc kiểm tra kết quả thi có phải là 'Đạt' (KQUA = 'Dat') ở lần thi sau cùng hay không, sử dụng điều kiện LANTHI = (SELECT MAX(LANTHI) FROM KETQUATHI WHERE MAHV = HV.MAHV GROUP BY MAHV) để lấy kết quả thi ở lần thi cuối cùng Tóm lại, câu lệnh SQL này sẽ trả về thông tin về học viên đã thi tất cả các môn và đạt kết quả 'Đạt' ở lần thi sau cùng 13 | P a g e IT004 – Cơ sở dữ liệu Câu 11: ** Tìm học viên (mã học viên, họ tên) có điểm thi cao nhất trong từng môn (lấy điểm ở lần thi sau cùng) - Input: Bảng HOCVIEN, KETQUATHI - Output: - Hướng giải thuật: Sử dụng một lệnh SELECT bên trong một lệnh SELECT khác để thực hiện việc chọn ra mã môn học (MAMH), mã học viên (MAHV), họ và tên học viên (kết hợp từ trường HO và TEN), và sử dụng hàm RANK() để xếp hạng điểm thi cao nhất theo từng môn Ở lệnh SELECT bên trong, chúng ta sử dụng bảng HOCVIEN và KETQUATHI, sau đó sử dụng điều kiện LANTHI = (SELECT MAX(LANTHI) FROM KETQUATHI WHERE MAHV = HV.MAHV GROUP BY MAHV) để chỉ lấy kết quả thi ở lần thi sau cùng Sau đó chúng ta sử dụng hàm RANK() để xếp hạng điểm thi từ cao đến thấp theo từng môn (được phân nhóm bởi MAMH) Cuối cùng, chúng ta sử dụng lại lệnh SELECT để chọn ra các thông tin từ bảng tạm thời XH với điều kiện XEPHANG = 1, tức là chỉ lấy ra học viên có điểm cao nhất trong từng môn Tóm lại, câu lệnh SQL này sẽ trả về thông tin về học viên có điểm thi cao nhất trong từng môn ở lần thi sau cùng LINK CODE: 14 | P a g e IT004 – Cơ sở dữ liệu https://drive.google.com/file/d/1TeFrnMyG997KDwK0PK495Hruq2xi0dsm/view?usp=sharing 15 | P a g e