Tải bản đầy đủ (.docx) (15 trang)

Bài tập Cơ sở dữ liệu SQL cơ bản có đáp án

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (59.66 KB, 15 trang )

Bài tập SQL
Đề bài:
Câu 1:
NCC(MSNCC, TênNCC, Địachỉ)
MH(MSMH, TênMH, Màusắc)
CC(MSNCC, MSMH, Giátiền)
a. Đưa ra tên của những hãng có cung ứng ít nhất
1 mặt hàng màu đỏ
b. Đưa ra mã số của các hãng có cung ứng ít nhất
1 mặt hàng màu đỏ hoặc 1 mặt hàng màu xanh
c. Đưa ra mã số của hãng có cung ứng ít nhất 1
mặt hàng màu đỏ và 1 mặt hàng màu xanh
d. Đưa ra mã số của hãng cung ứng tất cả các
mặt hàng màu đỏ
e. Đưa ra mã số của hãng cung ứng tất cả các
mặt hàng màu đỏ và màu xanh
f. Đưa ra mã số của hãng cung ứng tất cả các
mặt hàng màu đỏ hoặc tất cả các mặt hàng
màu xanh
g. Lưu ý dùng toán tử UNION nó sẽ loại bỏ các
bản ghi giống nhau.
h. Đưa ra cặp mã số của hãng cung ứng sao cho
hãng cung ứng tương ứng với mã số thứ nhất
cung cấp một mặt hàng nào đó với giá cao hơn
so với giá mà hãng tương ứng với mã số thứ
hai cung cấp cũng mặt hàng đó
i. Đưa ra mã số của mặt hàng được cung cấp bởi
ít nhất hai hãng cung ứng
j. Đưa ra mã số của mặt hàng đắt nhất được
cung cấp bởi hãng Dustin
k. Đưa ra mã số của mặt hàng được cung ứng bởi


tất cả các hãng mà giá tiền đều nhỏ hơn 200.
Câu 2:
Nhânviên(MSNV, Họtên, Tuổi, Lương)
Phòng(MSP, TênPhòng, Địađiểm, Ngânquỹ,
MSTrưởngphòng)
Làmviệc (MSNV, MSP, Thờigian)
Câu 1:
NCC(MSNCC, TênNCC, Địachỉ)
MH(MSMH, TênMH, Màusắc)
CC(MSNCC, MSMH, Giátiền)
a. Đưa ra tên của những hãng có cung ứng ít nhất 1
mặt hàng màu đỏ
SELECT TENNCC
FROM NCC,CC, MH
WHERE NCC.MSNCC=CC.MSNCC
AND MH.MSMH=CC.MSMH
AND MH.Màu sắc=N’đỏ’;
b. Đưa ra mã số của các hãng có cung ứng ít nhất 1
mặt hàng màu đỏ hoặc 1 mặt hàng màu xanh
c. SELECT MSNCC
FROM NCC, CC, MH
WHERE NCC.MSNCC=CC.MSNCC
AND MH.MSMH=CC.MSMH
AND (MH.Màu sắc=N’đỏ’ OR MH.Màu
sắc=N’xanh’);
d. Đưa ra mã số của hãng có cung ứng ít nhất 1 mặt
hàng màu đỏ và 1 mặt hàng màu xanh
SELECT MSNCC
FROM CC, MH
WHERE MH.MSMH=CC.MSMH

AND MH.Màu sắc=N’đỏ’
AND MSNCC IN(
SELECT MSNCC
FROM CC C1,MH MH1
WHERE C1.MSMH=MH1.MSMH
AND MH1.Màu sắc=N’xanh’;
e. Đưa ra mã số của hãng cung ứng tất cả các mặt
hàng màu đỏ
SELECT MSNCC
FROM CC, MH
WHERE CC.MSMH=MH.MSMH
AND MH.Màu sắc=’đỏ’
GROUP BY MSNCC
HAVING COUNT(MSMH)=(
SELECT COUNT(MSMH)
FROM MH
WHERE Màu sắc=N’đỏ’);
f. Đưa ra mã số của hãng cung ứng tất cả các mặt
hàng màu đỏ và màu xanh
SELECT MSNCC
FROM CC, MH
WHERE CC.MSMH=MH.MSMH
AND MH.Màu sắc=N’đỏ’
GROUP BY MSNCC
HAVING COUNT(MSMH)=(
SELECT COUNT(MSMH)
FROM MH
WHERE Màu sắc=N’đỏ’)
INTERSECT
SELECT MSNCC

FROM CC, MH
WHERE CC.MSMH=MH.MSMH
AND MH.Màu sắc=N’xanh’
GROUP BY MSNCC
HAVING COUNT(MSMH)=(
SELECT COUNT(MSMH)
FROM MH
WHERE Màu sắc=N’xanh’);
g. Đưa ra mã số của hãng cung ứng tất cả các mặt
hàng màu đỏ hoặc tất cả các mặt hàng màu xanh
h. Lưu ý dùng toán tử UNION nó sẽ loại bỏ các bản
ghi giống nhau.
SELECT MSNCC
FROM CC, MH
WHERE CC.MSMH=MH.MSMH
AND MH.Màu sắc=N’đỏ’
GROUP BY MSNCC
HAVING COUNT(MSMH)=(
SELECT COUNT(MSMH)
FROM MH
WHERE Màu sắc=N’đỏ’)
UNION
SELECT MSNCC
FROM CC, MH
WHERE CC.MSMH=MH.MSMH
AND MH.Màu sắc=N’xanh’
GROUP BY MSNCC
HAVING COUNT(MSMH)=(
SELECT COUNT(MSMH)
FROM MH

WHERE Màu sắc=N’xanh’);
i. Đưa ra cặp mã số của hãng cung ứng sao cho
hãng cung ứng tương ứng với mã số thứ nhất
cung cấp một mặt hàng nào đó với giá cao hơn so
với giá mà hãng tương ứng với mã số thứ hai
cung cấp cũng mặt hàng đó
j. SELECT MSNCC
FROM CC C1, CC C2
WHERE C1.MSMH=C2.MSMH
AND C1.GiaTri>C2.GIATRI;
k. Đưa ra mã số của mặt hàng được cung cấp bởi ít
nhất hai hãng cung ứng
SELECT MSMH
FROM CC
GROUP BY MSMH
HAVING COUNT(MSNCC)>2;
l. Đưa ra mã số của mặt hàng đắt nhất được cung
cấp bởi hãng Dustin
SELECT MSMH
FROM CC, NCC
WHERE CC.MSNCC=NCC.MSNCC
AND TENNCC=N’Dustin’
AND GIATRI>=ALL(
SELECT GIATRI
FROM CC,NCC
WHERE CC.MSNCC=NCC.MSNCC
AND TENNCC=N’Dustin’);
m. Đưa ra mã số của mặt hàng được cung ứng bởi
tất cả các hãng mà giá tiền đều nhỏ hơn 200.
SELECT MSMH

FROM CC
WHERE GIATRI<200
GROUP BY MSMH
HAVING COUNT(MSNCC)=(
SELECT COUNT(MSNCC)
FROM NCC);
Câu 2:
Nhânviên(MSNV, Họtên, Tuổi, Lương)
Phòng(MSP, TênPhòng, Địađiểm, Ngânquỹ,
MSTrưởngphòng)
Làmviệc (MSNV, MSP, Thờigian)
a. Đưa ra tên và tuổi của các nhân viên làm việc cho
cả phòng Tổ chức và Kế hoạch
Lưu ý dùng toán tử =ANY ý nghĩa giống với toán
tử IN
Dùng ANY thì không phải đặt tên lại như IN.
SELECT HOTEN, TUOI
FROM NV, LV, P
WHERE NV.MSNV=LV.MSNV
AND P.MSP=LV.MSP
AND P.TENPHONG=N’Tổ chức’
AND NV.MSNV = ANY(
SELECT NV.MSNV
FROM NV, LV, P
WHERE NV.MSNV=LV.MSNV
AND P.MSP=LV.MSP
AND P.TENPHONG=N’Kế hoạch’);
b. Với mỗi phòng với trên 20 nhân viên, hãy đưa ra
mã số phong và số nhân viên làm trong phòng đó
SELECT MSP, COUNT(MSNV)

FROM P, NV, LV
WHERE P.MSP=LV.MSP
AND NV.MSNV=LV.MSNV
GROUP BY MSP
HAVING COUNT(MSNV)>20;
c. Đưa ra tên của các nhân viên mà lương của họ
cao hơn cả ngân quỹ của tất cả các phòng mà
nhân viên đó làm việc
d.
SELECT HOTEN
FROM NV, P ,LV
WHERE NV.MSNV=LV.MSNV
AND P.MSP=LV.MSP
AND LUONG >= MAX(NGANQUY);
e. Đưa ra mã số trưởng phòng của những người
trưởng phòng mà các phòng họ quản lý đều có
ngân quỹ > 1,000,000
SELECT MS_TRUONGPHONG
FROM P
GROUP BY MS_TRUONGPHONG
HAVING MIN(NGANQUY)>1000000;
f. Đưa ra tên của người trưởng phòng mà phòng đó
có ngân quỹ lớn nhất
SELECT HOTEN
FROM NV, P
WHERE P.MS_TRUONGPHONG=NV.MSNV
AND NGANQUY>=ALL(
SELECT MAX(NGANQUY)
FROM P);
g. Nếu một người có thể quản lý nhiều phòng, người

đó có quyền kiểm soát ngân quỹ của tất cả các
phògn đó. Hãy đưa ra mã số của người trưởng
phòng mà tổng số ngân quỹ được kiểm soát bởi
người đó > 5,000,000
SELECT MS_TRUONGPHONG
FROM P
GROUP BY MS_TRUONGPHONG
HAVING SUM(NGANQUY)>5000000;
Câu 3:
Nhânviên(MãNV, Họtên, Ngày sinh, MãP)
Phòng(MãP, TênP, Địađiểm, SốĐT)
Dự án(MãDA, TênDA, Ngân sách)
Thamgia(MãNV, MãDA, Sốgiờthamgia)
a. Đưa ra tên của các dự án có ngân sách nằm trong
khoảng từ 50,000 đến 100,000
SELECT TENDA
FROM DA
WHERE NGANSACH>50000 AND
NGANSACH<100000;
b. Đưa ra họ tên của các nhân viên có tham gia làm
dự án “Quản lý đào tạo”
SELECT HOTEN
FROM NV, TG, DA
WHERE NV.MANV=TG.MANV
AND DA.MADA=TG.MADA
AND TENDA=N’Quản lý đào tạo’;
c. Đưa ra mã số của các nhân viên tham gia cả hai
dự án “Quản lý đào taọ” và “Đào tạo từ xa”
SELECT MANV
FROM TG, DA

WHERE TG.MADA=DA.MADA
AND TENDA=N’Quản lý đào tạo’
AND MANV = ANY(
SELECT MANV
FROM TG, DA
WHERE TG.MADA=DA.MADA
AND TENDA=N’Đào tạo từ xa’);
d. Đưa ra mã số của các nhân viên tham gia dự án
“Quản lý đào tạo” nhưng không tham gia dự án
“Đào tạo từ xa”
SELECT MSNV
FROM TG, DA
WHERE TG.MSDA=DA.MSDA
AND TENDA=N’Quản lý đào tạo’
MINUS
SELECT MSNV
FROM TG, DA
WHERE TG.MSDA=DA.MSDA
AND TENDA=N’Đào tạo từ xa’
e. Đưa ra mã số của phòng không có nhân viên nào
tham gia dự án
SELECT MSP
FROM P
MINUS
SELECT MSP
FROM NV, P, TG
WHERE NV.MANV=TG.MANV
AND NV.MAP=P.MAP
f. Dự án nào có tất cả các nhân viên của phòng
‘NCKH’ tham gia?

SELECT TENDA
FROM NV, P, TG, DA
WHERE NV.MANV=TG.MANV
AND TG.MADA=DA.MADA
AND NV.MAP=P.MAP
AND P.TENP=’NCKH’
GROUP BY TENDA, P.MAP
HAVING COUNT(TG.MANV) =(
SELECT COUNT(MANV)
FROM NV, P
WHERE NV.MAP=P.MAP
AND TENP=’NCKH’);
g. Ngân sách trung bình của các dự án mà nhân
viên có mã số NV001 tham gia là bao nhiểu?
SELECT SUM(NGANSACH)/COUNT(MADA)
FROM NV, TG, DA
WHERE NV.MANV=TG.MANV
AND TG.MADA=DA.MADA
AND NV.MANV=N’NV001’
GROUP BY MANV;
h. Có bao nhiêu nhân viên tham gia dự án Quản lý
đào tạo?
SELECT COUNT(MANV)
FROM TG, DA
WHERE TG.MADA=DA.MADA
AND TENDA=N’Quản lý đào tạo’;
i. Hãy đưa ra tên của các dự án mà số nhân viên
tham gia dự án đó < 10
SELECT TENDA
FROM TG, DA

WHERE TG.MADA=DA.MADA
GROUP BY TENDA
HAVING COUNT(MANV)<10;
j. Dự án nào có số nhân viên tham gia lớn nhất
k. SELECT TENDA
FROM TG, DA
WHERE TG.MADA=DA.MADA
GROUP BY TENDA, MANV
HAVING COUNT(MANV) >=ALL(
SELECT COUNT(MANV)
FROM TG
GROUP BY MADA);
Câu 4:
Sinh viên (MSSV, Họtên, Ngày sinh, Quê quán)
Môn học (MSMH, TênMH, TênGV)
Đăngký(MSMH, MSSV, Điểm)
a. Đưa ra tên của các môn học
SELECT TENMH
FROM MH;
b. Đưa ra MS, Họtên, Ngày sinh của các sinh viên ở
Hà nội
SELECT MSSV, HOTEN, NGAYSINH
FROM SV
WHERE QUEQUAN=N’Hà nội’;
c. Đưa ra mã số của các sinh viên đăng ký học môn
học có mã số M1 hoặc M2
SELECT MSSV
FROM SV, DK
WHERE SV.MSSV=DK.MSSV
AND MSMH=N’M1’ OR MSMH=N’M2’;

d. Đưa ra tên của môn học mà sinh viên có mã số
20042325 học
SELECT TENMH
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH
AND SV.MSSV=N’20042325’;
e. Đưa ra tên của các sinh viên đăng ký học ít nhất
một môn do giảng viên Lê Quân dạy
SELECT HOTEN
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH
AND TENGV=N’Lê Quân’;
f. Đưa ra tên các môn mà sinh viên Nguyễn Văn A
học và điểm tương ứng của các môn đó cho sinh
viên này
SELECT MH.TENMH, DIEM
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH
AND HOTEN=N’Nguyễn Văn A’;
g. Đưa ra mã số của các sinh viên học tất cả các
môn mà giảng viên Lê Quân có dạy
SELECT MSSV
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH
AND TENGV=N’Lê Quân’
GROUP BY MSSV, MSMH

HAVING COUNT(TENMH)=(
SELECT COUNT(TENMH)
FROM MH
WHERE TENGV=V’Lê Quân’);
h. Đưa ra tên của các môn học không được sinh viên
nào đăng ký học
SELECT TENMH
FROM MH
WHERE MSMH NOT IN(
SELECT MSMH
FROM DK)
i. Những sinh viên nào có đăng ký học từ 5 môn trở
lên
SELECT MSSV, HOTEN
FROM SV, DK
WHERE SV.MSSV=DK.MSSV
GROUP BY MSSV, HOTEN
HAVING COUNT(MSMH)>=5;
j. Điểm trung bình của sinh viên Nguyễn Văn A là
bao nhiêu?
SELECT SUM(DIEM)/COUNT(MSMH) AS DIEMTB
FROM SV, DK
WHERE SV.MSSV=DK.MSSV
AND HOTEN=N’Nguyễn Văn A’
GROUP BY MSSV;
k. Sinh viên nào đạt điểm cao nhất cho môn CSDL?
SELECT MSSV, HOTEN
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH

AND TENMH=N’CSDL’
AND DIEM >=ALL(
SELECT MAX(DIEM)
FROM SV, DK, MH
WHERE SV.MSSV=DK.MSSV
AND MH.MSMH=DK.MSMH
AND TENMH=N’CSDL’);

×