Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

--Cau 1: Liệt kê các sinh viên học ở khoa toán

--Thuộc tính: TENSV,MAKHOA


--Quan hệ: SVIEN
--Điều kiện: MAKHOA='TOAN'

go
select TENSV
from SVIEN
where MAKHOA='TOAN'

--Cau 2: Liệt kê tên môn học và số tín chỉ


--Thuộc tính: TENMH, TINCHI
--Quan hệ: MHOC
--Điều kiện:

go
select TENMH,TINCHI
from MHOC

--Cau 3: Liệt kê kết quả học tập của SV có mã sinh viên


K26.0008
--Thuộc tính: MASV,MAHP,DIEM
--Quan hệ: KQUA
--Điều kiện: MASV = 'K26.0008'

go
select MASV,MAHP,DIEM
from KQUA
where MASV='K26.0008'

--Cau 4: Liệt kê tên sinh viên và mã môn học mà sv đó


đăng ký với kết quả cuối khóa trên 7 điểm
--Thuộc tính: TENSV, MAHP, DIEM
--Quan hệ: KQUA, SVIEN, HPHAN
--Điều kiện: DIEM>=7

go
select TENSV,MAMH
from KQUA Q,SVIEN S,HPHAN H
where (Q.DIEM>=7 and ((Q.MAHP = H.MAHP) and (
S.MASV=Q.MASV )))

--Cau 5: Liệt kê sinh viên thuộc về khoa có phụ trách


môn toán rời rạc
--Thuộc tính: TENSV, TENMH, MAKHOA
--Quan hệ: MHOC,SVIEN
--Điều kiện: TENMH = ‘Toán rời rạc’

go
select TENSV
from MHOC M,SVIEN S
where (TENMH = 'Toán rời rạc' and ( M.MAKHOA =
S.MAKHOA))

--Cau 6: Liệt kê tên SV, tên môn học và điểm số của SV


đó ở HK 1 năm 1996
--Thuộc tính: TENSV,TENMH,DIEM,HOCKY,NAM,MAMH,MAHP
--Quan hệ: HPHAN H,SVIEN S,KQUA K,MHOC M
--Điều kiện: HOCKY =1, NAM =1996

go
select TENSV,TENMH,DIEM
from HPHAN H,SVIEN S,KQUA K,MHOC M
where ((hocky =1) and (H.NAM = 1996) and
(H.MAMH=M.MAMH) and (H.MAHP=K.MAHP) and
(K.MASV=S.MASV))
go

--Cau 7: Liet ke mon hoc phai hoc ngay truoc mon CSDL
--Thuộc tính: TENMH, MAMH, MAMH_TRUOC
--Quan hệ: MHOC, DKIEN
--Điều kiện: Mhoc phai hoc truoc mon csdl

select tenmh
from mhoc
where mamh in
(select mamh_truoc
from mhoc m, dkien d
where tenmh='Cơ sở dữ liệu' and m.mamh=d.mamh)

--Cau 8: Liet ke mon hoc phai hoc sau mon CSDL


--Thuộc tính: TENMH, MAMH, MAMH_TRUOC
--Quan hệ: MHOC, DKIEN
--Điều kiện: Mhoc phai hoc sau mon csdl

go
select tenmh
from mhoc
where mamh in
(select d.mamh
from mhoc m, dkien d
where tenmh='Cơ sở dữ liệu' and d.mamh_truoc = m.mamh)

--Cau 9: Liet ke mon hoc phai hoc truoc mon co so tin


chi nho hon bang 4
--Thuộc tính: TTENMH, MAMH, MAMH_TRUOC,TINCHI
--Quan hệ: MHOC, DKIEN
--Điều kiện: môn học trước của môn có số tín chỉ nhỏ
hơn bằng 4
select *
from mhoc
where mamh in
(select mamh_truoc
from mhoc m, dkien d
where tinchi<=4 and m.mamh=d.mamh)

--Cau 10: Liet ke DS sinh vien, diem cua mon csdl o hk


1 nam 1996 va duoc sap xep theo thu tu giam dan neu
trung thi sap theo ten tang dan
--Thuộc tính: TENSV, DIEM,HOCKY,NAM,MANH,MAHP
--Quan hệ: SVIEN, KQUA,HPHAN,MHOC
--Điều kiện: co hoc o hk 1 nam 1996 voi mon csdl

go
select TENSV,DIEM
from svien s,kqua k,hphan h,mhoc m
where ((TENMH='Cơ sở dữ liệu') and (h.HOCKY =1 ) and
(h.nam =1996) and (m.mamh = h.mamh) and (k.mahp=h.mahp)
and (k.masv=s.masv))
order by diem desc ,s.tensv

--Cau 11: Liệt kê mã HP và số lượng sinh viên đăng ký


theo từng học phần
--Thuộc tính: MAHP,MASV
--Quan hệ: Kqua
--Điều kiện:

go
select MAHP, count (masv) as SL
from kqua
group by mahp

--Cau 12: Liệt kê tên Sinh viên và điểm trung bình của
SV đó ở từng học kỳ của từng niên học
--Thuộc tính: TENSV, MASV, HOCKY, NAM, DIEM
--Quan hệ: KQUA, SVIEN, HPHAN
--Điều kiện: điểm trong từng học kỳ của từng niên học

go
select Tensv,avg(diem) as DTB
from kqua k, svien s, hphan h
where k.masv=s.masv and k.mahp = h.mahp
group by k.masv,tensv,hocky,h.nam

--Cau 13: Liệt kê sinh viên đạt điểm cao nhất


--Thuộc tính: DIEM, MASV
--Quan hệ: SVIEN, KQUA
--Điều kiện:là sinh viên đạt điểm cao nhất

go
select tensv, diem
from svien s,kqua k
where diem>=all(select diem from kqua) and
kqua.masv=svien.masv
go
--Cau 14: Liệt kê tên sinh viên đạt điểm cao nhất ở học
kỳ một năm 1996 của môn CSDL
--Thuộc tính: MAMH, MAHP, HOCKY, NAM, DIEM, TENMH
--Quan hệ: HPHAN, SVIEN, KQUA, MHOC
--Điều kiện: Điểm lớn nhất của môn CSDL ở HK 1 năm 1996

select TENSV
from HPHAN H,SVIEN S,KQUA K,MHOC M
where ((hocky =1) and (H.NAM = 1996) and
(H.MAMH=M.MAMH) and (H.MAHP=.MAHP) and (K.MASV=S.MASV))
and (diem>=all(select diem from kqua)) and tenmh = 'Cơ
sở dữ liệu'
go

--Cau 15: Liệt kê tên SV có điểm trung bình cao nhất ở


HK1 năm 1996
--Thuộc tính: MAMH, MAHP, HOCKY, NAM, DIEM, TENMH
--Quan hệ: HPHAN, SVIEN, KQUA, MHOC
--Điều kiện: Điểm TB lớn nhất ở HK 1 năm 1996

select Tensv,avg(diem) as DTB


from HPHAN H,SVIEN S,KQUA K,MHOC M
where ((hocky =1) and (H.NAM = 1996) and
(H.MAMH=M.MAMH) and (H.MAHP=K.MAHP) and
(K.MASV=S.MASV))
group by K.masv,tensv
having avg(diem)>=all (select avg(diem) from kqua)
--cau 16: Liệt kê danh sách 10 sinh viên đạt điểm cao
nhất của môn CSDL ở HK 1 năm 1996
--Thuộc tính: DIEM, TENSV, MAMH, TENMH, NAM, HOCKY
--Quan hệ: HPHAN,SVIEN,KQUA,MHOC
go
select top 10 Diem, TENSV
from HPHAN H,SVIEN S,KQUA K,MHOC M
where ((hocky =1) and (H.NAM = 1996) and
(H.MAMH=M.MAMH) and (H.MAHP=K.MAHP) and
(K.MASV=S.MASV))
and tenmh = 'Cơ sở dữ liệu'
order by diem desc

--Cau 17: Liệt kê tên SV chưa ĐK môn toán rời rạc


--Thuộc tính: MASV, TENMH
--Quan hệ: SVIEN, KQUA, HPHAN, MHOC
--Điều kiện: chưa đăng ký học môn Toán rời rạc

go
select masv,tensv
from svien
where masv not in (select kq.masv from kqua kq, hphan
hp, mhoc mh where kq.mahp=hp.mahp and mh.tenmh = 'Toán
rời rạc' and mh.mamh = hp.mamh)

--Cau 18: liệt kê những môn học thuộc khoa toán nhưng
không được dạy ở HK 1 năm 1996
--Thuộc tính: MAKHOA, HOCKY, NAM, MAMH
--Quan hệ: MHOC, HPHAN
--Điều kiện: MAKHOA = ‘TOAN’ ^ HOCKY =1 ^ NAM = 1996

go
select *
from mhoc
where makhoa = 'toan' and mamh not in (select m.mamh
from mhoc m, hphan h where(hocky =1) and (H.NAM = 1996)
and (H.MAMH=m.MAMH))

--Cau 19: Liệt kê danh sách sinh viên năm 3 thuộc khoa
toán mà chưa đăng ký học môn cơ sở dữ liệu ở HK1 năm
1996
--Thuộc tính: MAKHOA, MASV, MAHP, MAMH, TENMH
--Quan hệ: MHOC, HPHAN, SVIEN, KQUA
--Điều kiện: SV năm 3 thuộc khoa toán mà chưa đăng ký
học môn CSDL
go
select Masv,Tensv
from svien
where nam=3 and makhoa = 'TOAN' and (masv not in
(select kq.masv from kqua kq, hphan hp, mhoc mh where
kq.mahp=hp.mahp and mh.tenmh ='Cơ sở dữ liệu' and
mh.mamh = hp.mamh))

--Cau 20: Liệt kê danh sách sinh viên có đk trên 3 học


phần của hk1 năm 1996
--Thuộc tính: MASV, MAHP, TENSV, HOCKY, NAM
--Quan hệ: SVIEN, HPHAN, KQUA
--Điều kiện: Đăng ký trên 3 HP ở HK 1 năm 1996

select TENSV
from SVIEN s, KQUA q, HPHAN h
where s.masv=q.masv and h.mahp = q.mahp and h.hocky =1
and h.nam =1996
group by tensv, q.masv
having count (q.masv) >=3
Câu 1:Liệt kê MaDatPhong, MaDV, SoLuong của tất cả các dịch vụ có số lượng
lớn hơn 3 và

1. Đưa ra thông tin gồm mã số, họ tênvà tên khoa của tất cả các giảng viên
2. Đưa ra thông tin gồm mã số, họ tênvà tên khoa của các giảng viên của khoa
‘DIA LY va QLTN’
3. Cho biết số sinh viên của khoa ‘CONG NGHE SINH HOC’
4. Đưa ra danh sách gồm mã số, họ tênvà tuổi của các sinh viên khoa ‘TOAN’
5. Cho biết số giảng viên của khoa ‘CONG NGHE SINH HOC’
6. Cho biết thông tin về sinh viên không tham gia thực tập
7. Đưa ra mã khoa, tên khoa và số giảng viên của mỗi khoa
8. Cho biết số điện thoại của khoa mà sinh viên có tên ‘Le van son’ đang theo
học

II

9. Cho biết mã số và tên của các đề tài do giảng viên ‘Tran son’ hướng dẫn
10. Cho biết tên đề tài không có sinh viên nào thực tập
11. Cho biết mã số, họ tên, tên khoa của các giảng viên hướng dẫn từ 3 sinh
viên trở lên.
12. Cho biết mã số, tên đề tài của đề tài có kinh phí cao nhất
13. Cho biết mã số và tên các đề tài có nhiều hơn 2 sinh viên tham gia thực tập
14. Đưa ra mã số, họ tên và điểm của các sinh viên khoa ‘DIALY và QLTN’
15. Đưa ra tên khoa, số lượng sinh viên của mỗi khoa
16. Cho biết thông tin về các sinh viên thực tập tại quê nhà
17. Hãy cho biết thông tin về những sinh viên chưa có điểm thực tập
18. Đưa ra danh sách gồm mã số, họ tên các sinh viên có điểm thực tập bằng 0

ĐÁP ÁN
0
1 --Câu 1:
2 SELECT GV.Magv, GV.Hotengv, K.Tenkhoa
3 FROM TBLGiangVien GV join TBLKhoa K
4 ON GV.Makhoa = K.Makhoa
5 --Câu 2:
6 SELECT GV.Magv, GV.Hotengv, K.Tenkhoa
7 FROM TBLGiangVien GV JOIN TBLKhoa K
8 ON GV.Makhoa = K.Makhoa
9 WHERE K.Tenkhoa = 'Dia ly va QLTN'
10 --Câu 3:
11 SELECT COUNT(SV.MASV) AS SỐ_SV
12 FROM TBLSinhVien SV
13 --Câu 4:
14 SELECT SV.Masv, SV.Hotensv
15 FROM TBLSinhVien SV JOIN TBLKhoa K
16 ON SV.Makhoa = K.Makhoa
17 WHERE K.Tenkhoa='TOAN'
18 --Câu 5:
19 SELECT COUNT(GV.Magv) AS SỐ_GV
20 FROM TBLGiangVien GV join TBLKhoa K
21 ON GV.Makhoa = K.Makhoa
22 WHERE K.Tenkhoa='CONG NGHE SINH HOC'
23 --Câu 6:
24 SELECT SV.Masv,SV.Hotensv
25 FROM TBLSinhVien SV
26 WHERE NOT EXISTS(
27 SELECT HD.Masv
28 FROM TBLHuongDan HD
29 WHERE SV.Masv = HD.Masv)
30 --Câu 7:
31 SELECT K.Makhoa,K.Tenkhoa, COUNT(K.Makhoa) AS SỐ_GV
32 FROM TBLGiangVien GV JOIN TBLKhoa K
33 ON GV.Makhoa = K.Makhoa
34 GROUP BY K.Makhoa,K.Tenkhoa
35 --CÂU 8:
36 SELECT k.Dienthoai
37 FROM TBLKhoa K join TBLSinhVien SV
38 ON K.Makhoa = SV.Makhoa
39 WHERE SV.Hotensv = 'Le Van Son'
40 --CÂU 9:
41 SELECT DT.Madt,DT.Tendt
42 FROM TBLGiangVien GV join TBLHuongDan HD
43 ON GV.Magv = HD.Magv
44 join TBLDeTai DT
45 ON DT.Madt = HD.Madt
46 WHERE GV.Hotengv = 'Tran Son'
47 --Câu 10:
48 SELECT DT.Madt,DT.Tendt
49 FROM TBLDeTai DT
50 WHERE NOT EXISTS(
51 SELECT HD.Madt
52 FROM TBLHuongDan HD
53 WHERE HD.Madt = DT.Madt)
54 --Câu 11:
55 SELECT GV.Magv,GV.Hotengv,K.Tenkhoa
56 FROM TBLGiangVien GV JOIN TBLKhoa K
57 ON GV.Makhoa = K.Makhoa
58 WHERE GV.Magv IN (
59 SELECT HD.Magv
60 FROM TBLHuongDan HD
61 GROUP BY HD.Magv
62 HAVING COUNT(HD.Magv)>3)
63 --Câu 12:
64 SELECT DT.Madt,DT.Tendt
65 FROM TBLDeTai DT
66 WHERE DT.Kinhphi = (
67 SELECT MAX(DT.Kinhphi)
68 FROM TBLDeTai DT)
69 --Câu 13:
70 SELECT DT.Madt,DT.Tendt
71 FROM TBLDeTai DT
72 WHERE DT.Madt in (
73 SELECT HD.Madt
74 FROM TBLHuongDan HD
75 GROUP BY HD.Madt
76 HAVING COUNT(HD.Madt) > 2)
77 --Câu 14:
78 SELECT SV.Masv,SV.Hotensv,HD.KetQua
79 FROM TBLSinhVien SV JOIN TBLHuongDan HD
80 ON SV.Masv = HD.Masv
81 JOIN TBLKhoa K
82 ON K.Makhoa = SV.Makhoa
83 WHERE K.Tenkhoa = 'Dia ly va QLTN'
84 --Câu 15:
85 SELECT K.Tenkhoa, COUNT(SV.Masv) AS Số_SV
86 FROM TBLSinhVien SV JOIN TBLKhoa K
87 ON SV.Makhoa = K.Makhoa
88 GROUP BY K.Tenkhoa
89 --Câu 16:
90 SELECT *
91 FROM TBLSinhVien SV JOIN TBLHuongDan HD
92 ON HD.Masv = SV.Masv
93 JOIN TBLDeTai DT
94 ON DT.Madt = HD.Madt
95 WHERE SV.Quequan = DT.Noithuctap
96 --Câu 17:
97 SELECT *
98 FROM TBLSinhVien SV JOIN TBLHuongDan HD
99 ON HD.Masv = SV.Masv
100 WHERE HD.KetQua is Null
101 --Câu 18:
102 SELECT SV.Masv,SV.Hotensv
103 FROM TBLSinhVien SV JOIN TBLHuongDan HD
104 ON HD.Masv = SV.Masv
105 WHERE HD.KetQua = 0
106

Câu 1:Liệt kê MaDatPhong, MaDV, SoLuong của tất cả các dịch vụ có số lượng
lớn hơn 3 và nhỏ hơn 10. (1 điểm)

Câu 2: Cập nhật dữ liệu trên trường GiaPhong thuộc bảng PHONG tăng lên
10,000 VNĐ so với giá phòng hiện tại, chỉ cập nhật giá phòng của những phòng
có số khách tối đa lớn hơn 10. (1 điểm)

Câu 3: Xóa tất cả những đơn đặt phòng (từ bảng DAT_PHONG) có trạng thái
đặt (TrangThaiDat) là “Da huy”. (1 điểm)

II.

Câu 4: Hiển thị TenKH của những khách hàng có tên bắt đầu là một trong các
ký tự “H”, “N”, “M” và có độ dài tối đa là 20 ký tự. (1 điểm)

Câu 5: Hiển thị TenKH của tất cả các khách hàng có trong hệ thống, TenKH nào
trùng nhau thì chỉ hiển thị một lần. Sinh viên sử dụng hai cách khác nhau để
thực hiện yêu cầu trên, mỗi cách sẽ được 0,5 điểm. (1 điểm)

Câu 6: Hiển thị MaDV, TenDV, DonViTinh, DonGia của những dịch vụ đi kèm có
DonViTinh là “lon” và có DonGia lớn hơn 10,000 VNĐ hoặc những dịch vụ đi
kèm có DonViTinh là “Cai” và có DonGia nhỏ hơn 5,000 VNĐ. (1 điểm)
Câu 7: Hiển thị MaDatPhong, MaPhong, LoaiPhong, SoKhachToiDa, GiaPhong,
MaKH, TenKH, SoDT, NgayDat, GioBatDau, GioKetThuc, MaDichVu, SoLuong,
DonGia của những đơn đặt phòng có năm đặt phòng là “2016”, “2017” và đặt
những phòng có giá phòng > 50,000 VNĐ/ 1 giờ. (1 điểm)

III.

Câu 8: Hiển thị MaDatPhong, MaPhong, LoaiPhong, GiaPhong, TenKH, NgayDat,


TongTienHat, TongTienSuDungDichVu, TongTienThanhToan tương ứng với từng
mã đặt phòng có trong bảng DAT_PHONG. Những đơn đặt phòng nào không
sử dụng dịch vụ đi kèm thì cũng liệt kê thông tin của đơn đặt phòng đó
ra. (1 điểm)

TongTienHat = GiaPhong * (GioKetThuc – GioBatDau)


TongTienSuDungDichVu = SoLuong * DonGia
TongTienThanhToan = TongTienHat + sum (TongTienSuDungDichVu)

Câu 9: Hiển thị MaKH, TenKH, DiaChi, SoDT của những khách hàng đã
từng đặt phòng karaoke có địa chỉ ở “Hoa xuan”. (1 điểm)

Câu 10: Hiển thị MaPhong, LoaiPhong, SoKhachToiDa, GiaPhong, SoLanDat của
những phòng được khách hàng đặt có số lần đặt lớn hơn 2 lần và trạng thái đặt
là “Da dat”. (1 điểm)

Câu 1:

SELECT MADATPHONG, MADV, SOLUONG


FROM chi_tiet_su_dung_dv
WHERE SOLUONG BETWEEN 4 AND 9

Câu 2:

UPDATE phong
SET GIAPHONG = GIAPHONG + 10
WHERE SOKHACHTOIDA > 10

Câu 3:
DELETE
FROM dat_phong
WHERE TRANGTHAIDAT = 'DA HUY'

Câu 4:

SELECT TENKH
FROM khach_hang
WHERE TENKH LIKE '[HNM]%' and LEN(TENKH) <= 20

Câu 5:

SELECT DISTINCT TENKH


FROM khach_hang

SELECT TENKH
FROM khach_hang
GROUP BY TENKH

Câu 6:

SELECT MADV, TENDV, DONVITINH, DONGIA


FROM dich_vu_di_kem
WHERE ( DONVITINH LIKE 'lon' AND DONGIA > 10 ) OR ( DONVITINH LIKE 'CAI' AND DONGIA < 5)

Câu 7: // Sử dụng JOIN kết nối các bảng và dùng hàm hỗ trợ của SQL thôi ^^!

SELECT dp.MADATPHONG, dp.MAPHONG, p.LOAIPHONG, p.SOKHACHTOIDA, p.GIAPHONG, kh.MAKH,


kh.TENKH, kh.SODT, dp.NGAYDAT, dp.GIOBATDAU, dp.GIOKETTHUC, dv.MADV, ct.SOLUONG,
dv.DONGIA
FROM dat_phong dp
JOIN khach_hang kh
on dp.MAKH = kh.MAKH
JOIN phong p
on dp.MAPHONG = p.MAPHONG
JOIN chi_tiet_su_dung_dv ct
ON dp.MADATPHONG = ct.MADATPHONG
JOIN dich_vu_di_kem dv
ON ct.MADV = dv.MADV
WHERE (YEAR(NGAYDAT) = 2016 OR YEAR(NGAYDAT) = 2018) AND P.GIAPHONG > 50

Câu 8: // trong thực tế k tính thời gian bằng GIOKETHUC - GIOBATDAU đâu đây là người ta cho
sẵn biểu thức thế thôi, mà chúng ta phải dùng hàm TIMEDIFF(time_end, time_start ) để
tính chính xác thời gian và lấy ra Giờ phút giây của nó bằng hàm DATEPART(), tiếp đó tính
tổng số giây. Nó cho giá phòng trong 1 giờ thì chúng ta phải đổi ra 1 giây bao nhiêu tiền,
Tổng tiền phòng bằng tổng giây * tiền phòng 1 giây ^^!

SELECT dp.MADATPHONG, p.MAPHONG, p.LOAIPHONG, p.GIAPHONG, kh.TENKH, dp.NGAYDAT,


p.GIAPHONG * (GIOKETTHUC - GIOBATDAU) AS TONGTIENHAT, SUM(ct.SOLUONG * dv.DONGIA) AS
TONGTIENSUDUNGDV, ( p.GIAPHONG * (GIOKETTHUC - GIOBATDAU) + SUM(CT.SOLUONG *
dv.DONGIA ))
FROM dat_phong dp
JOIN khach_hang kh
on dp.MAKH = kh.MAKH
JOIN phong p
on dp.MAPHONG = p.MAPHONG
JOIN chi_tiet_su_dung_dv ct
ON dp.MADATPHONG = ct.MADATPHONG
JOIN dich_vu_di_kem dv
ON ct.MADV = dv.MADV
GROUP BY dp.MADATPHONG

Câu 9: // Câu này có thể dùng IN hoặc EXIST khuyến khích dùng EXISTS vì SQL SERVER sẽ đưa
ra kết quả nhanh hơn

SELECT kh.MAKH, kh.TENKH, kh.DIACHI, kh.SODT


FROM khach_hang kh
WHERE kh.DIA CHI = 'HOA XUAN' AND EXISTS (
SELECT *
FROM dat_phong dp
WHERE kh.MAKH = dp.MAKH )

Câu 10: // Câu 10 điểm này theo mình thì là câu cho điểm 10 :D

SELECT p.MAPHONG,p.LOAIPHONG,p.SOKHACHTOIDA,p.GIAPHONG, COUNT(dp.MAPHONG) AS


SOLUONGDAT
FROM phong p
JOIN dat_phong dp
ON p.MAPHONG = dp.MAPHONG
WHERE dp.TRANGTHAIDAT = 'DA DAT'
GROUP BY p.MAPHONG
HAVING COUNT(dp.MAPHONG) > 2

You might also like