You are on page 1of 30

111Equation Chapter 1 Section 1 TRƯỜNG ĐẠI HỌC BÁCH

KHOA HÀ NỘI
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
-----    -----

BÁO CÁO CUỐI KỲ


Đề tài: Quản lý điểm số sinh viên của viện

Giảng viên: TS.Nguyễn T.Thanh Huyền

Sinh viên thực hiện:


Trần Quốc Khánh 20216841
Hà Nội, năm 2023
Mục lục
I. Trình bày về bài toán thực tế:....................................................

1. Mô tả bài toán thực tế:........................................................

2. Mục tiêu của hệ thống:.......................................................

3. Các quy trình nghiệp vụ:.....................................................

4. Yêu cầu của hệ thống về dữ liệu bao gồm:.........................

II. Mô tả chức năng bài toán:........................................................

1. Sơ đồ phân rã chức năng:.......................................................

2. Chức năng cụ thể:...................................................................

III. Vận dụng lý thuyết thiết kế CSDL:.........................................

1. Xác định tập các thuộc tính của lược đồ quan hệ:..................

2. Tập các phụ thuộc hàm F:.......................................................

3. Thực hiện quá trình chuẩn hóa:..............................................

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:........................................................

2. Cập nhật dữ liệu:.................................................................

V. Các câu truy vấn dữ liệu quan hệ:............................................


I. Trình bày về bài toán thực tế:
1. Mô tả bài toán thực tế:
Bài toán xây dựng 1 hệ cơ sở dữ liệu để quản lý dữ liệu điểm và thông tin sinh viên của 1
ngành trong trường đại học.
Chương trình quản lý điểm sinh viên là chương trình được xây dựng nhằm đáp ứng
những đòi hỏi đặt ra trong quá trình quản lý như nhập thông tin sinh viên, tìm kiếm,
thống kê, in báo cáo và rất nhiều công việc liên quan khác một cách nhanh chóng, thuận
tiện và chính xác.
Mỗi sinh viên sẽ có duy nhất 1 mã sinh viên, không trùng lặp với bất kỳ ai khác. Mỗi một
sinh viên sẽ theo học một lớp đại học. Các sinh viên trong 1 lớp đại học sẽ học chung
ngành và thuộc chung 1 viện. Ứng với mỗi kỳ, sinh viên sẽ theo học một số môn học
được mở nhất định. Kết thúc học kỳ, sinh viên sẽ có 1 điểm số tổng kết duy nhất của môn
học đó.

2. Mục tiêu của hệ thống:


+ Quản lý thông tin sinh viên và điểm số của họ trong các môn học khác nhau và trong
các kỳ học khác nhau. Hệ thống này sẽ giúp cho việc quản lý thông tin sinh viên và điểm
số trở nên nhanh chóng, chính xác và hiệu quả hơn.
+ Đáp ứng những đòi hỏi đặt ra trong quá trình quản lý như nhập thông tin sinh viên, tìm
kiếm, thống kê, in báo cáo và rất nhiều công việc liên quan khác một cách nhanh chóng
và chính xác.

3. Các quy trình nghiệp vụ:


+ Quản lý thông tin sinh viên: Hệ thống lưu trữ thông tin của sinh viên, bao gồm: Mã
sinh viên, họ tên, giới tính, thông tin liên lạc, quê quán và lớp sinh viên đang học. Hệ
thống sẽ cung cấp thêm các chức năng như thêm, sửa, xóa thông tin sinh viên để việc
quản lý thông tin trở nên dễ dàng.
+ Quản lý điểm sinh viên: Hệ thống lưu trữ thông tin điểm số của các môn học khác nhau
trong các kỳ học khác nhau. Các thông tin về điểm số của 1 sinh viên bao gồm: Mã môn
học, tên môn học, kỳ học, điểm.
4. Yêu cầu của hệ thống về dữ liệu bao gồm:
+ Mỗi sinh viên đều có đầy đủ các thông tin như Mã sinh viên, họ tên, điểm,….
+ Các thông tin về điểm số của sinh viên là đầy đủ.
+ Dữ liệu sinh viên phải được bảo mật và chỉ được truy cập bởi những người có quyền
hạn.
+ Dữ liệu sinh viên được tổ chức một cách nhất quán, tránh sự trùng lặp.
+ Hệ thống cần linh hoạt trong việc thay đổi và cập nhật dữ liệu sinh viên, cho phép xử lý
dữ liệu hiệu quả trong thời gian thực và có khả năng mở rộng trong tương lai với số
lượng sinh viên lớn hơn, đáp ứng nhu cầu sắp tới.
II. Mô tả chức năng bài toán:
1. Sơ đồ phân rã chức năng:
+ Sơ đồ phân rã chức năng (Functional Decomposition Diagram - FDD) là một công cụ
phân tích và thiết kế hệ thống, được sử dụng để phân tích các chức năng của một hệ
thống thành các thành phần nhỏ hơn và dễ quản lý hơn. Các thành phần này có thể được
phân rã tiếp thành các thành phần nhỏ hơn đến khi chúng có thể được triển khai.
+ Phân rã chức năng giúp tách các chức năng lớn thành các chức năng nhỏ hơn và dễ
quản lý hơn, tăng tính linh hoạt và tái sử dụng của hệ thống, cũng như giảm thiểu rủi ro
trong quá trình phát triển bằng cách phân chia công việc thành các phần nhỏ hơn, dễ quản
lý hơn và dễ kiểm tra hơn.
Dưới đây là sơ đồ phân ra chức năng của ứng dụng quản lý điểm sinh viên:
2. Chức năng cụ thể:
+ Quản lý thông tin sinh viên:
- Thực hiện thêm thông tin sinh viên mới.
- Thực hiện chỉnh sửa các thông tin trong hệ thống.
- Xóa sinh viên khỏi hệ thống.
+ Quản lý điểm sinh viên:
- Thực hiện nhập điểm các kỳ cho sinh viên.
- Thực hiện chỉnh sửa điểm cho các sinh viên có sai lệch về điểm.
- Thực hiện tính điểm trung bình của sinh viên theo từng môn học hoặc theo từng
kỳ.
+ Quản lý môn học:
- Thực hiện thêm các môn học mới.
- Thực hiện chỉnh sửa, cập nhật các môn học.
- Xóa các môn học đã cũ hoặc không còn được học.
+ Quản lý thống kê, báo cáo:
- Thực hiện sắp xếp, quản lý điểm trùng bình của sinh viên. Thực hiện sắp xếp có
thứ tự các sinh viên dựa theo điểm.
- Thực hiện liệt kê các sinh viên nợ môn, tạch môn.
III. Vận dụng lý thuyết thiết kế CSDL:
Việc chuẩn hóa dữ liệu đảm bảo các tính chất ACID cho cơ sở dữ liệu và giảm thiểu các
vấn đề liên quan đến lưu trữ, truy xuất và cập nhật dữ liệu. Một số tác dụng của việc
chuẩn hóa dữ liệu quan hệ là:
 Giảm thiểu sự trùng lặp dữ liệu: Khi chuẩn hóa dữ liệu, ta cần phân tách các bảng
dữ liệu thành các bảng riêng biệt, giúp giảm thiểu sự trùng lặp dữ liệu. Từ đó giúp
tiết kiệm không gian lưu trữ và giảm thiểu thời gian cập nhật dữ liệu.
 Tăng tính nhất quán của dữ liệu: Chuẩn hóa dữ liệu đảm bảo tính nhất quán của dữ
liệu trong cơ sở dữ liệu. Nếu dữ liệu không được chuẩn hóa, thì sẽ có thể dẫn đến
các vấn đề như thất thoát dữ liệu hay không nhất quán dữ liệu.
 Tăng tính phân cấp và linh hoạt của dữ liệu: Chuẩn hóa dữ liệu giúp tạo ra các
bảng dữ liệu độc lập, có thể được sử dụng để tạo ra nhiều loại báo cáo và truy vấn
dữ liệu khác nhau. Từ đó tăng tính phân cấp và linh hoạt của dữ liệu.
 Tăng tính bảo mật của dữ liệu: Chuẩn hóa dữ liệu giúp tăng tính bảo mật của dữ
liệu trong cơ sở dữ liệu. Khi dữ liệu được phân tách thành các bảng độc lập, thì các
quyền truy cập dữ liệu có thể được kiểm soát và quản lý một cách dễ dàng hơn.
 Giảm thiểu các vấn đề liên quan đến cập nhật dữ liệu: Chuẩn hóa dữ liệu giúp giảm
thiểu các vấn đề liên quan đến cập nhật dữ liệu, bao gồm các vấn đề như mất mát
dữ liệu, mâu thuẫn dữ liệu và lỗi dữ liệu.
1. Xác định tập các thuộc tính của lược đồ quan hệ:

Thuộc tính Mô tả

MaSV Mã sinh viên

HoTenSV Họ tên đầy đủ của sinh viên

LienLac Thông tin liên lạc của sinh viên (SĐT)

GT Giới tính

QueQuan Quê quán

MaLop Mã lớp sinh viên theo học

TenLop Tên lớp sinh viên theo học

MaVien Mã viện mà sinh viên theo học

TenVien Tên viện mà sinh viên theo học

DiaChi Địa chỉ văn phòng của viện

SĐT Hotline của viện

MaHK Mã học kỳ

Diem Điểm số 1 môn học của sinh viên trong 1 kỳ

MaMH Mã của môn học

TenMH Tên của môn học

SoTin Số tín của 1 môn học

MaNganh Mã của ngành học

TenNganh Tên của ngành học

+ Tập thuộc tính:


U = {MaSV, HoTenSV, LienLac, GT, QueQuan, MaLop, TenLop, MaVien, TenVien,
DiaChi, SĐT, MaHK, Diem, MaMH, TenMH, SoTin, MaNganh, TenNganh}
2. Tập các phụ thuộc hàm F:
1. MaSV  {HoTenSV, LienLac, GT, QueQuan, MaLop}
2. MaLop  {TenLop, MaNganh, MaVien}
3. {MaSV, MaMH, MaHK}  Diem
4. {MaSV, MaHK}  MaMH
5. MaNganh  TenNganh
6. MaMH  {TenMH, SoTin}
7. MaVien  {TenVien, DiaChi, SĐT}

+ 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:

Danh sách các


Dạng 1NF Dạng 2NF Dạng 3NF Bảng
thuộc tính

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
)

 Tạo bảng HỌCKY:


CREATE TABLE HOCKY
(
MAHK CHAR(5) PRIMARY KEY NOT NULL,
TENHK CHAR(5) NOT NULL
)
 Tạo bảng LOP:
CREATE TABLE LOP
(
MALOP CHAR(6) PRIMARY KEY NOT NULL,
TENLOP NVARCHAR(20) NOT NULL,
MAVIEN CHAR(4) NOT NULL,
MANGANH CHAR(6) NOT NULL,
FOREIGN KEY (MAVIEN) REFERENCES dbo.VIEN(MAVIEN),
FOREIGN KEY (MANGANH) REFERENCES dbo.NGANH(MANGANH)
)

 Tạo bảng SINHVIEN:


CREATE TABLE SINHVIEN
( MASV CHAR(8) PRIMARY KEY NOT NULL,
HOTENSV NVARCHAR(30) NOT NULL,
LIENLAC CHAR(10) NOT NULL,
GT BIT NOT NULL,
QUEQUAN NVARCHAR(30) NOT NULL,
MALOP CHAR(6) NOT NULL,
FOREIGN KEY (MALOP) REFERENCES LOP(MALOP)
)

 Tạo bảng MONHOC:


CREATE TABLE MONHOC
(
MAMH CHAR(6) PRIMARY KEY NOT NULL,
TENMH NVARCHAR(20) NOT NULL,
SOTIN INT NOT NULL,
MAHK CHAR(5) NOT NULL,
FOREIGN KEY (MAHK) REFERENCES dbo.HOCKY(MAHK)
)

 Tạo bảng KQHT:


CREATE TABLE KQHT
(
MASV CHAR(8) NOT NULL,
MAMH CHAR(6) NOT NULL,
MAHK CHAR(5) NOT NULL,
DIEM FLOAT NOT NULL,
FOREIGN KEY (MASV) REFERENCES SINHVIEN(MASV),
FOREIGN KEY (MAMH) REFERENCES dbo.MONHOC(MAMH),
FOREIGN KEY (MAHK) REFERENCES dbo.HOCKY(MAHK)
)
2. Cập nhật dữ liệu:
(Dữ liệu KQHT của sinh viên có tổng 165 bản ghi, lưu trữ điểm số các môn học trong 2
học kì 20221 và 20222. Phía trên là 4 bản ghi ví dụ của 4 sinh viên có MASV lần lượt là
SV001, SV002, SV003, SV004)
V. Các câu truy vấn dữ liệu quan hệ:
1. Tìm kiếm thông tin các môn học có trong cơ sở dữ liệu:
Câu lệnh:
SELECT * FROM dbo.MONHOC
Kết quả:

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ả:

3. In ra bảng điểm của môn Cơ sở dữ liệu có mã môn học là MI3090 theo


thứ tự tăng dần:
Câu lệnh:
SELECT MASV,DIEM FROM dbo.KQHT
WHERE MAMH = 'MI3090'
ORDER BY DIEM ASC
Kết quả:
4. In ra danh sách các sinh viên lớp Toán Tin 03:
Câu lệnh:
SELECT MASV, HOTENSV
FROM dbo.SINHVIEN, dbo.LOP
WHERE dbo.SINHVIEN.MALOP = dbo.LOP.MALOP
AND TENLOP = 'Toan Tin 03'

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&GT 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&GT' 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ả:

19. Liệt kê thông tin lớp không có con gái:


Câu lệnh:
SELECT LOP.MALOP, LOP.TENLOP
FROM LOP
LEFT JOIN SINHVIEN ON LOP.MALOP = SINHVIEN.MALOP
GROUP BY LOP.MALOP, LOP.TENLOP
HAVING COUNT(CASE WHEN SINHVIEN.GT = 0 THEN 1 END) =0
Kết quả:
20. Tìm thông tin về sinh viên đã đăng ký môn Cơ sở dữ liệu (MI3090) và có điểm
cao nhất trong danh sách sinh viên đã đăng ký môn học:
Câu lệnh:
SELECT TOP 1 SV.MASV, SV.HOTENSV, KQ.DIEM
FROM SINHVIEN SV
JOIN KQHT KQ ON SV.MASV = KQ.MASV
WHERE KQ.MAMH = 'MI3090' AND EXISTS (
SELECT 1
FROM KQHT KQ1
WHERE KQ1.MAMH = 'MI3090' AND KQ1.DIEM > KQ.DIEM
AND KQ1.MAHK = KQ.MAHK
)
ORDER BY KQ.DIEM DESC
Kết quả:

You might also like