Professional Documents
Culture Documents
Báo Cáo OOP 1
Báo Cáo OOP 1
KHOA HÀ NỘI
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
----- -----
1. Xác định tập các thuộc tính của lược đồ quan hệ:..................
IV. Các câu lệnh SQL tạo lập và cập nhật dữ liệu cho các bảng:.
Thuộc tính Mô tả
GT Giới tính
MaHK Mã học kỳ
+ Nhóm thuộc tính lặp là: MaSV, HoTenSV, LienLac, GT, QueQuan, Diem
+ Để xác định khóa của lược đồ quan hệ, áp dụng thuật toán sau:
Algorithm KEY
Input: U, F
Output: Một khoá K của lược đồ α = <U, F>
Method
1. N := U;
2. For each A in U do
If (N \ {A})+ = U then N := N \ {A}; endif;
Endfor;
3. Return (N);
End.
Áp dụng thuật toán tìm khóa chính:
Gán K:= U;
Xét K\{HoTenSV} = {MaSV, LienLac, GT, QueQuan, MaLop, TenLop, MaVien,
TenVien, DiaChi, SĐT, MaHK, Diem, MaMH, TenMH, SoTin, MaNganh,
TenNganh}
Ta thấy có: MaSV HoTenSV
Suy ra: {K\{HoTenSV}} + = U
Gán: K:=K\{HoTenSV}
Thực hiện lặp lại đối với toàn bộ thuộc tính, ta thu được:
{MaSV, MaHK} là khóa chính của lược đồ quan hệ α=<U, F>
3. Thực hiện quá trình chuẩn hóa:
MaSV
MaSV HoTenSV
HoTenSV LienLac
SINHVIEN
LienLac GT
MaSV GT QueQuan
MaSV
HoTenSV QueQuan MaLop
HoTenSV
LienLac LienLac
GT GT MaSV
QueQuan QueQuan MaMH
KQHT
MaHK MaHK
MaLop MaMH MaSV Diem
TenLop TenMH MaMH
Diem TenMH MaHK HOCKY
MaVien MaHK
TenVien Diem
DiaChi MaLop
SĐT TenLop
LOP
MaVien
MaHK MaNganh
MaLop MaLop
Diem
TenLop TenLop MaNganh
NGANH
MaVien MaVien TenNganh
MaMH
TenVien TenVien
TenMH
DiaChi DiaChi MaMH
SoTin
SĐT SĐT TenMH
MaNganh MaNganh MONHOC
MaNganh SoTin
TenNganh TenNganh MaHK
TenNganh
MaMH MaMH
TenMH TenMH MaVien
SoTin SoTin TenVien
VIEN
MaHK MaHK DiaChi
SĐT
Nhận xét quá trình chuẩn hóa:
Ở dạng chuẩn 1NF, không còn tồn tại nhóm thuộc tính lặp.
Vẫn còn các thuộc tính HoTenSV, LienLac, GT, QueQuan phụ thuộc nội bộ vào
khóa MaSV.
Ở dạng chuẩn 2NF, không còn các phụ thuộc hàm nội bộ trong quan hệ
Vẫn còn phụ thuộc hàm bắc cầu như: MaLop MaNganh và MaNganh
TenNganh, MaLop MaVien và MaVien {TenVien, DiaChi, SĐT}
Ở dạng chuẩn 3NF, ko còn các thuộc tính không khóa phụ thuộc bắc cầu vào các
khóa của quan hệ
IV. Các câu lệnh SQL tạo lập và cập nhật dữ liệu cho các
bảng:
1. Các câu lệnh tạo bảng:
Tạo bảng NGANH:
CREATE TABLE NGANH
(
MANGANH CHAR(6) PRIMARY KEY NOT NULL,
TENNGANH NVARCHAR(20) NOT NULL
)
Tạo bảng VIEN:
CREATE TABLE VIEN
(
MAVIEN CHAR(4) PRIMARY KEY NOT NULL,
TENVIEN NVARCHAR(20) NOT NULL,
DIACHI NVARCHAR(20) NOT NULL,
SĐT CHAR(10) NOT NULL
)
1. 2.Tìm kiếm thông tin các sinh viên có tên “Nguyễn Đắc Học”, “Tran
Quoc Khanh”:
Câu lệnh:
SELECT * FROM dbo.SINHVIEN
WHERE HOTENSV='Nguyen Dac Hoc' OR HOTENSV='Tran Quoc Khanh'
Hoặc:
SELECT * FROM dbo.SINHVIEN
WHERE HOTENSV IN ('Nguyen Dac Hoc','Tran Quoc Khanh')
Kết quả:
2. Tìm kiếm thông tiên liên lạc và địa chỉ văn phòng viện Ngoại ngữ:
Câu lệnh:
SELECT DIACHI,SĐT FROM dbo.VIEN
WHERE TENVIEN = 'Ngoai Ngu'
Kết quả:
Kết quả:
5. Tìm kiếm thông tin các lớp của ngành Toán Tin thuộc viện Toán:
Câu lệnh:
SELECT TENLOP
FROM dbo.LOP, dbo.VIEN, dbo.NGANH
WHERE LOP.MAVIEN= dbo.VIEN.MAVIEN
AND dbo.LOP.MANGANH= dbo.NGANH.MANGANH
AND TENNGANH='Toan Tin'
Kết quả:
6. In ra điểm trung bình các môn của sinh viên Nguyễn Mai Anh trong 2
học kỳ 20221 và 20222:
Câu lệnh:
SELECT KQHT.MAHK, AVG(KQHT.DIEM) AS DTB_KY
FROM dbo.SINHVIEN INNER JOIN KQHT
ON dbo.SINHVIEN.MASV = KQHT.MASV
WHERE dbo.SINHVIEN.HOTENSV = 'Nguyen Mai Anh'
AND (KQHT.MAHK = '20221' OR KQHT.MAHK = '20222')
GROUP BY KQHT.MAHK;
Kết quả:
7. Tìm kiếm mã sinh viên, họ tên và điểm số môn CTDL> của những
sinh viên lớp Hệ thống 01:
Câu lệnh:
SELECT dbo.SINHVIEN.MASV, dbo.SINHVIEN.HOTENSV
FROM dbo.KQHT
INNER JOIN dbo.SINHVIEN ON KQHT.MASV = SINHVIEN.MASV
INNER JOIN dbo.MONHOC ON MONHOC.MAMH = KQHT.MAMH
AND MONHOC.MAHK = KQHT.MAHK
INNER JOIN dbo.LOP ON LOP.MALOP = SINHVIEN.MALOP
WHERE TENMH='CTDL>' AND LOP.TENLOP = 'He Thong 01'
Kết quả:
8. Sắp xếp điểm số trung bình kỳ 20221 của các sinh viên học ngành Toán
Tin:
Câu lệnh:
SELECT SINHVIEN.MASV, SINHVIEN.HOTENSV, AVG(KQHT.DIEM) AS
DTB_KY20221
FROM KQHT
INNER JOIN SINHVIEN ON KQHT.MASV = SINHVIEN.MASV
INNER JOIN LOP ON SINHVIEN.MALOP = LOP.MALOP
INNER JOIN NGANH ON NGANH.MANGANH = LOP.MANGANH
WHERE KQHT.MAHK = '20221' AND dbo.NGANH.TENNGANH = 'Toan
Tin'
GROUP BY SINHVIEN.MASV, SINHVIEN.HOTENSV
ORDER BY DTB_KY20221 DESC;
Kết quả:
9. Tìm kiếm thông tin 3 môn học có điểm trung bình thấp nhất:
Câu lệnh:
SELECT TOP 3 MONHOC.MaMH, MONHOC.TenMH,AVG(KQHT.Diem) AS DTB
FROM KQHT
INNER JOIN MONHOC ON KQHT.MaMH = MONHOC.MaMH
GROUP BY MONHOC.MaMH, MONHOC.TenMH
ORDER BY DTB ASC
Kết quả:
10. Tìm kiếm sinh viên tạch môn “Hệ điều hành” và liệt kê thông tin của
sinh viên đó:
Câu lệnh:
SELECT dbo.SINHVIEN.MASV,
dbo.SINHVIEN.HOTENSV,dbo.SINHVIEN.LIENLAC, MALOP, AVG(DIEM)
AS DTB
FROM dbo.KQHT
INNER JOIN dbo.SINHVIEN ON SINHVIEN.MASV = KQHT.MASV
INNER JOIN dbo.MONHOC ON MONHOC.MAMH = KQHT.MAMH
AND MONHOC.MAHK = KQHT.MAHK
GROUP BY dbo.SINHVIEN.MASV,
HOTENSV,dbo.SINHVIEN.LIENLAC,MALOP
HAVING SINHVIEN.MASV IN (
SELECT MASV
FROM dbo.KQHT
INNER JOIN dbo.MONHOC ON MONHOC.MAMH = KQHT.MAMH
AND MONHOC.MAHK = KQHT.MAHK
WHERE DIEM < 4 AND dbo.MONHOC.TENMH = 'He đieu hanh'
)
Kết quả:
11. Tìm thông tin của các sinh viên có số môn không đạt lớn hơn bằng 2
Câu lệnh:
SELECT * FROM dbo.SINHVIEN
WHERE dbo.SINHVIEN.MASV IN (
SELECT dbo.KQHT.MASV
FROM dbo.KQHT
WHERE DIEM < 4
GROUP BY KQHT.MASV
HAVING COUNT(*) >= 2
)
Kết quả:
12. Tìm kiếm thông tin của lớp có số môn không đạt lớn hơn 3 trong kỳ
20221:
Câu lệnh:
SELECT LOP.MALOP, LOP.TENLOP, COUNT(*) AS SO_MON_TACH
FROM LOP
INNER JOIN SINHVIEN ON LOP.MALOP = SINHVIEN.MALOP
INNER JOIN KQHT ON SINHVIEN.MASV = KQHT.MASV
WHERE KQHT.MAHK = '20221' AND KQHT.DIEM < 4
GROUP BY LOP.MALOP, LOP.TENLOP
HAVING COUNT(*) > 3
Kết quả:
13. Tìm kiếm thông tin các môn học có sinh viên tạch trong kỳ 20222:
Câu lệnh:
SELECT MONHOC.MAMH, MONHOC.TENMH
FROM MONHOC
WHERE MONHOC.MAMH IN (
SELECT MAMH
FROM KQHT
WHERE KQHT.MAHK = '20222' AND KQHT.DIEM <4
)
Kết quả:
14. Liệt kê danh sách các môn học có từ 8 sinh viên đạt điểm 7 trở lên:
Câu lệnh:
SELECT dbo.MONHOC.MAMH, TENMH, COUNT(DISTINCT dbo.KQHT.MASV)
AS SO_LUONG_SINH_VIEN
FROM dbo.MONHOC INNER JOIN dbo.KQHT
ON KQHT.MAMH = MONHOC.MAMH AND KQHT.MAHK = MONHOC.MAHK
WHERE KQHT.MAHK ='20221' AND dbo.KQHT.DIEM>=7
GROUP BY MONHOC.MAMH, TENMH
HAVING COUNT(DISTINCT KQHT.MASV) >= 7
Kết quả:
15. Liệt kê danh sách các sinh viên không đăng ký môn “Tâm lý học ứng
dụng”:
Câu lệnh:
SELECT MASV, HOTENSV FROM dbo.SINHVIEN
WHERE MASV NOT IN
(
SELECT dbo.SINHVIEN.MASV
FROM dbo.SINHVIEN
INNER JOIN dbo.KQHT ON KQHT.MASV = SINHVIEN.MASV
WHERE MAMH IN (
SELECT MAMH FROM dbo.MONHOC
WHERE TENMH = 'Tam ly hoc ung dung'
)
)
Kết quả:
16. Liệt kê danh sách các sinh viên có điểm trung bình kỳ 20222 thấp nhất
và cao nhất:
Câu lệnh:
SELECT SINHVIEN.MASV, SINHVIEN.HOTENSV, AVG(KQHT.DIEM) AS
DIEM_TRUNG_BINH
FROM SINHVIEN
INNER JOIN KQHT ON SINHVIEN.MASV = KQHT.MASV
WHERE KQHT.MAHK = '20222'
GROUP BY SINHVIEN.MASV, SINHVIEN.HOTENSV
HAVING AVG(KQHT.DIEM) IN (
SELECT TOP 1 AVG(DIEM) AS DIEMTB1
FROM KQHT
WHERE MAHK = '20222'
GROUP BY MASV
ORDER BY DIEMTB1 ASC
UNION
SELECT TOP 1 AVG(DIEM) AS DIEMTB2
FROM KQHT
WHERE MAHK = '20222'
GROUP BY MASV
ORDER BY DIEMTB2 DESC
)
Kết quả:
17. Liệt kê số lượng nam, nữ có trong mỗi lớp học:
Câu lệnh:
SELECT LOP.TENLOP,
COUNT(CASE WHEN SINHVIEN.GT = 1 THEN 1 END) AS SO_SV_NAM,
COUNT(CASE WHEN SINHVIEN.GT = 0 THEN 1 END) AS SO_SV_NU
FROM LOP
INNER JOIN SINHVIEN ON LOP.MALOP = SINHVIEN.MALOP
GROUP BY LOP.TENLOP
ORDER BY LOP.TENLOP ASC
Kết quả:
18. Liệt kê số tín chỉ mà mỗi sinh viên phải học trong lần lượt học kì 20221
và 20222:
Câu lệnh:
SELECT SINHVIEN.MASV,
SUM(CASE WHEN HOCKY.MAHK = '20221' THEN MONHOC.SOTIN ELSE 0
END) AS TONG_SO_TIN_CHI_20221,
SUM(CASE WHEN HOCKY.MAHK = '20222' THEN MONHOC.SOTIN ELSE 0
END) AS TONG_SO_TIN_CHI_20222
FROM SINHVIEN
INNER JOIN KQHT ON SINHVIEN.MASV = KQHT.MASV
INNER JOIN MONHOC ON KQHT.MAMH = MONHOC.MAMH
INNER JOIN HOCKY ON KQHT.MAHK = HOCKY.MAHK
WHERE HOCKY.MAHK IN ('20221', '20222')
GROUP BY SINHVIEN.MASV
Kết quả: