Câu II.2: Cập nhật giá trị điểm trung bình tất cả các môn học DIEMTB của mỗi học viên tất cả các môn học đều có hệ số 1 và nếu học viên thi một môn nhiều lần, chỉ lấy điểm của lần thi sa
Trang 1TRƯỜ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 X
GVHD: Nguyễn Ngọc Quí Sinh viên thực hiện: Nguyễn Hoàng Vũ
Trang 2NHẬ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)
Trang 3MỤC LỤC
I Ngôn ngữ định nghĩa dữ liệu (Data Definition Language) 5
1 Tạo quan hệ và khai báo tất cả các ràng buộc khóa chính, khóa ngoại Thêm vào 3 thuộc tính GHICHU, DIEMTB, XEPLOAI cho quan hệ 5
3 Thuộc tính GIOITINH chỉ có giá trị là “Nam” hoặc “Nu” 7
4 Điểm số của một lần thi có giá trị từ 0 đến 10 và cần lưu đến 2 số lẽ (VD: 6.22) 8
I I Ngôn ngữ thao tác dữ liệu (Data Manipulation Language) 10
1 Tăng hệ số lương thêm 0.2 cho những giáo viên là trưởng khoa 10
2 Cập nhật giá trị điểm trung bình tất cả các môn học (DIEMTB) của mỗi học viên (tất cả các môn học đều có hệ số 1 và nếu học viên thi một môn nhiều lần, chỉ lấy điểm của lần thi sau cùng) 11
3 Cập nhật giá trị cho cột GHICHU là “Cam thi” đối với trường hợp: học viên có một môn bất kỳ thi lần thứ 3 dưới 5 điểm 14
4 Cập nhật giá trị cho cột XEPLOAI trong quan hệ HOCVIEN 17
III Link code sql 19
Trang 4DANH MỤC BẢNG
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
Trang 5NỘI DUNG BÀI LÀM Câu I.1:Tạo quan hệ và khai báo tất cả các ràng buộc khóa chính, khóa ngoại Thêm vào 3 thuộc tính GHICHU, DIEMTB, XEPLOAI cho quan hệ HOCVIEN
- Input:
Trang 6- Hướng giải thuật :
1 Để tạo và khai báo tất cả các ràng buộc khóa chính và khóa ngoại ta chỉ cần quan sát các mối liên hệ giữa các thuộc tính của mỗi quan hệ với nhau
2 Để thêm vào thuộc tính GHICHU, DIEMTB, XEPLOAI cho quan hệ HOCVIEN xác định được kiểu dữ liệu của từng thuộc tính và sử dụng lệnh ALTER TABLE
Trang 7Câu I.3: Thuộc tính GIOITINH chỉ có giá trị là “Nam” hoặc “Nu”.
- Input: Bảng HOCVIEN, GIAOVIEN
- Output:
- Hướng giải thuật:
Câu truy vấn "ALTER TABLE HOCVIEN ADD CONSTRAINT CHECK_GTHV CHECK (GIOITINH IN ('Nam', 'Nu'))" sẽ thêm một ràng buộc kiểm tra (CHECK
constraint) vào bảng HOCVIEN Ràng buộc kiểm tra này đảm bảo rằng giá trị của cột GIOITINH trong bảng HOCVIEN chỉ có thể là 'Nam' hoặc 'Nu'
Tương tự, câu truy vấn "ALTER TABLE GIAOVIEN ADD CONSTRAINT
CHECK_GTGV CHECK (GIOITINH IN ('Nam', 'Nu'))" sẽ thêm một ràng buộc kiểm tra (CHECK constraint) vào bảng GIAOVIEN Ràng buộc kiểm tra này đảm bảo rằng giá trị của cột GIOITINH trong bảng GIAOVIEN chỉ có thể là 'Nam' hoặc 'Nu'
Điều này có nghĩa là khi thêm hoặc cập nhật dữ liệu trong các bảng HOCVIEN và
GIAOVIEN, hệ thống sẽ kiểm tra xem giá trị của cột GIOITINH có thuộc danh sách cho phép ('Nam' hoặc 'Nu') hay không Nếu giá trị không hợp lệ, câu lệnh INSERT hoặc UPDATE sẽ bị từ chối và không thể thực hiện thành công
Trang 8Câu I.4: Điểm số của một lần thi có giá trị từ 0 đến 10 và cần lưu đến 2 số lẽ (VD:
6.22)
- Input:
Trang 9- Output:
Trang 10- Hướng giải thuật:
Câu truy vấn "ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_DIEM CHECK (DIEM BETWEEN 0 AND 10 AND RIGHT(CAST(DIEM AS VARCHAR), 3) LIKE '. ')" sẽ thêm một ràng buộc kiểm tra (CHECK constraint) vào bảng
KETQUATHI Ràng buộc kiểm tra này đảm bảo rằng giá trị của cột DIEM trong bảng KETQUATHI phải nằm trong khoảng từ 0 đến 10 và có đúng 3 chữ số thập phân sau dấu phẩy
Để làm điều này, câu truy vấn sử dụng hai điều kiện Đầu tiên, điều kiện "DIEM
BETWEEN 0 AND 10" đảm bảo rằng giá trị của cột DIEM phải nằm trong khoảng từ 0 đến 10 Điều này đảm bảo rằng giá trị DIEM không vượt quá giới hạn cho phép
Thứ hai, điều kiện "RIGHT(CAST(DIEM AS VARCHAR), 3) LIKE '.'" sử dụng một hàm chuỗi để xác định rằng phần thập phân của giá trị DIEM phải có đúng 3 chữ số sau dấu phẩy Hàm RIGHT dùng để lấy ra 3 ký tự cuối cùng của giá trị DIEM dưới dạng chuỗi Đồng thời, điều kiện LIKE '.' đảm bảo rằng ký tự đầu tiên và ký tự thứ ba phải là bất kỳ ký tự nào, còn ký tự thứ hai phải là dấu chấm
Kết hợp hai điều kiện trên, ràng buộc kiểm tra này chỉ cho phép các giá trị DIEM trong khoảng từ 0 đến 10 và có đúng 3 chữ số sau dấu phẩy Tất cả các giá trị không thoả mãn các điều kiện này sẽ bị từ chối khi thêm hoặc cập nhật dữ liệu trong bảng KETQUATHI
Câu II.1: Tăng hệ số lương thêm 0.2 cho những giáo viên là trưởng khoa.
- Input:
Trang 11- Output:
- Hướng giải thuật:
Câu truy vấn "UPDATE GIAOVIEN SET HESO = HESO + 0.2 WHERE MAGV IN (SELECT TRGKHOA FROM KHOA)" tăng giá trị cột HESO của các giáo viên có mã giảng viên nằm trong danh sách TRGKHOA từ bảng KHOA thêm 0.2
Câu II.2: Cập nhật giá trị điểm trung bình tất cả các môn học (DIEMTB) của mỗi học
viên (tất cả các môn học đều có hệ số 1 và nếu học viên thi một môn nhiều lần, chỉ lấy điểm của lần thi sau cùng)
Trang 12- Input:
Trang 13- Output:
Trang 14- Hướng giải thuật:
Câu truy vấn trên được sử dụng để cập nhật trường "DiemTB" (Điểm trung bình) trong bảng "HocVien" Giá trị mới của trường "DiemTB" được tính bằng cách lấy trung bình của tất cả các điểm trong bảng "KetQuaThi" cho lần thi có giá trị "LanThi" lớn nhất tương ứng với mỗi học viên trong bảng "HocVien"
Đầu tiên, câu truy vấn sử dụng phần SELECT để lấy giá trị trung bình của trường "Diem"
từ bảng "KetQuaThi" Điều này được thực hiện bằng cách sử dụng phần WHERE để chỉ lấy các bản ghi từ bảng "KetQuaThi" có giá trị "LanThi" bằng với giá trị "LanThi" lớn nhất của mỗi học viên Điều này được thực hiện bằng cách sử dụng câu truy vấn con (SELECT MAX(LanThi) FROM KetQuaThi KQ WHERE MaHV = KetQuaThi.MaHV GROUP BY MaHV) để xác định "LanThi" lớn nhất tương ứng với mỗi học viên Sau đó, câu truy vấn sử dụng phần GROUP BY để nhóm các bản ghi theo trường "MaHV" (Mã học viên) và phần HAVING để chỉ lấy các bản ghi có giá trị "MaHV" bằng với giá trị
"MaHV" của mỗi học viên trong bảng "HocVien"
Tiếp theo, câu truy vấn sử dụng phần UPDATE để cập nhật trường "DiemTB" trong bảng
"HocVien" với giá trị trung bình tính được từ phần SELECT ở trên
Câu II.3: Cập nhật giá trị cho cột GHICHU là “Cam thi” đối với trường hợp: học viên
có một môn bất kỳ thi lần thứ 3 dưới 5 điểm
Trang 15- Input:
Trang 16- Output:
- Hướng giải thuật:
Câu truy vấn trên được sử dụng để cập nhật trường "GHICHU" (Ghi chú) trong bảng
"HOCVIEN" Các học viên có điểm dưới 5 trong lần thi thứ 3 sẽ được đánh dấu là "Cam thi" trong trường "GHICHU"
Đầu tiên, câu truy vấn sử dụng phần SELECT để lấy danh sách các học viên có điểm dưới 5 trong lần thi thứ 3 từ bảng "KETQUATHI" Điều này được thực hiện bằng cách sử dụng phần WHERE để chỉ lấy các bản ghi từ bảng "KETQUATHI" có giá trị "LANTHI" bằng 3 và "DIEM" dưới 5
Trang 17Câu II.4: Cập nhật giá trị cho cột XEPLOAI trong quan hệ HOCVIEN như sau:
• Nếu DIEMTB ≥ 9 thì XEPLOAI = “XS”
• Nếu 8 ≤ DIEMTB < 9 thì XEPLOAI = “G”
• Nếu 6.5 ≤ DIEMTB < 8 thì XEPLOAI = “K”
• Nếu 5 ≤ DIEMTB < 6.5 thì XEPLOAI = “TB”
• Nếu DIEMTB < 5 thì XEPLOAI = “Y”
- Input:
Trang 18- Output:
Trang 19- Hướng giải thuật:
Câu truy vấn trên được sử dụng để cập nhật trường "XEPLOAI" (Xếp loại) trong bảng
"HOCVIEN" Xếp loại của học viên được xác định dựa trên giá trị của trường
"DIEMTB" (Điểm trung bình)
Câu truy vấn sử dụng phần SET để cập nhật trường "XEPLOAI" với giá trị được xác định bằng phần CASE
Nếu giá trị của trường "DIEMTB" lớn hơn hoặc bằng 9, xếp loại được gán là 'XS' (Xuất sắc)
Nếu giá trị của trường "DIEMTB" lớn hơn hoặc bằng 8 và nhỏ hơn 9, xếp loại được gán
là 'G' (Giỏi)
Nếu giá trị của trường "DIEMTB" lớn hơn hoặc bằng 6.5 và nhỏ hơn 8, xếp loại được gán
là 'K' (Khá)
Nếu giá trị của trường "DIEMTB" lớn hơn hoặc bằng 5 và nhỏ hơn 6.5, xếp loại được gán
là 'TB' (Trung bình)
Nếu giá trị của trường "DIEMTB" nhỏ hơn 5, xếp loại được gán là 'Y' (Yếu)
LINK CODE:
https://drive.google.com/file/d/1_6yKJY5nKOqqnHkn0gZSAQCF_lC9BYF _/view?usp=sharing