You are on page 1of 27

CREATE DATABASE QLBH

-----------------------------------------------------
-----------------------------------------------------
---------------------------------------------USE QLBH
-- KHACHANG
CREATE TABLE KHACHHANG(
MAKH char(4) not null,
HOTEN varchar(40),
DCHI varchar(50),
SODT varchar(20),
NGSINH smalldatetime,
NGDK smalldatetime,
DOANHSO money,
constraint pk_kh primary key(MAKH)
)
---------------------------------------------
-- NHANVIEN
CREATE TABLE NHANVIEN(
MANV char(4) not null,
HOTEN varchar(40),
SODT varchar(20),
NGVL smalldatetime
constraint pk_nv primary key(MANV)
)
---------------------------------------------
-- SANPHAM
CREATE TABLE SANPHAM(
MASP char(4) not null,
TENSP varchar(40),
DVT varchar(20),
NUOCSX varchar(40),
GIA money,
constraint pk_sp primary key(MASP)
)
---------------------------------------------
-- HOADON
CREATE TABLE HOADON(
SOHD int not null,
NGHD smalldatetime,
MAKH char(4),
MANV char(4),
TRIGIA money,
constraint pk_hd primary key(SOHD)
)
---------------------------------------------
-- CTHD
CREATE TABLE CTHD(
SOHD int,
MASP char(4),
SL int,
constraint pk_cthd primary key(SOHD,MASP)
)

-- Khoa ngoai cho bang HOADON


ALTER TABLE HOADON ADD CONSTRAINT fk01_HD FOREIGN KEY(MAKH) REFERENCES
KHACHHANG(MAKH)
ALTER TABLE HOADON ADD CONSTRAINT fk02_HD FOREIGN KEY(MANV) REFERENCES
NHANVIEN(MANV)
-- Khoa ngoai cho bang CTHD
ALTER TABLE CTHD ADD CONSTRAINT fk01_CTHD FOREIGN KEY(SOHD) REFERENCES HOADON(SOHD)
ALTER TABLE CTHD ADD CONSTRAINT fk02_CTHD FOREIGN KEY(MASP) REFERENCES
SANPHAM(MASP)
-----------------------------------------------------
-----------------------------------------------------
set dateformat dmy
-------------------------------
-- KHACHHANG
insert into khachhang values('KH01','Nguyen Van A','731 Tran Hung Dao, Q5,
TpHCM','8823451','22/10/1960','22/07/2006',13060000)
insert into khachhang values('KH02','Tran Ngoc Han','23/5 Nguyen Trai, Q5,
TpHCM','908256478','03/04/1974','30/07/2006',280000)
insert into khachhang values('KH03','Tran Ngoc Linh','45 Nguyen Canh Chan, Q1,
TpHCM','938776266','12/06/1980','08/05/2006',3860000)
insert into khachhang values('KH04','Tran Minh Long','50/34 Le Dai Hanh, Q10,
TpHCM','917325476','09/03/1965','10/02/2006',250000)
insert into khachhang values('KH05','Le Nhat Minh','34 Truong Dinh, Q3,
TpHCM','8246108','10/03/1950','28/10/2006',21000)
insert into khachhang values('KH06','Le Hoai Thuong','227 Nguyen Van Cu, Q5,
TpHCM','8631738','31/12/1981','24/11/2006',915000)
insert into khachhang values('KH07','Nguyen Van Tam','32/3 Tran Binh Trong, Q5,
TpHCM','916783565','06/04/1971','12/01/2006',12500)
insert into khachhang values('KH08','Phan Thi Thanh','45/2 An Duong Vuong, Q5,
TpHCM','938435756','10/01/1971','13/12/2006',365000)
insert into khachhang values('KH09','Le Ha Vinh','873 Le Hong Phong, Q5,
TpHCM','8654763','03/09/1979','14/01/2007',70000)
insert into khachhang values('KH10','Ha Duy Lap','34/34B Nguyen Trai, Q1,
TpHCM','8768904','02/05/1983','16/01/2007',67500)

-------------------------------
-- NHANVIEN
insert into nhanvien values('NV01','Nguyen Nhu Nhut','927345678','13/04/2006')
insert into nhanvien values('NV02','Le Thi Phi Yen','987567390','21/04/2006')
insert into nhanvien values('NV03','Nguyen Van B','997047382','27/04/2006')
insert into nhanvien values('NV04','Ngo Thanh Tuan','913758498','24/06/2006')
insert into nhanvien values('NV05','Nguyen Thi Truc
Thanh','918590387','20/07/2006')

-------------------------------
-- SANPHAM
insert into sanpham values('BC01','But chi','cay','Singapore',3000)
insert into sanpham values('BC02','But chi','cay','Singapore',5000)
insert into sanpham values('BC03','But chi','cay','Viet Nam',3500)
insert into sanpham values('BC04','But chi','hop','Viet Nam',30000)
insert into sanpham values('BB01','But bi','cay','Viet Nam',5000)
insert into sanpham values('BB02','But bi','cay','Trung Quoc',7000)
insert into sanpham values('BB03','But bi','hop','Thai Lan',100000)
insert into sanpham values('TV01','Tap 100 giay mong','quyen','Trung Quoc',2500)
insert into sanpham values('TV02','Tap 200 giay mong','quyen','Trung Quoc',4500)
insert into sanpham values('TV03','Tap 100 giay tot','quyen','Viet Nam',3000)
insert into sanpham values('TV04','Tap 200 giay tot','quyen','Viet Nam',5500)
insert into sanpham values('TV05','Tap 100 trang','chuc','Viet Nam',23000)
insert into sanpham values('TV06','Tap 200 trang','chuc','Viet Nam',53000)
insert into sanpham values('TV07','Tap 100 trang','chuc','Trung Quoc',34000)
insert into sanpham values('ST01','So tay 500 trang','quyen','Trung Quoc',40000)
insert into sanpham values('ST02','So tay loai 1','quyen','Viet Nam',55000)
insert into sanpham values('ST03','So tay loai 2','quyen','Viet Nam',51000)
insert into sanpham values('ST04','So tay','quyen','Thai Lan',55000)
insert into sanpham values('ST05','So tay mong','quyen','Thai Lan',20000)
insert into sanpham values('ST06','Phan viet bang','hop','Viet Nam',5000)
insert into sanpham values('ST07','Phan khong bui','hop','Viet Nam',7000)
insert into sanpham values('ST08','Bong bang','cai','Viet Nam',1000)
insert into sanpham values('ST09','But long','cay','Viet Nam',5000)
insert into sanpham values('ST10','But long','cay','Trung Quoc',7000)

-------------------------------
-- HOADON
insert into hoadon values(1001,'23/07/2006','KH01','NV01',320000)
insert into hoadon values(1002,'12/08/2006','KH01','NV02',840000)
insert into hoadon values(1003,'23/08/2006','KH02','NV01',100000)
insert into hoadon values(1004,'01/09/2006','KH02','NV01',180000)
insert into hoadon values(1005,'20/10/2006','KH01','NV02',3800000)
insert into hoadon values(1006,'16/10/2006','KH01','NV03',2430000)
insert into hoadon values(1007,'28/10/2006','KH03','NV03',510000)
insert into hoadon values(1008,'28/10/2006','KH01','NV03',440000)
insert into hoadon values(1009,'28/10/2006','KH03','NV04',200000)
insert into hoadon values(1010,'01/11/2006','KH01','NV01',5200000)
insert into hoadon values(1011,'04/11/2006','KH04','NV03',250000)
insert into hoadon values(1012,'30/11/2006','KH05','NV03',21000)
insert into hoadon values(1013,'12/12/2006','KH06','NV01',5000)
insert into hoadon values(1014,'31/12/2006','KH03','NV02',3150000)
insert into hoadon values(1015,'01/01/2007','KH06','NV01',910000)
insert into hoadon values(1016,'01/01/2007','KH07','NV02',12500)
insert into hoadon values(1017,'02/01/2007','KH08','NV03',35000)
insert into hoadon values(1018,'13/01/2007','KH08','NV03',330000)
insert into hoadon values(1019,'13/01/2007','KH01','NV03',30000)
insert into hoadon values(1020,'14/01/2007','KH09','NV04',70000)
insert into hoadon values(1021,'16/01/2007','KH10','NV03',67500)
insert into hoadon values(1022,'16/01/2007',Null,'NV03',7000)
insert into hoadon values(1023,'17/01/2007',Null,'NV01',330000)

-------------------------------
-- CTHD
insert into cthd values(1001,'TV02',10)
insert into cthd values(1001,'ST01',5)
insert into cthd values(1001,'BC01',5)
insert into cthd values(1001,'BC02',10)
insert into cthd values(1001,'ST08',10)
insert into cthd values(1002,'BC04',20)
insert into cthd values(1002,'BB01',20)
insert into cthd values(1002,'BB02',20)
insert into cthd values(1003,'BB03',10)
insert into cthd values(1004,'TV01',20)
insert into cthd values(1004,'TV02',10)
insert into cthd values(1004,'TV03',10)
insert into cthd values(1004,'TV04',10)
insert into cthd values(1005,'TV05',50)
insert into cthd values(1005,'TV06',50)
insert into cthd values(1006,'TV07',20)
insert into cthd values(1006,'ST01',30)
insert into cthd values(1006,'ST02',10)
insert into cthd values(1007,'ST03',10)
insert into cthd values(1008,'ST04',8)
insert into cthd values(1009,'ST05',10)
insert into cthd values(1010,'TV07',50)
insert into cthd values(1010,'ST07',50)
insert into cthd values(1010,'ST08',100)
insert into cthd values(1010,'ST04',50)
insert into cthd values(1010,'TV03',100)
insert into cthd values(1011,'ST06',50)
insert into cthd values(1012,'ST07',3)
insert into cthd values(1013,'ST08',5)
insert into cthd values(1014,'BC02',80)
insert into cthd values(1014,'BB02',100)
insert into cthd values(1014,'BC04',60)
insert into cthd values(1014,'BB01',50)
insert into cthd values(1015,'BB02',30)
insert into cthd values(1015,'BB03',7)
insert into cthd values(1016,'TV01',5)
insert into cthd values(1017,'TV02',1)
insert into cthd values(1017,'TV03',1)
insert into cthd values(1017,'TV04',5)
insert into cthd values(1018,'ST04',6)
insert into cthd values(1019,'ST05',1)
insert into cthd values(1019,'ST06',2)
insert into cthd values(1020,'ST07',10)
insert into cthd values(1021,'ST08',5)
insert into cthd values(1021,'TV01',7)
insert into cthd values(1021,'TV02',10)
insert into cthd values(1022,'ST07',1)
insert into cthd values(1023,'ST04',6)
----------------------------------------------------------------
----------------------------------------------------------------
--1. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” sản xuất.
SELECT MASP, TENSP
FROM SANPHAM
WHERE NUOCSX = 'TRUNG QUOC'
--2. In ra danh sách các sản phẩm (MASP, TENSP) có đơn vị tính là “cay”, ”quyen”.
SELECT MASP, TENSP
FROM SANPHAM
WHERE DVT IN('CAY', 'QUYEN')
--3. In ra danh sách các sản phẩm (MASP,TENSP) có mã sản phẩm bắt đầu là “B” và
kết thúc là “01”.
SELECT MASP, TENSP
FROM SANPHAM
WHERE MASP LIKE'B%01'
--4. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quốc” sản xuất có giá từ
30.000 đến 40.000.
SELECT MASP,TENSP,NUOCSX
FROM SANPHAM
WHERE NUOCSX = 'TRUNG QUOC'
AND GIA BETWEEN 30000 AND 40000
--5. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” hoặc “Thai Lan” sản
xuất có giá từ 30.000 đến 40.000.
SELECT MASP, TENSP, NUOCSX
FROM SANPHAM
WHERE (NUOCSX = 'TRUNG QUOC' OR NUOCSX = 'THAI LAN') AND GIA BETWEEN 30000 AND
40000
--6. In ra các số hóa đơn, trị giá hóa đơn bán ra trong ngày 1/1/2007 và ngày
2/1/2007.
SELECT SOHD, TRIGIA
FROM HOADON
WHERE NGHD >= '1/1/2007' AND NGHD <= '1/2/2007'
--7. In ra các số hóa đơn, trị giá hóa đơn trong tháng 1/2007, sắp xếp theo ngày
(tăng dần) và trị giá của hóa đơn (giảm dần).
SELECT SOHD, TRIGIA
FROM HOADON
WHERE MONTH(NGHD) = 1 AND YEAR(NGHD) = 2007
ORDER BY NGHD ASC, TRIGIA DESC
--8. In ra danh sách các khách hàng (MAKH, HOTEN) đã mua hàng trong ngày 1/1/2007.
SELECT K.MAKH, HOTEN
FROM KHACHHANG K INNER JOIN HOADON H
ON K.MAKH = H.MAKH
WHERE NGHD = '1/1/2007'
--9. In ra số hóa đơn, trị giá các hóa đơn do nhân viên có tên “Nguyen Van B” lập
trong ngày 28/10/2006.
SELECT SOHD, TRIGIA
FROM HOADON H INNER JOIN NHANVIEN N
ON H.MANV = N.MANV
WHERE NGHD = '10/28/2006'
AND HOTEN = 'NGUYEN VAN B'
--10. In ra danh sách các sản phẩm (MASP,TENSP) được khách hàng có tên “Nguyen Van
A” mua trong tháng 10/2006.
SELECT DISTINCT S.MASP, TENSP
FROM SANPHAM S INNER JOIN CTHD C
ON S.MASP = C.MASP
AND EXISTS(SELECT *
FROM CTHD C INNER JOIN HOADON H
ON C.SOHD = H.SOHD
AND MONTH(NGHD) = 10 AND YEAR(NGHD) = 2006 AND MAKH IN(SELECT H.MAKH
FROM HOADON H INNER JOIN KHACHHANG K
ON H.MAKH = K.MAKH
WHERE HOTEN = 'NGUYEN VAN A') AND S.MASP = C.MASP)
--11. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”.
SELECT SOHD
FROM CTHD
WHERE MASP IN ('BB01', 'BB02')
--12. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”, mỗi sản phẩm
mua với số lượng từ 10 đến 20.
SELECT SOHD
FROM CTHD
WHERE MASP IN ('BB01', 'BB02')
AND SL BETWEEN 10 AND 20
--13. Tìm các số hóa đơn mua cùng lúc 2 sản phẩm có mã số “BB01” và “BB02”, mỗi sản
phẩm mua với số lượng từ 10 đến 20.
SELECT SOHD
FROM CTHD A
WHERE A.MASP = 'BB01'
AND SL BETWEEN 10 AND 20
AND EXISTS(SELECT *
FROM CTHD B
WHERE B.MASP = 'BB02'
AND SL BETWEEN 10 AND 20
AND A.SOHD = B.SOHD)
--14. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” sản xuất hoặc các
sản phẩm được bán ra trong ngày 1/1/2007.
SELECT DISTINCT S.MASP, TENSP
FROM SANPHAM S INNER JOIN CTHD C
ON S.MASP = C.MASP
WHERE NUOCSX = 'TRUNG QUOC'
AND C.SOHD IN(SELECT DISTINCT C2.SOHD
FROM CTHD C2 INNER JOIN HOADON H
ON C2.SOHD = H.SOHD
WHERE NGHD ='1/1/2007')
--15. In ra danh sách các sản phẩm (MASP,TENSP) không bán được.
SELECT S.MASP, TENSP
FROM SANPHAM S
WHERE NOT EXISTS(SELECT *
FROM SANPHAM S2 INNER JOIN CTHD C
ON S2.MASP = C.MASP
AND S2.MASP = S.MASP)
--16. In ra danh sách các sản phẩm (MASP,TENSP) không bán được trong năm 2006.
SELECT S.MASP, TENSP
FROM SANPHAM S
WHERE S.MASP NOT IN(SELECT C.MASP
FROM CTHD C INNER JOIN HOADON H
ON C.SOHD = H.SOHD
WHERE YEAR(NGHD) = 2006)

--17. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” sản xuất không bán
được trong năm 2006.
SELECT S.MASP, TENSP
FROM SANPHAM S
WHERE NUOCSX = 'TRUNG QUOC' AND S.MASP NOT IN(SELECT C.MASP
FROM CTHD C INNER JOIN HOADON H
ON C.SOHD = H.SOHD
WHERE YEAR(NGHD) = 2006)
--18. Tìm số hóa đơn đã mua tất cả các sản phẩm do Singapore sản xuất.
SELECT H.SOHD
FROM HOADON H
WHERE NOT EXISTS(SELECT *
FROM SANPHAM S
WHERE NUOCSX = 'SINGAPORE'
AND NOT EXISTS(SELECT *
FROM CTHD C
WHERE C.SOHD = H.SOHD
AND C.MASP = S.MASP))

SELECT DISTINCT CT.SOHD


FROM CTHD CT
WHERE NOT EXISTS(SELECT *
FROM SANPHAM S
WHERE NUOCSX = 'SINGAPORE'
AND NOT EXISTS(SELECT *
FROM CTHD C
WHERE C.SOHD = CT.SOHD
AND C.MASP = S.MASP))

--19. Tìm số hóa đơn trong năm 2006 đã mua ít nhất tất cả các sản phẩm do Singapore
sản xuất.
SELECT H.SOHD
FROM HOADON H
WHERE YEAR(NGHD) = 2006 AND NOT EXISTS(SELECT *
FROM SANPHAM S
WHERE NUOCSX = 'SINGAPORE'
AND NOT EXISTS(SELECT *
FROM CTHD C
WHERE C.SOHD = H.SOHD
AND C.MASP = S.MASP))
--20. Có bao nhiêu hóa đơn không phải của khách hàng đăng ký thành viên mua?
SELECT COUNT(*)
FROM HOADON H
WHERE MAKH NOT IN(SELECT MAKH
FROM KHACHHANG K
WHERE K.MAKH = H.MAKH)
--21. Có bao nhiêu sản phẩm khác nhau được bán ra trong năm 2006.
SELECT COUNT(DISTINCT MASP)
FROM CTHD C INNER JOIN HOADON H
ON C.SOHD = H.SOHD
WHERE YEAR(NGHD) = 2006
--22. Cho biết trị giá hóa đơn cao nhất, thấp nhất là bao nhiêu ?
SELECT MAX(TRIGIA) AS MAX, MIN(TRIGIA) AS MIN
FROM HOADON
--23. Trị giá trung bình của tất cả các hóa đơn được bán ra trong năm 2006 là bao
nhiêu?
SELECT AVG(TRIGIA) TB
FROM HOADON
--24. Tính doanh thu bán hàng trong năm 2006.
SELECT SUM(TRIGIA) AS DOANHTHU
FROM HOADON
WHERE YEAR(NGHD) = 2006
--25. Tìm số hóa đơn có trị giá cao nhất trong năm 2006.
SELECT SOHD
FROM HOADON
WHERE TRIGIA = (SELECT MAX(TRIGIA)
FROM HOADON)
--26. Tìm họ tên khách hàng đã mua hóa đơn có trị giá cao nhất trong năm 2006.
SELECT HOTEN
FROM KHACHHANG K INNER JOIN HOADON H
ON K.MAKH = H.MAKH
AND SOHD = (SELECT SOHD
FROM HOADON
WHERE TRIGIA = (SELECT MAX(TRIGIA)
FROM HOADON))
--27. In ra danh sách 3 khách hàng (MAKH, HOTEN) có doanh số cao nhất.
SELECT TOP 3 MAKH, HOTEN
FROM KHACHHANG
ORDER BY DOANHSO DESC
--28. In ra danh sách các sản phẩm (MASP, TENSP) có giá bán bằng 1 trong 3 mức giá
cao nhất.
SELECT MASP, TENSP
FROM SANPHAM
WHERE GIA IN (SELECT DISTINCT TOP 3 GIA
FROM SANPHAM
ORDER BY GIA DESC)
--29. In ra danh sách các sản phẩm (MASP, TENSP) do “Thai Lan” sản xuất có giá bằng
1 trong 3 mức giá cao nhất (của tất cả các sản phẩm).
SELECT MASP, TENSP
FROM SANPHAM
WHERE NUOCSX = 'THAI LAN' AND GIA IN (SELECT DISTINCT TOP 3 GIA
FROM SANPHAM
ORDER BY GIA DESC)
--30. In ra danh sách các sản phẩm (MASP, TENSP) do “Trung Quoc” sản xuất có giá
bằng 1 trong 3 mức giá cao nhất (của sản phẩm do “Trung Quoc” sản xuất).
SELECT MASP, TENSP
FROM SANPHAM
WHERE NUOCSX = 'TRUNG QUOC' AND GIA IN (SELECT DISTINCT TOP 3 GIA
FROM SANPHAM
ORDER BY GIA DESC)
--31. * In ra danh sách 3 khách hàng có doanh số cao nhất (sắp xếp theo kiểu xếp
hạng).
SELECT TOP 3 MAKH, HOTEN
FROM KHACHHANG
ORDER BY DOANHSO DESC
--32. Tính tổng số sản phẩm do “Trung Quoc” sản xuất.
SELECT COUNT(DISTINCT MASP)
FROM SANPHAM
WHERE NUOCSX = 'TRUNG QUOC'
--33. Tính tổng số sản phẩm của từng nước sản xuất.
SELECT NUOCSX, COUNT(DISTINCT MASP) AS TONGSOSANPHAM
FROM SANPHAM
GROUP BY NUOCSX
--34. Với từng nước sản xuất, tìm giá bán cao nhất, thấp nhất, trung bình của các
sản phẩm.
SELECT NUOCSX, MAX(GIA) AS MAX, MIN(GIA) AS MIN, AVG(GIA) AS AVG
FROM SANPHAM
GROUP BY NUOCSX
--35. Tính doanh thu bán hàng mỗi ngày.
SELECT NGHD, SUM(TRIGIA) AS DOANHTHU
FROM HOADON
GROUP BY NGHD
--36. Tính tổng số lượng của từng sản phẩm bán ra trong tháng 10/2006.
SELECT MASP, COUNT(DISTINCT MASP) AS TONGSO
FROM SANPHAM
WHERE MASP IN(SELECT MASP
FROM CTHD C INNER JOIN HOADON H
ON C.SOHD = H.SOHD
WHERE MONTH(NGHD) = 10 AND YEAR(NGHD) = 2006)
GROUP BY MASP
--37. Tính doanh thu bán hàng của từng tháng trong năm 2006.
SELECT MONTH(NGHD) AS THANG, SUM(TRIGIA) AS DOANHTHU
FROM HOADON
WHERE YEAR(NGHD) = 2006
GROUP BY MONTH(NGHD)
--38. Tìm hóa đơn có mua ít nhất 4 sản phẩm khác nhau.
SELECT *
FROM HOADON
WHERE SOHD IN(SELECT SOHD
FROM CTHD
WHERE SL >= 4)
--39. Tìm hóa đơn có mua 3 sản phẩm do “Viet Nam” sản xuất (3 sản phẩm khác nhau).
SELECT *
FROM HOADON
WHERE SOHD IN(SELECT SOHD
FROM CTHD C INNER JOIN SANPHAM S
ON C.MASP = S.MASP
WHERE NUOCSX = 'VIET NAM' AND SL >= 3)
--40. Tìm khách hàng (MAKH, HOTEN) có số lần mua hàng nhiều nhất.
SELECT MAKH, HOTEN
FROM KHACHHANG
WHERE MAKH = (SELECT TOP 1 MAKH
FROM HOADON
GROUP BY MAKH
ORDER BY COUNT(DISTINCT SOHD) DESC)
--41. Tháng mấy trong năm 2006, doanh số bán hàng cao nhất ?
SELECT TOP 1 MONTH(NGHD) AS THANG_DOANHSO_MAX
FROM HOADON
WHERE YEAR(NGHD) = 2006
GROUP BY MONTH(NGHD)
ORDER BY SUM(TRIGIA) DESC
--42. Tìm sản phẩm (MASP, TENSP) có tổng số lượng bán ra thấp nhất trong năm 2006.
SELECT MASP, TENSP
FROM SANPHAM
WHERE MASP = (SELECT TOP 1 MASP
FROM CTHD
GROUP BY MASP
ORDER BY SUM(SL) DESC)
--43. *Mỗi nước sản xuất, tìm sản phẩm (MASP,TENSP) có giá bán cao nhất.

--CAU NAY KHO. DAU TIEN TIM MAX GIA CUA NUOCSX
SELECT NUOCSX, MAX(GIA) AS MAX
FROM SANPHAM
GROUP BY NUOCSX

--SAU DO DAT TEN BANG VUA ROI LA B, ROI THUC HIEN KET TRAI. OI HK THANH' VAI~ :))

SELECT B.NUOCSX, MASP, TENSP


FROM (SELECT NUOCSX, MAX(GIA) AS MAX
FROM SANPHAM
GROUP BY NUOCSX) AS B LEFT JOIN SANPHAM S
ON S.GIA = B.MAX
WHERE B.NUOCSX = S.NUOCSX
--44. Tìm nước sản xuất sản xuất ít nhất 3 sản phẩm có giá bán khác nhau.

--45. *Trong 10 khách hàng có doanh số cao nhất, tìm khách hàng có số lần mua hàng
nhiều nhất.
-- DAU TIEN LA TIM 10 KHACH HANG CO DOANH SO CAO NHAT
SELECT TOP 10 MAKH
FROM KHACHHANG
ORDER BY DOANHSO DESC

--DAY LA BANG KHACH HANG VA SO LAN MUA


SELECT MAKH, COUNT(SOHD)
FROM HOADON
GROUP BY MAKH

/*KET TRAI 2 BANG LAI VOI NHAU ROI SAP XEP THEO SO LAN MUA GIAM DAN. TA CHON DUOC
KHACH HANG TRONG 10 NGUOI
MA CO DOANH SO CAO NHAT MA CO SO LAN MUA NHIEU NHAT. LAY DUOC MAKH ROI THI LAY
THONG TIN THOI
*/
SELECT TOP 1 A.MAKH
FROM (SELECT TOP 10 MAKH
FROM KHACHHANG
ORDER BY DOANHSO DESC) AS A
LEFT JOIN
(SELECT MAKH, COUNT(SOHD) AS SL
FROM HOADON
GROUP BY MAKH) AS B
ON A.MAKH = B.MAKH
ORDER BY SL DESC

--DAP SO
SELECT *
FROM KHACHHANG
WHERE MAKH = (SELECT TOP 1 A.MAKH
FROM (SELECT TOP 10 MAKH
FROM KHACHHANG
ORDER BY DOANHSO DESC) AS A
LEFT JOIN
(SELECT MAKH, COUNT(SOHD) AS SL
FROM HOADON
GROUP BY MAKH) AS B
ON A.MAKH = B.MAKH
ORDER BY SL DESC)

_____________________________________________________________________

CREATE DATABASE QuanLyGiaoVu


GO

USE QuanLyGiaoVu
GO

-- Tạo bảng KHOA


CREATE TABLE KHOA
(
MAKHOA VARCHAR(4),
TENKHOA VARCHAR(40),
NGTLAP SMALLDATETIME,
TRGKHOA CHAR(4)
CONSTRAINT PK_KHOA PRIMARY KEY (MAKHOA)
)
GO

-- Tạo bảng MONHOC


CREATE TABLE MONHOC
(
MAMH VARCHAR(10),
TENMH VARCHAR(40),
TCLT TINYINT,
TCTH TINYINT,
MAKHOA VARCHAR(4),
CONSTRAINT PK_MONHOC PRIMARY KEY (MAMH),
)
GO

-- Tạo bảng DIEUKIEN


CREATE TABLE DIEUKIEN
(
MAMH VARCHAR(10),
MAMH_TRUOC VARCHAR(10),
CONSTRAINT PK_DIEUKIEN PRIMARY KEY (MAMH, MAMH_TRUOC)
)
GO

-- Tạo bảng GIAOVIEN


CREATE TABLE GIAOVIEN
(
MAGV CHAR(4),
HOTEN VARCHAR(40),
HOCVI VARCHAR(10),
HOCHAM VARCHAR(10),
GIOITINH VARCHAR(3),
NGSINH SMALLDATETIME,
NGVL SMALLDATETIME,
HESO NUMERIC(4,2),
MUCLUONG MONEY,
MAKHOA VARCHAR(4)
CONSTRAINT PK_GIAOVIEN PRIMARY KEY (MAGV)
)
GO

-- Tạo bảng HOCVIEN


CREATE TABLE HOCVIEN
(
MAHV CHAR(5),
HO VARCHAR(40),
TEN VARCHAR(10),
NGSINH SMALLDATETIME,
GIOITINH VARCHAR(3),
NOISINH VARCHAR(40),
MALOP CHAR(3),
CONSTRAINT PK_HOCVIEN PRIMARY KEY (MAHV)
)
GO

-- Tạo bảng LOP


CREATE TABLE LOP
(
MALOP CHAR(3),
TENLOP VARCHAR(40),
TRGLOP CHAR(5),
SISO TINYINT,
MAGVCN CHAR(4)
CONSTRAINT PK_LOP PRIMARY KEY (MALOP)
)
GO

-- Tạo bảng GIANGDAY


CREATE TABLE GIANGDAY
(
MALOP CHAR(3),
MAMH VARCHAR(10),
MAGV CHAR(4),
HOCKY TINYINT,
NAM SMALLINT,
TUNGAY SMALLDATETIME,
DENNGAY SMALLDATETIME
CONSTRAINT PK_GIANGDAY PRIMARY KEY (MALOP, MAMH),
)
GO

-- Tạo bảng KETQUATHI


CREATE TABLE KETQUATHI
(
MAHV CHAR(5),
MAMH VARCHAR(10),
LANTHI TINYINT,
NGTHI SMALLDATETIME,
DIEM NUMERIC(4,2),
KQUA VARCHAR(10)
CONSTRAINT PK_KETQUATHI PRIMARY KEY (MAHV, MAMH, LANTHI)
)
GO

-- Nhập dữ liệu cho KHOA --


insert into KHOA values('KHMT','Khoa hoc may tinh','6/7/2005','GV01')
insert into KHOA values('HTTT','He thong thong tin','6/7/2005','GV02')
insert into KHOA values('CNPM','Cong nghe phan mem','6/7/2005','GV04')
insert into KHOA values('MTT','Mang va truyen thong','10/20/2005','GV03')
insert into KHOA values('KTMT','Ky thuat may tinh','12/20/2005','')

-- Nhập dữ liệu cho GIAOVIEN --


insert into GIAOVIEN values('GV01','Ho Thanh
Son','PTS','GS','Nam','5/2/1950','1/11/2004',5.00,2250000,'KHMT')
insert into GIAOVIEN values('GV02','Tran Tam
Thanh','TS','PGS','Nam','12/17/1965','4/20/2004',4.50,2025000,'HTTT')
insert into GIAOVIEN values('GV03','Do Nghiem
Phung','TS','GS','Nu','8/1/1950','9/23/2004',4.00,1800000,'CNPM')
insert into GIAOVIEN values('GV04','Tran Nam
Son','TS','PGS','Nam','2/22/1961','1/12/2005',4.50,2025000,'KTMT')
insert into GIAOVIEN values('GV05','Mai Thanh
Danh','ThS','GV','Nam','3/12/1958','1/12/2005',3.00,1350000,'HTTT')
insert into GIAOVIEN values('GV06','Tran Doan
Hung','TS','GV','Nam','3/11/1953','1/12/2005',4.50,2025000,'KHMT')
insert into GIAOVIEN values('GV07','Nguyen Minh
Tien','ThS','GV','Nam','11/23/1971','3/1/2005',4.00,1800000,'KHMT')
insert into GIAOVIEN values('GV08','Le Thi
Tran','KS','','Nu','3/26/1974','3/1/2005',1.69,760500,'KHMT')
insert into GIAOVIEN values('GV09','Nguyen To
Lan','ThS','GV','Nu','12/31/1966','3/1/2005',4.00,1800000,'HTTT')
insert into GIAOVIEN values('GV10','Le Tran Anh
Loan','KS','','Nu','7/17/1972','3/1/2005',1.86,837000,'CNPM')
insert into GIAOVIEN values('GV11','Ho Thanh
Tung','CN','GV','Nam','1/12/1980','5/15/2005',2.67,1201500,'MTT')
insert into GIAOVIEN values('GV12','Tran Van
Anh','CN','','Nu','3/29/1981','5/15/2005',1.69,760500,'CNPM')
insert into GIAOVIEN values('GV13','Nguyen Linh
Dan','CN','','Nu','5/23/1980','5/15/2005',1.69,760500,'KTMT')
insert into GIAOVIEN values('GV14','Truong Minh
Chau','ThS','GV','Nu','11/30/1976','5/15/2005',3.00,1350000,'MTT')
insert into GIAOVIEN values('GV15','Le Ha
Thanh','ThS','GV','Nam','5/4/1978','5/15/2005',3.00,1350000,'KHMT')

-- Nhập dữ liệu cho MONHOC --


insert into MONHOC values('THDC','Tin hoc dai cuong',4,1,'KHMT')
insert into MONHOC values('CTRR','Cau truc roi rac',5,0,'KHMT')
insert into MONHOC values('CSDL','Co so du lieu',3,1,'HTTT')
insert into MONHOC values('CTDLGT','Cau truc du lieu va giai thuat',3,1,'KHMT')
insert into MONHOC values('PTTKTT','Phan tich thiet ke thuat toan',3,0,'KHMT')
insert into MONHOC values('DHMT','Do hoa may tinh',3,1,'KHMT')
insert into MONHOC values('KTMT','Kien truc may tinh',3,0,'KTMT')
insert into MONHOC values('TKCSDL','Thiet ke co so du lieu',3,1,'HTTT')
insert into MONHOC values('PTTKHTTT','Phan tich thiet ke he thong thong
tin',4,1,'HTTT')
insert into MONHOC values('HDH','He dieu hanh',4,0,'KTMT')
insert into MONHOC values('NMCNPM','Nhap mon cong nghe phan mem',3,0,'CNPM')
insert into MONHOC values('LTCFW','Lap trinh C for win',3,1,'CNPM')
insert into MONHOC values('LTHDT','Lap trinh huong doi tuong',3,1,'CNPM')

-- Nhập dữ liệu cho LOP --


insert into LOP values('K11','Lop 1 khoa 1','K1108',11,'GV07')
insert into LOP values('K12','Lop 2 khoa 1','K1205',12,'GV09')
insert into LOP values('K13','Lop 3 khoa 1','K1305',12,'GV14')

-- Nhập dữ liệu cho HOCVIEN --


insert into HOCVIEN values('K1101','Nguyen
Van','A','1/27/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1102','Tran Ngoc','Han','3/1/1986','Nu','Kien
Giang','K11')
insert into HOCVIEN values('K1103','Ha Duy','Lap','4/18/1986','Nam','Nghe
An','K11')
insert into HOCVIEN values('K1104','Tran Ngoc','Linh','3/30/1986','Nu','Tay
Ninh','K11')
insert into HOCVIEN values('K1105','Tran
Minh','Long','2/27/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1106','Le
Nhat','Minh','1/24/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1107','Nguyen Nhu','Nhut','1/27/1986','Nam','Ha
Noi','K11')
insert into HOCVIEN values('K1108','Nguyen Manh','Tam','2/27/1986','Nam','Kien
Giang','K11')
insert into HOCVIEN values('K1109','Phan Thi Thanh','Tam','1/27/1986','Nu','Vinh
Long','K11')
insert into HOCVIEN values('K1110','Le Hoai','Thuong','2/5/1986','Nu','Can
Tho','K11')
insert into HOCVIEN values('K1111','Le Ha','Vinh','12/25/1986','Nam','Vinh
Long','K11')
insert into HOCVIEN values('K1201','Nguyen
Van','B','2/11/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1202','Nguyen Thi
Kim','Duyen','1/18/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1203','Tran Thi
Kim','Duyen','9/17/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1204','Truong My','Hanh','5/19/1986','Nu','Dong
Nai','K12')
insert into HOCVIEN values('K1205','Nguyen
Thanh','Nam','4/17/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1206','Nguyen Thi Truc','Thanh','3/4/1986','Nu','Kien
Giang','K12')
insert into HOCVIEN values('K1207','Tran Thi Bich','Thuy','2/8/1986','Nu','Nghe
An','K12')
insert into HOCVIEN values('K1208','Huynh Thi Kim','Trieu','4/8/1986','Nu','Tay
Ninh','K12')
insert into HOCVIEN values('K1209','Pham
Thanh','Trieu','2/23/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1210','Ngo
Thanh','Tuan','2/14/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1211','Do Thi','Xuan','3/9/1986','Nu','Ha Noi','K12')
insert into HOCVIEN values('K1212','Le Thi
Phi','Yen','3/12/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1301','Nguyen Thi Kim','Cuc','6/9/1986','Nu','Kien
Giang','K13')
insert into HOCVIEN values('K1302','Truong Thi My','Hien','3/18/1986','Nu','Nghe
An','K13')
insert into HOCVIEN values('K1303','Le Duc','Hien','3/12/1986','Nam','Tay
Ninh','K13')
insert into HOCVIEN values('K1304','Le
Quang','Hien','4/18/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1305','Le Thi','Huong','3/27/1986','Nu','TpHCM','K13')
insert into HOCVIEN values('K1306','Nguyen Thai','Huu','3/30/1986','Nam','Ha
Noi','K13')
insert into HOCVIEN values('K1307','Tran
Minh','Man','5/28/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1308','Nguyen Hieu','Nghia','4/8/1986','Nam','Kien
Giang','K13')
insert into HOCVIEN values('K1309','Nguyen Trung','Nghia','1/18/1987','Nam','Nghe
An','K13')
insert into HOCVIEN values('K1310','Tran Thi Hong','Tham','4/22/1986','Nu','Tay
Ninh','K13')
insert into HOCVIEN values('K1311','Tran
Minh','Thuc','4/4/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1312','Nguyen Thi
Kim','Yen','9/7/1986','Nu','TpHCM','K13')

-- Nhập dữ liệu cho GIANGDAY --


insert into GIANGDAY values('K11','THDC','GV07',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K12','THDC','GV06',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K13','THDC','GV15',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K11','CTRR','GV02',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K12','CTRR','GV02',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K13','CTRR','GV08',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K11','CSDL','GV05',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K12','CSDL','GV09',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K13','CTDLGT','GV15',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K13','CSDL','GV05',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K13','DHMT','GV07',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K11','CTDLGT','GV15',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K12','CTDLGT','GV15',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K11','HDH','GV04',1,2007,'1/2/2007','2/18/2007')
insert into GIANGDAY values('K12','HDH','GV04',1,2007,'1/2/2007','3/20/2007')
insert into GIANGDAY values('K11','DHMT','GV07',1,2007,'2/18/2007','3/20/2007')

-- NHẬP DỮ LIỆU CHO DIEUKIEN --


insert into DIEUKIEN values('CSDL','CTRR')
insert into DIEUKIEN values('CSDL','CTDLGT')
insert into DIEUKIEN values('CTDLGT','THDC')
insert into DIEUKIEN values('PTTKTT','THDC')
insert into DIEUKIEN values('PTTKTT','CTDLGT')
insert into DIEUKIEN values('DHMT','THDC')
insert into DIEUKIEN values('LTHDT','THDC')
insert into DIEUKIEN values('PTTKHTTT','CSDL')

-- Nhập dữ liệu cho KETQUATHI --


insert into KETQUATHI values('K1101','CSDL',1,'7/20/2006',10.00,'Dat')
insert into KETQUATHI values('K1101','CTDLGT',1,'12/28/2006',9.00,'Dat')
insert into KETQUATHI values('K1101','THDC',1,'5/20/2006',9.00,'Dat')
insert into KETQUATHI values('K1101','CTRR',1,'5/13/2006',9.50,'Dat')
insert into KETQUATHI values('K1102','CSDL',1,'7/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1102','CSDL',2,'7/27/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1102','CSDL',3,'8/10/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',1,'12/28/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',2,'1/5/2007',4.00,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',3,'1/15/2007',6.00,'Dat')
insert into KETQUATHI values('K1102','THDC',1,'5/20/2006',5.00,'Dat')
insert into KETQUATHI values('K1102','CTRR',1,'5/13/2006',7.00,'Dat')
insert into KETQUATHI values('K1103','CSDL',1,'7/20/2006',3.50,'Khong Dat')
insert into KETQUATHI values('K1103','CSDL',2,'7/27/2006',8.25,'Dat')
insert into KETQUATHI values('K1103','CTDLGT',1,'12/28/2006',7.00,'Dat')
insert into KETQUATHI values('K1103','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1103','CTRR',1,'5/13/2006',6.50,'Dat')
insert into KETQUATHI values('K1104','CSDL',1,'7/20/2006',3.75,'Khong Dat')
insert into KETQUATHI values('K1104','CTDLGT',1,'12/28/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',1,'5/13/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',2,'5/20/2006',3.50,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',3,'6/30/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1201','CSDL',1,'7/20/2006',6.00,'Dat')
insert into KETQUATHI values('K1201','CTDLGT',1,'12/28/2006',5.00,'Dat')
insert into KETQUATHI values('K1201','THDC',1,'5/20/2006',8.50,'Dat')
insert into KETQUATHI values('K1201','CTRR',1,'5/13/2006',9.00,'Dat')
insert into KETQUATHI values('K1202','CSDL',1,'7/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1202','CTDLGT',1,'12/28/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTDLGT',2,'1/5/2007',5.00,'Dat')
insert into KETQUATHI values('K1202','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','THDC',2,'5/27/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',1,'5/13/2006',3.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',2,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',3,'6/30/2006',6.25,'Dat')
insert into KETQUATHI values('K1203','CSDL',1,'7/20/2006',9.25,'Dat')
insert into KETQUATHI values('K1203','CTDLGT',1,'12/28/2006',9.50,'Dat')
insert into KETQUATHI values('K1203','THDC',1,'5/20/2006',10.00,'Dat')
insert into KETQUATHI values('K1203','CTRR',1,'5/13/2006',10.00,'Dat')
insert into KETQUATHI values('K1204','CSDL',1,'7/20/2006',8.50,'Dat')
insert into KETQUATHI values('K1204','CTDLGT',1,'12/28/2006',6.75,'Dat')
insert into KETQUATHI values('K1204','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1204','CTRR',1,'5/13/2006',6.00,'Dat')
insert into KETQUATHI values('K1301','CSDL',1,'12/20/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1301','CTDLGT',1,'7/25/2006',8.00,'Dat')
insert into KETQUATHI values('K1301','THDC',1,'5/20/2006',7.75,'Dat')
insert into KETQUATHI values('K1301','CTRR',1,'5/13/2006',8.00,'Dat')
insert into KETQUATHI values('K1302','CSDL',1,'12/20/2006',6.75,'Dat')
insert into KETQUATHI values('K1302','CTDLGT',1,'7/25/2006',5.00,'Dat')
insert into KETQUATHI values('K1302','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1302','CTRR',1,'5/13/2006',8.50,'Dat')
insert into KETQUATHI values('K1303','CSDL',1,'12/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',1,'7/25/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',2,'8/7/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',3,'8/15/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1303','THDC',1,'5/20/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1303','CTRR',1,'5/13/2006',3.25,'Khong Dat')
insert into KETQUATHI values('K1303','CTRR',2,'5/20/2006',5.00,'Dat')
insert into KETQUATHI values('K1304','CSDL',1,'12/20/2006',7.75,'Dat')
insert into KETQUATHI values('K1304','CTDLGT',1,'7/25/2006',9.75,'Dat')
insert into KETQUATHI values('K1304','THDC',1,'5/20/2006',5.50,'Dat')
insert into KETQUATHI values('K1304','CTRR',1,'5/13/2006',5.00,'Dat')
insert into KETQUATHI values('K1305','CSDL',1,'12/20/2006',9.25,'Dat')
insert into KETQUATHI values('K1305','CTDLGT',1,'7/25/2006',10.00,'Dat')
insert into KETQUATHI values('K1305','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1305','CTRR',1,'5/13/2006',10.00,'Dat')

-- Tạo khóa ngoại


ALTER TABLE LOP ADD CONSTRAINT FK_TRGLOP FOREIGN KEY (TRGLOP) REFERENCES
HOCVIEN(MAHV)
ALTER TABLE LOP ADD CONSTRAINT FK_MAGVCN FOREIGN KEY (MAGVCN) REFERENCES
GIAOVIEN(MAGV)
ALTER TABLE HOCVIEN ADD CONSTRAINT FK_LOP FOREIGN KEY (MALOP) REFERENCES LOP(MALOP)
ALTER TABLE GIAOVIEN ADD CONSTRAINT FK_MAKHOA FOREIGN KEY (MAKHOA) REFERENCES
KHOA(MAKHOA)
ALTER TABLE GIANGDAY ADD CONSTRAINT FK_MAMH FOREIGN KEY (MAMH) REFERENCES
MONHOC(MAMH)
ALTER TABLE KHOA ADD CONSTRAINT FK_MAGV FOREIGN KEY (MAGV) REFERENCES
GIAOVIEN(MAGV)
ALTER TABLE MONHOC ADD CONSTRAINT FK_MAKHOA_2 FOREIGN KEY (MAKHOA) REFERENCES
KHOA(MAKHOA)
ALTER TABLE DIEUKIEN ADD CONSTRAINT FK_MAMH_TRUOC FOREIGN KEY (MAMH_TRUOC)
REFERENCES MONHOC(MAMH)
ALTER TABLE DIEUKIEN ADD CONSTRAINT FK_MAMH_2 FOREIGN KEY (MAMH) REFERENCES
MONHOC(MAMH)
ALTER TABLE KETQUATHI ADD CONSTRAINT FK_MAHV FOREIGN KEY (MAHV) REFERENCES
HOCVIEN(MAHV)

-- Thêm vào 3 thuộc tính GHICHU, DIEMTB, XEPLOAI cho quan hệ HOCVIEN
ALTER TABLE HOCVIEN ADD GHICHU VARCHAR(50), DIEMTB NUMERIC(4,2), XEPLOAI
VARCHAR(10)

-- I.2 Mã học viên là một chuỗi 5 ký tự, 3 ký tự đầu là mã lớp, 2 ký tự cuối cùng
là số thứ tự học viên trong lớp
CREATE TRIGGER trg_ins_upd_HOCVIEN
ON HOCVIEN
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @SISO INT, @MAHV VARCHAR(5), @MALOP VARCHAR(3)

SELECT @MAHV = MAHV, @MALOP = MALOP FROM INSERTED


SELECT @SISO = SISO FROM LOP WHERE LOP.MALOP = @MALOP

IF LEFT(@MAHV,3) <> @MALOP


BEGIN
PRINT('3 ki tu dau cua MAHV phai la MALOP')
ROLLBACK TRANSACTION
END

ELSE IF CAST(RIGHT(@MAHV, 2) AS INT) NOT BETWEEN 1 AND @SISO


BEGIN
PRINT('2 ki tu cuoi cua MAHV phai la so thu tu hoc vien trong lop')
ROLLBACK TRANSACTION
END
END

-- I.3 Thuộc tính GIOITINH chỉ có giá trị là “Nam” hoặc “Nu”
ALTER TABLE HOCVIEN ADD CONSTRAINT CHECK_GTHV CHECK (GIOITINH IN ('Nam', 'Nu'))
ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_GTGV CHECK (GIOITINH IN ('Nam', 'Nu'))

-- 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)
ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_DIEM CHECK
(
DIEM BETWEEN 0 AND 10
AND RIGHT(CAST(DIEM AS VARCHAR), 3) LIKE '.__'
)

-- I.5 Kết quả thi là “Dat” nếu điểm từ 5 đến 10 và “Khong dat” nếu điểm nhỏ hơn 5
ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_KETQUA CHECK
(
(KQUA = 'Dat' AND DIEM BETWEEN 5 AND 10)
OR (KQUA = 'Khong dat' AND DIEM < 5)
)

-- I.6 Học viên thi một môn tối đa 3 lần


ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_LANTHI CHECK (LANTHI <= 3)

-- I.7 Học kỳ chỉ có giá trị từ 1 đến 3


ALTER TABLE GIANGDAY ADD CONSTRAINT CHECK_HOCKY CHECK (HOCKY BETWEEN 1 AND 3)

-- I.8 Học vị của giáo viên chỉ có thể là “CN”, “KS”, “Ths”, ”TS”, ”PTS”
ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_HOCVI CHECK (HOCVI IN ('CN', 'KS', 'Ths',
'TS', 'PTS'))

-- I.9 Lớp trưởng của một lớp phải là học viên của lớp đó
CREATE TRIGGER trg_ins_udt_LopTruong ON LOP
FOR INSERT, UPDATE
AS
BEGIN
IF NOT EXISTS (SELECT * FROM INSERTED I, HOCVIEN HV
WHERE I.TRGLOP = HV.MAHV AND I.MALOP = HV.MALOP)
BEGIN
PRINT 'Error: Lop truong cua mot lop phai la hoc vien cua lop do'
ROLLBACK TRANSACTION
END
END

CREATE TRIGGER trg_del_HOCVIEN ON HOCVIEN


FOR DELETE
AS
BEGIN
IF EXISTS (SELECT * FROM DELETED D, INSERTED I, LOP L
WHERE D.MAHV = L.TRGLOP AND D.MALOP = L.MALOP)
BEGIN
PRINT 'Error: Hoc vien hien tai dang la truong lop'
ROLLBACK TRANSACTION
END
END

-- I.11 Học viên ít nhất là 18 tuổi


ALTER TABLE HOCVIEN ADD CONSTRAINT CHECK_TUOI CHECK (YEAR(GETDATE()) - YEAR(NGSINH)
>= 18)

-- I.12 Giảng dạy một môn học ngày bắt đầu (TUNGAY) phải nhỏ hơn ngày kết thúc
(DENNGAY)
ALTER TABLE GIANGDAY ADD CONSTRAINT CHECK_GIANGDAY CHECK (TUNGAY < DENNGAY)

-- I.13 Giáo viên khi vào làm ít nhất là 22 tuổi


ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_TUOILAM CHECK (YEAR(NGVL) - YEAR(NGSINH)
>= 22)

-- I.14 Tất cả các môn học đều có số tín chỉ lý thuyết và tín chỉ thực hành chênh
lệch nhau không quá 3
ALTER TABLE MONHOC ADD CONSTRAINT CHECK_TINCHI CHECK (ABS(TCLT - TCTH) <= 3)

-- II.1 Tăng hệ số lương thêm 0.2 cho những giáo viên là trưởng khoa
UPDATE GIAOVIEN
SET HESO = 0.2 + HESO
WHERE MAGV IN (SELECT TRGKHOA FROM KHOA)

-- 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)
UPDATE HocVien
SET DiemTB =
(
SELECT AVG(Diem)
FROM KetQuaThi
WHERE LanThi = (SELECT MAX(LanThi) FROM KetQuaThi KQ WHERE MaHV =
KetQuaThi.MaHV GROUP BY MaHV)
GROUP BY MaHV
HAVING MaHV = HocVien.MaHV
)

-- 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
UPDATE HOCVIEN
SET GHICHU = 'Cam thi'
WHERE MAHV IN
(
SELECT MAHV
FROM KETQUATHI
WHERE LANTHI = 3 AND DIEM < 5
)

-- 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”

UPDATE HOCVIEN
SET XEPLOAI =
(
CASE
WHEN DIEMTB >= 9 THEN 'XS'
WHEN DIEMTB >= 8 AND DIEMTB < 9 THEN 'G'
WHEN DIEMTB >= 6.5 AND DIEMTB < 8 THEN 'K'
WHEN DIEMTB >= 5 AND DIEMTB < 6.5 THEN 'TB'
WHEN DIEMTB < 5 THEN 'Y'
END
)
-- III.1 In ra danh sách (mã học viên, họ tên, ngày sinh, mã lớp) lớp trưởng của
các lớp
SELECT
MaHV, (Ho+Ten) HoTen, NgSinh, HocVien.MaLop
FROM
HocVien, Lop
WHERE
HocVien.MaHV = Lop.TrgLop

-- III.2 In ra bảng điểm khi thi (mã học viên, họ tên , lần thi, điểm số) môn CTRR
của lớp “K12”, sắp xếp theo tên, họ học viên
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen, LanThi, Diem
FROM
KetQuaThi, HocVien
WHERE
KetQuaThi.MaHV = HocVien.MaHV
AND MaMH = 'CTRR'
AND MaLop = 'K12'
ORDER BY
Ten, Ho

-- III.3 In ra danh sách những học viên (mã học viên, họ tên) và những môn học mà
học viên đó thi lần thứ nhất đã đạt
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen, TenMH
FROM
KetQuaThi, MonHoc, HocVien
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND KetQuaThi.MaHV = HocVien.MaHV
AND LanThi = 1 AND KQua = 'Dat'

-- III.4 In ra danh sách học viên (mã học viên, họ tên) của lớp “K11” thi môn CTRR
không đạt (ở lần thi 1)
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop = 'K11'
AND MaMH = 'CTRR'
AND KQua = 'Khong Dat'
AND LanThi = 1

-- III.5 Danh sách học viên (mã học viên, họ tên) của lớp “K” thi môn CTRR không
đạt (ở tất cả các lần thi)
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop like 'K%'
AND MaMH = 'CTRR'
AND NOT EXISTS
(SELECT * FROM KetQuaThi
WHERE
KQua = 'Dat'
AND MaMH = 'CTRR'
AND MaHV = HocVien.MaHV)

-- III.6 Tìm tên những môn học mà giáo viên có tên “Tran Tam Thanh” dạy trong học
kỳ 1 năm 2006
SELECT DISTINCT TenMH
FROM
MonHoc, GiaoVien, GiangDay
WHERE
MonHoc.MaMH = GiangDay.MaMH
AND GiaoVien.MaGV = GiangDay.MaGV
AND HoTen = 'Tran Tam Thanh'
AND HocKy = 1 AND Nam = 2006

-- III.7 Tìm những môn học (mã môn học, tên môn học) mà giáo viên chủ nhiệm lớp
“K11” dạy trong học kỳ 1 năm 2006
SELECT DISTINCT
MonHoc.MaMH, TenMH
FROM
MonHoc, Lop, GiangDay
WHERE
GiangDay.MaMH = MonHoc.MaMH
AND GiangDay.MaGV = Lop.MaGVCN
AND Lop.MaLop = 'K11'
AND HocKy = 1 AND Nam = 2006

-- III.8 Tìm họ tên lớp trưởng của các lớp mà giáo viên có tên “Nguyen To Lan” dạy
môn “Co So Du Lieu”
SELECT DISTINCT
(HO+' '+TEN) HOTEN
FROM
HocVien, Lop, GiaoVien, GiangDay, MonHoc
WHERE
Lop.TrgLop = HocVien.MaHV
AND GiangDay.MaLop = Lop.MaLop
AND GiangDay.MaGV = GiaoVien.MaGV
AND GiangDay.MaMH = MonHoc.MaMH
AND HoTen = 'Nguyen To Lan'
AND TenMH = 'Co So Du Lieu'

-- III.9 In ra danh sách những môn học (mã môn học, tên môn học) phải học liền
trước môn “Co So Du Lieu”
SELECT
MonHocTruoc.MaMH, MonHocTruoc.TenMH
FROM
MonHoc, MonHoc AS MonHocTruoc, DieuKien
WHERE
MonHoc.MaMH = DieuKien.MaMH
AND MonHocTruoc.MaMH = DieuKien.MaMH_Truoc
AND MonHoc.TenMH = 'Co So Du Lieu'

-- III.10 Môn “Cau Truc Roi Rac” là môn bắt buộc phải học liền trước những môn học
(mã môn học, tên môn học) nào
SELECT
MonHoc.MaMH, MonHoc.TenMH
FROM
MonHoc, MonHoc AS MonHocTruoc, DieuKien
WHERE
MonHoc.MaMH = DieuKien.MaMH
AND MonHocTruoc.MaMH = DieuKien.MaMH_Truoc
AND MonHocTruoc.TenMH = 'Cau Truc Roi Rac'

-- III.11 Tìm họ tên giáo viên dạy môn CTRR cho cả hai lớp “K11” và “K12” trong
cùng học kỳ 1 năm 2006
SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaLop = 'K11'
AND HocKy = 1 AND Nam = 2006
INTERSECT
(SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaLop = 'K12' AND HocKy = 1 AND Nam = 2006)

-- III.12 Tìm những học viên (mã học viên, họ tên) thi không đạt môn CSDL ở lần thi
thứ 1 nhưng chưa thi lại môn này
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaMH = 'CSDL' AND LanThi = 1 AND KQua = 'Khong Dat'
AND NOT EXISTS (SELECT * FROM KetQuaThi WHERE LanThi > 1 AND KetQuaThi.MaHV =
HocVien.MaHV)

-- III.13 Tìm giáo viên (mã giáo viên, họ tên) không được phân công giảng dạy bất
kỳ môn học nào
SELECT MaGV, HoTen
FROM GiaoVien
WHERE MaGV NOT IN (SELECT MaGV FROM GiangDay)

-- III.14 Tìm giáo viên (mã giáo viên, họ tên) không được phân công giảng dạy bất
kỳ môn học nào thuộc khoa giáo viên đó phụ trách
SELECT MaGV, HoTen
FROM GiaoVien
WHERE NOT EXISTS
(
SELECT *
FROM MonHoc
WHERE MonHoc.MaKhoa = GiaoVien.MaKhoa
AND NOT EXISTS
(
SELECT *
FROM GiangDay
WHERE GiangDay.MaMH = MonHoc.MaMH
AND GiangDay.MaGV = GiaoVien.MaGV
)
)

-- III.15 Tìm họ tên các học viên thuộc lớp “K11” thi một môn bất kỳ quá 3 lần vẫn
“Khong dat” hoặc thi lần thứ 2 môn CTRR được 5 điểm
SELECT DISTINCT
(Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop = 'K11'
AND ((LanThi = 2 AND Diem = 5)
OR HocVien.MaHV IN
(
SELECT DISTINCT MaHV
FROM KetQuaThi
WHERE KQua = 'Khong Dat'
GROUP BY MaHV, MaMH
HAVING COUNT(*) > 3
))

-- III.16 Tìm họ tên giáo viên dạy môn CTRR cho ít nhất hai lớp trong cùng một học
kỳ của một năm học
SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaMH = 'CTRR'
GROUP BY
GiaoVien.MaGV, HoTen, HocKy
HAVING
COUNT(*) >= 2

-- III.17 Danh sách học viên và điểm thi môn CSDL (chỉ lấy điểm của lần thi sau
cùng)
SELECT
HocVien.*, Diem AS 'Điểm thi CSDL sau cùng'
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaMH = 'CSDL'
AND LanThi =
(
SELECT MAX(LanThi)
FROM KetQuaThi
WHERE MaMH = 'CSDL' AND KetQuaThi.MaHV = HocVien.MaHV
GROUP BY MaHV
)

-- III.18 Danh sách học viên và điểm thi môn “Co So Du Lieu” (chỉ lấy điểm cao nhất
của các lần thi)
SELECT
HocVien.*, Diem AS 'Điểm thi CSDL cao nhất'
FROM
HocVien, KetQuaThi, MonHoc
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND KetQuaThi.MaMH = MonHoc.MaMH
AND TenMH = 'Co So Du Lieu'
AND Diem =
(
SELECT MAX(Diem)
FROM KetQuaThi, MonHoc
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND MaHV = HocVien.MaHV
AND TenMH = 'Co So Du Lieu'
GROUP BY MaHV
)

-- III.19 Khoa nào (mã khoa, tên khoa) được thành lập sớm nhất
SELECT MaKhoa, TenKhoa
FROM Khoa
WHERE NgTLap = (SELECT MIN(NgTLap) FROM Khoa)

-- III.20 Có bao nhiêu giáo viên có học hàm là “GS” hoặc “PGS”
SELECT COUNT(*) 'Số giáo viên có học hàm GS hoặc PGS'
FROM GiaoVien
WHERE HocHam IN ('GS', 'PGS')

-- III.21 Thống kê có bao nhiêu giáo viên có học vị là “CN”, “KS”, “Ths”, “TS”,
“PTS” trong mỗi khoa.
SELECT MaKhoa, HocVi, COUNT(*) 'Số giáo viên'
FROM GiaoVien
GROUP BY MaKhoa, HocVi
ORDER BY MaKhoa

-- III.22 Mỗi môn học thống kê số lượng học viên theo kết quả (đạt và không đạt).
SELECT MaMH, KQua, COUNT(*) 'Số học viên'
FROM KetQuaThi
GROUP BY MaMH, KQua
ORDER BY MAMH

-- III.23 Tìm giáo viên (mã giáo viên, họ tên) là giáo viên chủ nhiệm của một lớp,
đồng thời dạy cho lớp đó ít nhất một môn học.
SELECT DISTINCT
GiaoVien.MaGV, HoTen
FROM
GiaoVien, Lop, GiangDay
WHERE
GiangDay.MaLop = Lop.MaLop
AND GiangDay.MaGV = GiaoVien.MaGV
AND GiaoVien.MaGV = Lop.MaGVCN

-- III.24 Tìm họ tên lớp trưởng của lớp có sỉ số cao nhất


SELECT
Ho+' '+Ten AS 'Họ tên lớp trưởng của lớp có sỉ số cao nhất'
FROM
HocVien, Lop
WHERE
HocVien.MaHV = Lop.TrgLop
AND Lop.SiSo = (SELECT MAX(SiSo) FROM Lop)

-- III.25 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)
SELECT Ho + ' ' + Ten 'Họ tên trưởng lớp thi không đạt quá 3 môn'
FROM
HocVien, Lop, KetQuaThi
WHERE
HocVien.MAHV = Lop.TrgLop
AND HocVien.MaHV = KetQuaThi.MaHV
AND KQua = 'Khong Dat'
GROUP BY
TrgLop, Ho, Ten
HAVING
COUNT(*) > 3

-- III.26 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.
-- Cách 1:
SELECT TOP 1 WITH TIES
HocVien.MaHV, (Ho+' '+Ten) AS HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
HocVien.MaHV, Ho, Ten
ORDER BY
COUNT(*) DESC

-- Cách 2:
SELECT
HocVien.MaHV, Ho+' '+Ten AS HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
HocVien.MaHV, Ho, Ten
HAVING
COUNT(*) >= ALL(SELECT COUNT(*) FROM KetQuaThi WHERE Diem >= 9 GROUP BY MaHV)

-- III.27 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.
SELECT
MaLop, MaHV, HoTen
FROM
(
SELECT
MaLop, HocVien.MaHV, (Ho+' '+Ten) HoTen, COUNT(*) SoLuongDiem, RANK()
OVER (PARTITION BY MaLop ORDER BY COUNT(*) DESC) AS XepHang
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
MaLop, HocVien.MaHV, Ho, Ten
) AS A
WHERE
A.XepHang = 1

-- III.28 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.
SELECT MaGV, COUNT(DISTINCT MaMH) 'Số môn học', COUNT(DISTINCT MALOP) 'Số lớp'
FROM GiangDay
GROUP BY MaGV

-- III.29 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.
SELECT HocKy, Nam, A.MaGV, HoTen
FROM GiaoVien,
(
SELECT
HocKy, Nam, MaGV, RANK() OVER (PARTITION BY HocKy, Nam ORDER BY
COUNT(*) DESC) AS XepHang
FROM GiangDay
GROUP BY HocKy, Nam, MaGV
) AS A
WHERE
A.MAGV = GiaoVien.MAGV
AND XepHang = 1
ORDER BY
Nam, HocKy

-- III.30 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.
-- Cách 1:
SELECT TOP 1 WITH TIES
MonHoc.MaMH, TenMH
FROM
MonHoc, KetQuaThi
WHERE
MonHoc.MaMH = KetQuaThi.MaMH
AND LanThi = 1
AND KQua = 'Khong Dat'
GROUP BY
MonHoc.MaMH, TenMH
ORDER BY
COUNT(*) DESC

-- Cách 2:
SELECT
MonHoc.MaMH, TenMH
FROM
MonHoc, KetQuaThi
WHERE
MonHoc.MaMH = KetQuaThi.MaMH
AND LanThi = 1
AND KQua = 'Khong Dat'
GROUP BY
MonHoc.MaMH, TenMH
HAVING
COUNT(*) >= ALL (SELECT COUNT(*) FROM KetQuaThi WHERE LanThi = 1 AND KQua =
'Khong Dat' GROUP BY MAMH)

-- III.31 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)
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE LanThi = 1
AND KQua = 'Khong Dat'
AND MaHV = HocVien.MaHV
)

-- III.32 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).
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE LanThi = (SELECT MAX(LanThi) FROM KetQuaThi WHERE MaHV =
HocVien.MaHV GROUP BY MaHV)
AND KQua = 'Khong Dat'
AND MaHV = HocVien.MaHV
)

-- III.33 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)
SELECT MaHV, (Ho+' '+Ten) HoTen
FROM HocVien
WHERE NOT EXISTS
(
SELECT *
FROM MonHoc
WHERE NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND KetQuaThi.MaHV = HocVien.MaHV
AND LanThi = 1 AND KQua = 'Dat'
)
)

-- III.35 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).
SELECT MaMH, MaHV, HoTen
FROM
(
SELECT
MaMH, HocVien.MaHV, (Ho+' '+Ten) HoTen, RANK() OVER (PARTITION BY MaMH
ORDER BY MAX(Diem) DESC) AS XepHang
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND LanThi = (SELECT MAX(LanThi) FROM KetQuaThi WHERE MaHV =
HocVien.MaHV GROUP BY MaHV)
GROUP BY
MaMH, HocVien.MaHV, Ho, Ten
) AS A
WHERE XepHang = 1

You might also like