You are on page 1of 3

create database KTGK

go
use KTGK
go
CREATE TABLE DMKHOA (
MaKH CHAR(2),
TenKH VARCHAR(50)
);

-- Tạo bảng DMMH - DANH MỤC MÔN HỌC


CREATE TABLE DMMH (
MaMH CHAR(2),
TenMH VARCHAR(50),
HeSo INT
);

-- Tạo bảng DMSV - DANH MỤC SINH VIÊN


CREATE TABLE DMSV (
MaSV CHAR(3),
TenSV VARCHAR(50),
Nam BIT,
MaKH CHAR(2),
SoMonDK INT,
DiemTB FLOAT,
CONSTRAINT KETQUA CHECK (DiemTB >= 0 AND DiemTB <= 10)
);
-- Thiết lập ràng buộc FOREIGN KEY cho bảng DMKHOA
ALTER TABLE DMSV
ADD CONSTRAINT FK_DMSV_DMKHOA_MaKH FOREIGN KEY (MaKH) REFERENCES DMKHOA(MaKH);

-- Thiết lập ràng buộc FOREIGN KEY cho bảng DMSV


ALTER TABLE DMSV
ADD CONSTRAINT FK_DMSV_DMKHOA_MaKH FOREIGN KEY (MaKH) REFERENCES DMKHOA(MaKH);

-- Thiết lập ràng buộc FOREIGN KEY cho bảng KETQUA


ALTER TABLE KETQUA
ADD CONSTRAINT FK_KETQUA_DMSV_MaSV FOREIGN KEY (MaSV) REFERENCES DMSV(MaSV);
ALTER TABLE KETQUA
ADD CONSTRAINT FK_KETQUA_DMMH_MaMH FOREIGN KEY (MaMH) REFERENCES DMMH(MaMH);

-- Thiết lập ràng buộc FOREIGN KEY cho bảng DMMH


ALTER TABLE DMMH
ADD CONSTRAINT FK_DMMH_DMSV_MaMH FOREIGN KEY (MaMH) REFERENCES DMSV(MaMH);
-- Nhập dữ liệu cho bảng DMKHOA
INSERT INTO DMKHOA (MaKH, TenKH) VALUES
('AV', 'Anh Văn'),
('TH', 'Tin Học'),
('TR', 'Triết'),
('VL', 'Vật Lý');

-- Nhập dữ liệu cho bảng DMMH


INSERT INTO DMMH (MaMH, TenMH, HeSo) VALUES
('01', 'Cơ sở dữ liệu', 2),
('02', 'Trí tuệ nhân tạo', 3),
('03', 'Truyền tin', 1),
('04', 'Thiết kế web', 1),
('05', 'Mạng máy tính', 1),
('06', 'Đồ họa', 2);
-- Nhập dữ liệu cho bảng KETQUA
INSERT INTO KETQUA (MaSV, MaMH, Diem) VALUES
('A01', '01', 6.00),
('A01', '02', 6.00),
('A01', '03', 5.00),
('A02', '01', 7.50),
('A02', '03', 10.00),
('A02', '05', 9.00),
('A03', '01', 5.00),
('A03', '03', 2.50),
('A04', '05', 10.00),
('B01', '01', 7.00),
('B01', '03', 2.50),
('B02', '02', 6.00),
('B02', '04', 10.00);
-- Chèn dữ liệu vào bảng DMSV
INSERT INTO DMSV (MaSV, TenSV, Nam, MaKH, SoMonDK, DiemTB) VALUES
('A01', 'Nguyễn Thanh Hải', 1, 'TH', NULL, NULL),
('A02', 'Trần Văn Chính', 0, 'TH', NULL, NULL),
('A03', 'Lê Thị Bạch Yến', 1, 'TH', NULL, NULL),
('A04', 'Nguyễn Công Phượng', NULL, 'AV', NULL, NULL),
('B01', 'Phạm Văn Mách', 1, 'TR', NULL, NULL),
('B02', 'Bùi Văn Quyến', 1, 'AV', NULL, NULL);
-- Truy vấn 1
SELECT * FROM DMSV;

-- Truy vấn 2
SELECT MaSV, UPPER(TenSV) AS TenSV, Nam
FROM DMSV
ORDER BY TenSV DESC;

-- Truy vấn 3
SELECT TenSV, Nam
FROM DMSV
WHERE MaKH = 'TH'
LIMIT 2;

-- Truy vấn 4
SELECT TOP (SELECT COUNT(*) / 2 FROM DMSV) *
FROM DMSV;

-- Truy vấn 5
SELECT DMKHOA.TenKH, DMSV.TenSV
FROM DMSV
JOIN DMKHOA ON DMSV.MaKH = DMKHOA.MaKH;

-- Truy vấn 6
SELECT DMKHOA.TenKH, DMSV.TenSV, DMMH.TenMH, KETQUA.Diem
FROM DMSV
JOIN DMKHOA ON DMSV.MaKH = DMKHOA.MaKH
JOIN KETQUA ON DMSV.MaSV = KETQUA.MaSV
JOIN DMMH ON KETQUA.MaMH = DMMH.MaMH;

-- Truy vấn 7
SELECT DMKHOA.MaKH, DMKHOA.TenKH, COUNT(DMSV.MaSV) AS SoSinhVien
FROM DMKHOA
LEFT JOIN DMSV ON DMKHOA.MaKH = DMSV.MaKH
GROUP BY DMKHOA.MaKH, DMKHOA.TenKH;
-- Truy vấn 8
SELECT TOP 1 WITH TIES DMSV.MaSV, DMSV.TenSV, KETQUA.Diem AS DiemCaoNhat
FROM KETQUA
JOIN DMMH ON KETQUA.MaMH = DMMH.MaMH
JOIN DMSV ON KETQUA.MaSV = DMSV.MaSV
WHERE DMMH.TenMH = 'Đồ họa'
ORDER BY ROW_NUMBER() OVER (PARTITION BY DMSV.MaSV ORDER BY Diem DESC);

You might also like