4. 3. 1. Biểu diễn các truy vấn trong cơ sở dữ liệu cung ứng hàng có các bảng sau:
S (SID, SNAME, STATUS, CITY)
P (PID, PNAME, COLOR, WEIGHT)
J (JID, JNAME, CITY)
SPJ(SID, PID, JID, QTY)
Trong đó:
S- các hãng cung ứng, SID- số hiệu hãng, SNAME- tên hãng, STATUS - tình trạng
hãng, CITY- thành phố của hãng
P- các mặt hàng, PID- số hiệu mặt hàng, PNAME- tên hàng, COLOR- màu sắc,
WEIGHT - khối lượng.
J- các dự án, JID- mã dự án, JNAME- tên dự án, CITY- thành phố thực hiện dự án
SPJ- hãng cung ứng mặt hàng cho dự án, QTY- khối lượng hàng cung ứng.
a. Đưa ra thông tin về tất cả các dự án ở 'London' được hãng có mã là ‘S 1’ cung
ứng
C1: SELECT J.JID, JNAME, CITY
FROM J, SPJ
WHERE J.JID=SPJ.JID AND CITY= ‘LONDON’ AND SID= ‘S1’
C2: SELECT J.JID, JNAME, CITY
FROM J INNER JOIN SPJ
ON J.JID=SPJ.JID
WHERE CITY= ‘LONDON’ AND SID= ‘S1’
C3: SELECT *
FROM J
WHERE CITY= ‘LONDON’ AND JID IN (
SELECT JID
FROM SPJ
WHERE SID= ‘S1’)
b. Tìm số hiệu của những hãng cung ứng mặt hàng có mã ‘P 1’ cho dự án có mã
‘J1’
SELECT SID
FROM SPJ
WHERE PID= ‘P1’ AND JID= ‘J1’
c. Tìm màu sắc và khối lượng của mặt hàng do hãng có mã là ‘S2’ cung ứng
SELECT COLOR, WEIGHT
FROM P, SPJ
WHERE P.PID=SPJ.PID AND SID= ‘S2’
d. Tìm số hiệu và tên của hãng đã cung ứng mặt hàng màu đỏ cho cho một dự án
bất kỳ ở 'Paris'.
SELECT S.SID, SNAME
FROM S, P, J, SPJ
WHERE S.SID=SPJ.SID AND
P.PID=SPJ.PID AND
J.JID=SPJ.JID AND
COLOR = ‘ĐỎ’ AND
J.CITY= ‘PARIS’
e. Tìm số hiệu và tên của hãng đã cung ứng mặt hàng màu đỏ cho các dự án ở
'London' và 'Paris'
SELECT S.SID, SNAME
FROM S, P, J, SPJ
WHERE S.SID=SPJ.SID AND
P.PID=SPJ.PID AND
J.JID=SPJ.JID AND
COLOR = ‘ĐỎ’ AND
J.CITY= ‘PARIS’ OR J.CITY= ‘LONDON’
f. Cho biết số hiệu các mặt hàng khác nhau đã được cung cấp.
/*SELECT PID
SPJ
FROM SPJ
--- KẾT QUẢ = P1,P1,P2,P2,P3*/
SELECT DISTINCT PID
SID
S1
S1
S2
S2
S2
PID
P1
P1
P2
P2
P3
JID
J1
J2
J1
J2
J1
QTY
10
20
30
40
20
FROM SPJ
----KẾT QUẢ= P1,P2,P3
g. Tìm mã số nhà cung cấp đã cung cấp ít nhất một trong các mặt hàng có mã
‘P1’, ‘P2’, ‘P3’.
SELECT SID
FROM SPJ
WHERE PID IN (‘P1’, ‘P2’, ‘P3’)
h. Đưa ra trọng lượng mỗi mặt hàng với số lượng cung ứng 30 cái mỗi loại.
SELECT WEIGHT
FROM P
WHERE PID IN (SELECT PID
FROM SPJ
WHERE QTY=30) ???
SELECT WEIGHT
SPJ
SID
S1
S1
S2
S2
S2
S3
PID
P1
P1
P2
P2
P3
P3
JID
J1
J2
J1
J2
J1
J3
QTY
10
20
30
40
20
30
FROM P
WHERE PID IN (
SELECT PID
FROM SPJ
GROUP BY PID
HAVING SUM (QTY)=30)
i. Tìm mã số những nhà cung cấp, tên hãng có tình trạng lớn hơn 20 đã cung cấp
mặt hàng có mã ‘P2’.
SELECT S.SID, SNAME
FROM S, SPJ
WHERE S.SID=SPJ.SID AND STATUS>20 AND PID= ‘P2’
j. Tìm các mặt hàng màu đỏ có trọng lượng nhỏ hơn 15.
SELECT *
FROM P
WHERE COLOR= ‘ĐỎ’ AND WEIGHT<15
k. Tìm những nhà cung cấp có tên bắt đầu là Ha.
SELECT *
FROM S
WHERE SNAME LIKE ‘Ha%’
l. Tìm nhà cung cấp có tên gồm 4 ký tự .
SELECT *
FROM S
WHERE SNAME LIKE ‘ _ _ _ _’
m. Tìm những mặt hàng đã cung cấp có số lượng gửi đi từ 100 đến 200.
SELECT *
FROM P
WHERE PID IN (
SELECT PID
FROM SPJ
GROUP BY PID
HAVING SUM (QTY) BETWEEN 100 AND 200)
n. Tìm mã số những nhà cung cấp đã cung cấp ít nhất ba mặt hàng.
SID
S1
S2
S3
COUNT(PID)
4
3
1
COUNT (DISTINCT PID)
3
1
1
SELECT SID
FROM SPJ
GROUP SID
HAVING COUNT(PID)>=3
-SELECT SID
FROM SPJ
GROUP SID
HAVING COUNT(DISTINCT PID)>=3
SPJ
SID
S1
S1
S2
S2
S2
S3
S1
S1
PID
P1
P1
P2
P2
P2
P3
P2
P3
JID
J1
J2
J1
J2
J1
J3
J2
J2
QTY
10
20
30
40
20
30
10
20
o. Tính tổng khối lượng các mặt hàng đã cung cấp, số mặt hàng đã cung cấp
SELECT SUM(WEIGHT), COUNT (PID)
FROM P, SPJ
WHERE P.PID=SPJ.PID
p. Cho biết số lần mặt hàng có mã ‘P2’ đã được cung cấp.
SELECT COUNT(*)
FROM SPJ
WHERE PID= ‘P2’
q. Đưa ra thông tin về hãng có tình trạng lớn nhất.
SELECT *
FROM S
WHERE STATUS = (
SELECT MAX(STATUS)
S
SID
S1
S2
S3
S4
SNAME
ÉT 1
ÉT 2
ÉT 3
ÉT 4
STATUS
20
50
40
50
CITY
HN
HP
NA
HN
FROM S )
r. Tìm số hiệu các mặt hàng đã được cung cấp và số hãng đã cung cấp mặt hàng
ấy.
SELECT PID, COUNT( DISTINCT SID)
FROM SPJ
GROUP PID
SPJ
SID
S1
S1
S2
S2
S2
S3
S1
S1
PID
P1
P1
P2
P2
P2
P3
P2
P3
JID
J1
J2
J1
J2
J1
J3
J2
J2
QTY
10
20
30
40
20
30
10
20
s. Đưa ra tên những mặt hàng màu đỏ sắp xếp theo thứ tự giảm của mã hàng.
SELECT PNAME
FROM P
WHERE COLOR= ‘ĐỎ’
ORDER BY PID DESC
t. Tìm mã số mặt hàng đã được cung cấp và địa chỉ của hãng cung cấp mặt hàng
đó.
SELECT PID, CITY
FROM S, SPJ
WHERE S.SID=SPJ.SID
u. Tìm tên những hãng khơng cung ứng mặt hàng có mã ‘P1’.
SELECT SNAME
SPJ
FROM S
WHERE SID IN (SELECT SID
FROM SPJ
WHERE PID <> ‘P1’) ???
SID
S1
S1
S2
S2
S2
S3
S1
S1
PID
P1
P1
P2
P2
P1
P3
P2
P3
JID
J1
J2
J1
J2
J1
J3
J2
J2
KẾT QUẢ TRẢ VỀ LÀ: ÉT 1, ÉT 2, ÉT 3
THỰC TẾ CHỈ ĐƯỢC TRẢ ÉT3
SELECT SNAME
FROM S
WHERE SID NOT IN (SELECT SID
FROM SPJ
WHERE PID = ‘P1’)
v. Tìm danh sách những nhà cung cấp đã cung cấp ít nhất một mặt hàng.
SELECT *
FROM S
WHERE SID IN (SELECT SID FROM SPJ)
w. Tìm các hãng chưa cung ứng mặt hàng nào.
C1: SELECT *
FROM S
WHERE SID NOT IN (SELECT SID FROM SPJ)
C2: SELECT *
QTY
10
20
30
40
20
30
10
20
FROM S WHERE SID IN (
(SELECT SID FROM S) EXCEPT (SELECT SID FROM SPJ))
x. Tìm tên các mặt hàng được tất cả các hãng cung cấp.
Gom nhóm PID rồi tính số lượng SID trên
từng nhóm
PID
P1
P2
P3
COUNT(SID)
5
4
2
Count( DISTINCT SID)
4
3
2
S
SPJ
SID
S1
S2
S3
S4
COUNT(SID) Trên bảng S= 4
SELECT PNAME
FROM P
SID
PID
SNAME
S1
ÉT 1 P1
S1
ÉT 2 P1
S2
ÉT 3 P2
S2
ÉT 4 P1
S3
P1
S3
P3
S1
P2
S1
P3
S4
P1
S3
P2
S3
P2
JID QTY
STATUS
J1
10
20
J2
20
50
J1
30
40
J2
40
50
J1
20
J3
30
J2
10
J2
20
J4
20
J1
10
J2
20
CITY
HN
HP
NA
HN
WHERE PID IN (
SELECT PID
FROM SPJ
GROUP BY PID
HAVING COUNT( DISTINCT SID)= (SELECT COUNT (SID) FROM S))
y. Tìm số hiệu hãng đã cung cấp nhiều mặt hàng nhất.
Bài giải mẫu
a. Đưa ra thông tin về tất cả các dự án ở 'London' được hãng có mã ‘S1’ cung ứng
SELECT J.JID, J.JNAME, J.CITY
FROM J, SPJ
WHERE (J.JID=SPJ.JID) AND (J.CITY=’LONDON’) AND (SID=’S1’);
4. 3. 2. Biểu diễn yêu cầu sau bằng ngôn ngữ SQL cho hệ thống cung cấp hàng:
Cho CSDL gồm 2 quan hệ gồm 2 bảng:
NCC(MSNCC,TEN_CC,DCCC)
MH(MSNCC, MSMH, SOLUONG)
Trong đó MSNCC - mã số nhà cung cấp, TEN_CC - tên người cung cấp, DCCC địa chỉ cung cấp, MSMH - mã số mặt hàng, SOLUONG- số lượng cung cấp.
a. Hiện mã số người cung cấp đã cung cấp ít nhất một mặt hàng
b. Hiện mã số người cung cấp không cung cấp mặt hàng nào
c. Hiện mã số người cung cấp đã cung cấp mặt hàng có mã số là 15
d. Hiện mã số người cung cấp đã cung cấp ít nhất một mặt hàng nhưng khơng có
mặt hàng có mã số là 15
e. Hiện địa chỉ nhà cung cấp cung ứng mặt hàng có mã là 12 hoặc 13 có giá trên
20000.
f.
Hiện tên nhà cung cấp cung ứng tất cả các mặt hàng
g. Hiện tên nhà cung cấp ở Hà nội cung ứng mặt hàng có số lượng trên 10.
h. Hiện mã số, tên nhà cung cấp, tổng tiền thu được khi cung ứng mặt hàng. Biết
rằng: tổng tiền= ∑(soluong x gia)
i.
Đưa ra tên, địa chỉ nhà cung cấp bán mặt hàng có giá thấp nhất
j.
Đưa ra mã nhà cung cấp, tổng số lượng hàng cung ứng có giá trị lớn nhất.
4. 3. 3. Biểu diễn yêu cầu sau bằng ngôn ngữ SQL cho hệ thống quản lý điểm của
sinh viên với các bảng sau:
SV(MASV, TENSV, QUE);
MON(MAMH, TENMH, SOTC);
KQ(MASV, MAMH, DIEM)
Trong đó:
MASV: Mã sinh viên
TENSV: Tên sinh viên
QUE: quê quán
MAMH: Mã môn học
TENMH: Tên môn học
SOTC: số tín chỉ
DIEM: điểm
a. Đưa ra các thông tin gồm: Tên sinh viên, tên mơn học, số tín chỉ và điểm của
các mơn học.
b. Đưa ra các thông tin về sinh viên: mã, tên dự thi môn ‘CSDL’
c. Đưa ra các thông tin về mơn học: mã mơn, tên mơn có sinh viên thi được điểm
dưới 5
d. Đưa ra các thông tin gồm: Tên sinh viên, tên mơn học có số tín chỉ dưới 4 và
các sinh viên đó đạt điểm trên 7
e. Đưa ra tên sinh viên không bị điểm nào dưới 5
f. Đưa ra tên mơn học khơng có sinh viên nào đạt điểm 10.
g. Đưa ra các thông tin về mơn học: mã, tên mơn có số tín chỉ lớn hơn 2.
h. Đưa ra các thông tin gồm: tên sinh viên, tên môn học, điểm của sinh viên quê
Hà nội học môn Cơ sở dữ liệu
i. Đưa ra các thông tin gồm: mã sinh viên, tên sinh viên, điểm trung bình. Biết
rằng:
j. Đưa ra danh sách gồm mã và tên sinh viên bị điểm dưới 5 tất cả các môn học
k. Đưa ra mã sinh viên, số môn thi đạt điểm dưới 5 là nhiều nhất.
l. Đưa ra mã sinh viên của các sinh viên có ít nhất 2 mơn đạt điểm 7.