You are on page 1of 5

THUYTHU (MATT, TENTT, BAC, TUOI)

TAU (MATAU, TENTAU, MAU)

DANGKY (MATT, MATAU, NGAY)

1) Tên của những thủy thủ đã đăng ký tàu mã là 103.

Π TENTT ((σMATAU = ‘103’DANGKY) * THUYTHU)

{t.TENTT | THUYTHU(t) and (∃d) DANGKY(d) and d.MATAU = ‘103’ and d.MATT
= t.MATT)}

SELECT TENTT

FROM DANGKY D, THUYTHU TT

WHERE TT.MATT = D.MATT AND MATAU = ‘103’

2) Tên những thủy thủ đã đăng ký tàu màu đỏ.

Π TENTT ((σ MAU = ‘Đỏ’TAU)* DANGKY * THUYTHU))

{tt.TENTT | THUYTHU(tt) and ((∃t)(∃d)TAU(t) and DANGKY(d) and t.MAU = ‘Đỏ’


and t.MATAU = d.MATAU and tt.MATT = d.MATT)}

SELECT TENTT

FROM DANGKY D, THUYTHU TT, TAU T

WHERE TT.MATT = D.MATT AND D.MATAU = T.MATAU AND T.MAU = ‘ĐỎ’

3) Thủy thủ tên Nguyễn Văn A đã đăng ký đi trên những tàu màu gì?

Π MAU ((σ TENTT = ‘Nguyễn Văn A’ THUYTHU) * DANGKY * TAU)

{t.MAU | TAU(t) and ((∃tt)(∃ d) THUYTHU(tt) and DANGKY(d) and tt.TENTT =


‘Nguyễn Văn A’ and tt.MATT = d.MATT and t.MATAU = d.MATAU)}

SELECT DISTINCT MAU

FROM THUYTHU TT, DANGKY D, TAU T

WHERE TT.TENTT = ‘Nguyễn Văn A’ AND TT.MATT = D.MATT AND T.MATAU


= D.MATAU
4) Tên của các thủy thủ đã đăng ký tối thiểu 1 lần.

Cách 1: dùng phép kết.

Cách 2: Dùng IN

Cách 3: Dùng EXISTS

Π TENTT(THUYTHU * DANGKY)

{t.TENTT | THUYTHU(t) and ((∃d) DANGKY(d) and d.MATT = t.MATT)}

5) Tên các thủy thủ đã có lần đăng ký tàu màu đỏ hoặc tàu màu xanh.

Π TENTT(THUYTHU * DANGKY * (σMAU = ‘Đỏ’ (TAU) ∪ σMAU = ‘Xanh’ (TAU)))

Π TENTT(THUYTHU * DANGKY * ΠMATAU(σMAU = ‘Đỏ’ OR MAU = ‘Xanh’ (TAU)))

{tt.TENTT | THUYTHU (tt) and ((∃ d) (∃ t) DANGKY(d) and TAU(t) and (t.MAU =
‘Đỏ’ or t.MAU = ‘Xanh’) and tt.MATT = d.MATT and t.MATAU = d.MATAU)}

SELECT TENTT

FROM DANGKY D, TAU T, THUYTHU TT

WHERE T.MATT = D.MATT AND T.MATAU = D.MATAU AND (MAU = ‘ĐỎ’ OR


MAU = ‘XANH’)

6) Tên của những thủy thủ đã ít nhất 1 lần đăng ký tàu màu đỏ và tàu màu xanh.

T1 ←ΠMATT ((σMAU = ‘Đỏ’ TAU) * DANGKY)

T2←ΠMATT ((σMAU = ‘Xanh’TAU) * DANGKY)

Π TENTT ((T1 ∩ T2) * THUYTHU)

{tt.TENTT | THUYTHU(tt) and ((∃t1)(∃ d1) TAU (t1) and DANGKY(d1) and t1.MAU
= ‘Đỏ’ and t1.MATAU = d1.MATAU and d1.MATT = tt.MATT) and ((∃ t2)(∃ d2)
TAU(t2) and DANGKY(d2) and t2.MAU = ‘Xanh’ and t2.MAUTAU = d2.MATAU and
d2.MATT = tt.MATT)}
SELECT TENTT

FROM THUYTHU

WHERE MATT IN (SELECT MATT

FROM DANGKY DK, TAU T

WHERE DK.MATAU = T.MATAU AND MAU = ‘ĐỎ’)

AND MATT IN (SELECT MATT

FROM DANGKY DK, TAU T

WHERE DK.MATAU = T.MATAU AND MAU = ‘XANH’)

CÁCH KHÁC:

SELECT TENTT

FROM THUYTHU TT, DANGKY DK, TAU T

WHERE DK.MATAU = T.MATAU AND DK.MATT = TT.MATT AND MAU = ‘ĐỎ’)

AND EXISTS (SELECT MATT

FROM DANGKY DK1, TAU T1

WHERE DK1.MATAU = T1.MATAU AND MAU = ‘XANH’

AND DK1.MATT = DK.MATT)

7) Tên của những thủy thủ đã đăng ký tối thiểu 2 con tàu.

Π TENTT (THUYTHU * (ρDK2DANGKY) ⋈DK1.MATT = DK2.MATT ∧ Dk1.MATAU ≠


DK2.MATAU(ρDK1DANGKY))

{tt.TENTT | THUYTHU(tt) and ((∃ d1)(∃ d2)DANGKY(d1) and DANGKY(d2) and


tt.MATT = d1.MATT and tt.MATT = d2.MATT and d1.MATAU != d2.MATAU)}

CÁCH 1:

SELECT TENTT

FROM DANGKY DK1, DANGKY DK2, THUYTHU TT

WHERE DK1.MATT = DK2.MATT AND DK1.MATAU ≠ DK2.MATAU


DK1.MATT = TT.MATT

CÁCH 2:

SELECT TENTT

FROM DANGKY DK1, THUYTHU TT1

WHERE DK1.MATT = TT1.MATT AND EXISTS (SELECT *

FROM DANGKY DK2

WHERE DK2.MATT = DK1.MATT


AND DK2.MATAU <>DK1.MATAU)

CÁCH 3:

SELECT TENTT, COUNT(DISTINCT MATAU)

FROM DANGKY DK, THUYTHU TT

WHERE DK.MATT = TT.MATT

GROUP BY MATT, TENTT

HAVING COUNT(DISTINCT MATAU)>=2

8) Tên của những thủy thủ tuổi > 20 và chưa từng đăng ký tàu màu đỏ.

KQ1 ←ΠMATT(σTUOI>20 THUYTHU) – ΠMATT((σMAU = ‘Đỏ’ TAU) * DANGKY)

Π TENTT(KQ1 * THUYTHU)

{tt.TENTT | THUYTHU(tt) and tt.TUOI > 20 and ((∃ t) (not (∃ d)) TAU(t) and
DANGKY (d) and t.MAU = ‘Đỏ’ and d.MATT = tt.MATT and d.MATAU =
t.MATAU)}

SELECT *

FROM THUYTHU

WHERE TUOI > 20

AND MATT NOT IN (SELECT MATT

FROM DANGKY D, TAU T

WHERE MAU = ‘ĐỎ’ AND D.MATAU = T.MATAU)


9) Tên của những thủy thủ đã đăng ký tất cả những con tàu.

Π TENTT((ΠMATT, MATAU DANGKY ÷ΠMATAUTAU) * THUYTHU)

{tt.TENTT | THUYTHU(tt) and ( ∀t) TAU(t) and (∃ d) DANGKY(d) and d.MATT =


tt.MATT and d.MATAU = t.MATAU)}

SELECT T.MATT, TENTT

FROM DANGKY DK1, THUYTHU T

WHERE DK1.MATT = T.MATT AND NOT EXISTS (SELECT *

FROM TAU T

WHERE NOT EXISTS (SELECT *

FROM DANGKY DK2

WHERE DK2.MATAU = T.MATAU


AND DK2.MATT = DK1.MATT))

10) Tên thủy thủ đã đăng ký tất cả những con tàu màu đỏ.

{tt.TENTT | THUYTHU(tt) and (∀t) TAU(t) (t.MAU = ‘Đỏ’ ⇒ ((∃ d) DANGKY (d) and
d.MATAU = t.MATAU and t.MATT = d.MATT)}

Π TENTT((ΠMATT, MATAU DANGKY ÷ΠMATAU (σMAU=’DO’TAU)) * THUYTHU)

SELECT T.MATT, TENTT

FROM DANGKY DK1, THUYTHU T

WHERE DK1.MATT = T.MATT AND NOT EXISTS (SELECT *

FROM TAU T

WHERE MAU = ‘DO AND ’NOT EXISTS (SELECT *

FROM DANGKY DK2

WHERE DK2.MATAU = T.MATAU


AND DK2.MATT = DK1.MATT))

You might also like