You are on page 1of 124

Trng i hc Cng ngh thng tin n thi cao hc nm 2009

i s quan h v ngn ng SQL Relational Algebra & SQL

PGS.TS. Phc Khoa H thng thng tin

Nm php ton c bn
Selection ( Projection

) ()

: chn. : chiu.

Descartes-product ( ) tch Descartes. Set-difference ( ) hiu Union ( ) hp.

sname

rating
9 8 5 10

Chiu (projection)
sid 28 31 44 58 sname rating age yuppy 9 35.0 lubber 8 55.5 guppy 5 35.0 rusty 10 35.0
S2

yuppy lubber guppy rusty

sname,rating (S 2)
age

V d: Ch gi li cc thuc tnh c ch nh trong danh sch chiu.

35.0 55.5

age(S2)

Chn -selection ()
Chn cc dng tha iu kin.

sid 28 31 44 58

rating > 8(S2)

sname rating age yuppy 9 35.0 lubber 8 55.5 guppy 5 35.0 rusty 10 35.0

sname,rating( rating > 8(S 4 2))

sname yuppy rusty

rating 9 10

Hp v hiu
Cc php ton ny yu cu 2 quan h nhp phi tng thch Cng s thuc tnh. Cng tn v kiu.

Hp- Union
sid 22 31 58
sid 28 31 44 58

sname rating age dustin 7 45.0 lubber 8 55.5 rusty 10 35.0


S1

sid
22 31 58 44 28

sname rating age


dustin lubber rusty guppy yuppy 7 8 10 5 9 45.0 55.5 35.0 35.0 35.0

sname rating age yuppy 9 35.0 lubber 8 55.5 guppy 5 35.0 rusty 10 35.0
S2

S1 S 2

Hiu- Set Difference


sid 22 31 58
sid 28 31 44 58

sname rating age dustin 7 45.0 lubber 8 55.5 rusty 10 35.0


S1

sid 22

sname dustin

rating age 7 45.0

S1 S2

sname rating age yuppy 9 35.0 lubber 8 55.5 guppy 5 35.0 rusty 10 35.0
S2

sid sname rating age 28 yuppy 9 35.0 44 guppy 5 35.0

S2 S1
7

Ton t giao ( Intersection)


cc quan h phi tng thch C th biu din qua php hp v php hiu

R S = R (R S)

Giao - Intersection
sid 22 31 58
sid 28 31 44 58

sname rating age dustin 7 45.0 lubber 8 55.5 rusty 10 35.0


S1

sname rating age yuppy 9 35.0 lubber 8 55.5 guppy 5 35.0 rusty 10 35.0
S2

sid 31 58

sname rating age lubber 8 55.5 rusty 10 35.0

S1 S 2
9

Tch Descartes
Kt tng dng ca quan h u ( R ) vi tng dng ca quan h th hai (S): R X S

10

V d v tch Descartes
Students Courses

stud#
100 200 300

name
Fred Dave Bob

course
PH CM CM

course#
PH CM

name
Pharmacy Computing

Students X Courses =

stud#
100 100 200 200 300 300

Students.name
Fred Fred Dave Dave Bob Bob

course
PH PH CM CM CM CM

course#
PH CM PH CM PH CM

Courses.name
Pharmacy Computing Pharmacy Computing Pharmacy Computing

11

Theta kt
Tch Descartes c p dng iu kin: R <condition> S

12

V d v Theta kt
Students Courses

stud# name
100 200 300 Fred Dave Bob

course
PH CM CM

course#
PH CM

name
Pharmacy Computing

Students
stud#

stud# = 200

Courses
course course# Courses.name

Students.name

200 200

Dave Dave

CM CM

PH CM

Pharmacy Computing

13

Php kt trong :Inner Join (Equijoin)


Php kt Theta vi iu kin <condition> l bng nhau (=) gia kha chnh v kha ngoi. R
<R.primary_key = S.foreign_key>

14

V d v Inner Join
Students Courses

stud# name
100 200 300 Fred Dave Bob

course
PH CM CM

course#
PH CM

name
Pharmacy Computing

Students
stud#

course = course#

Courses
course course# Courses.name

Students.name

100 200 300

Fred Dave Bob

PH CM CM

PH CM CM

Pharmacy Computing Computing

15

Php kt t nhin ( natural join)


Php kt trong (inner join) sinh ra d liu d (trong v d trc ta c: course v course#). loi b trng hp trng ny, ta dng: (Students <course = course#> Courses) hay R1= Students <course = course#> Courses R2= < stud#, Students.name, course, Courses.name > R1 Kt qu ny c gi l kt t nhin (natural join) gia Students v Courses

< stud#, Students.name, course, Courses.name >

16

V d v kt t nhin (Natural Join)


Students Courses

stud# name
100 200 300 Fred Dave Bob

course
PH CM CM

course#
PH CM

name
Pharmacy Computing

R1= Students <course = course#> Courses R2= < stud#, Students.name, course, Courses.name > R1
stud# Students.name course Courses.name

100 200 300

Fred Dave Bob

PH CM CM

Pharmacy Computing Computing

17

Php kt ngoi (Outer Joins)


Php kt trong + cc dng ca bng khng tha <condition>. Php kt ngoi tri: R
<R.primary_key = S.foreign_key>

Tt c cc dng trong R c gi li v cc dng khng tha ca S c dn cc tr NULL

Php kt ngoi phi: R

<R.primary_key = S.foreign_key>

Tt c cc dng trong S c gi li v cc dng khng tha ca R c dn cc tr NULL

18

V d v php kt ngoi tri Left Outer Join


Students Courses

stud# name
100 200 400 Fred Dave Peter

course
PH CM EN

course#
PH CM CH

name
Pharmacy Computing Chemistry

Students
stud#

<course = course#>

Courses
course# Courses.name

Students.name

course

100 200 400

Fred Dave Peter

PH CM EN

PH CM NULL

Pharmacy Computing NULL

19

V d v php kt ngoi phi Right Outer Join


Students Courses

stud# name
100 200 400 Fred Dave Peter

course
PH CM EN

course#
PH CM CH

name
Pharmacy Computing Chemistry

Students
stud#

<course = course#>

Courses
course# Courses.name

Students.name

course

100 200 NULL

Fred Dave NULL

PH CM NULL

PH CM CH

Pharmacy Computing Chemistry

20

Php chia: Division


Dng cho biu thc tt c trong truy vn sau:

Tm m thy th (sids) t tt c (all) cc thuyn (boats).

Vd: cho A c 2 thuc tnh x v y; B ch c mt thuc tnh y:


AB =

{x y

B( x, y A)

A/B (chia) cha tt c cc b (x) sao cho mi b y trong B u c b xy trong A.

21

V d php chia A/B


sno s1 s1 s1 s1 s2 s2 s3 s4 s4 pno p1 p2 p3 p4 p1 p2 p2 p2 p4
pno p2

B1
sno s1 s2 s3 s4

pno p2 p4

B2
sno s1 s4

pno p1 p2 p4

B3

A/B1

A/B2

A/B3
22

sno s1

V d v php chia
Tm tt c khch hng c ti khon ti tt c chi nhnh nm ChVille

Branch (bname, assets, bcity) Account (bname, acct#, cname, balance)

23

V d v php chia
R1: Tm tt c cc chi nhnh ti Chville R2: Tm cp (bname, cname) t Account R3: Cc khch ca r2 c ti khon ti tt c chi nhnh c tn trong r1

r1= r 2 =

bname

bcity ='Chville '

Branch )

r 3 = r 2 r1

bname , cname

( Account )

24

Biu din php chia A/B dng cc ton t c bn

x (( x( A)B) A)
25

C s d liu
Cho CSDL cu lc b thuyn bum Sailors(Sid,Sname, rating, age):thy th Boat(Bid,color): thuyn Reserves(Sid,Bid,ReservedDate):t ch

26

Tm tn thy th (sailors) t thuyn c m (bid) #103 Solution 1: sname(( Reserves) > < Sailors) bid =103
sname (
bid = 103 (Re serves > < Sailors))

Solution 2:

Sailors(Sid,Sname, rating, age):thy th Boat(Bid,color): thuyn Reserves(Sid,Bid,ReservedDate):t ch

27

Tm tn thy th (sailors) t thuyn mu ( red boat)


Thng tin v mu ch c trong quan h Boats, ta cn thm mt php kt:

sname (( Boats) > < Re serves > < Sailors) color =' red '

Gii php tt hn ( ti u truy vn):

sname ( (( Boats) > < Re s) > < Sailors) sid bid color =' red '
Sailors(Sid,Sname, rating, age):thy th Boat(Bid,color): thuyn Reserves(Sid,Bid,ReservedDate):t ch

28

Tm tn thy th (sailors) t thuyn mu v mu xanh lc


(Tempred,
(( Boats) > < Re serves))

sid

color =' red '

(Tempgreen,

sid

((

color =' green'

Boats) > < Re serves))

sname((Tempred Tempgreen) > < Sailors)


29

Tm tn thy th (sailors) t tt c cc thuyn


Php chia:

(Tempsids, (

sid, bid

Re serves) / (

bid

Boats))

< Sailors) sname (Tempsids >


Sailors(Sid,Sname, rating, age):thy th Boat(Bid,color): thuyn Reserves(Sid,Bid,ReservedDate):t ch
30

Chng minh biu thc i s quan h


Cho q l quan h trn tp thuc tnh RS ( RS), chng minh: q R( q) S(q) Chng minh: Cho t q, theo /n ca php chiu t[R] R( q) v t[S] S(q) Ta c theo nh ngha ca php kt: t[RS] R( q) S(q) Do vy t =t[RS] R( q) S(q)

31

Chng minh biu thc i s quan h


Cho quan h r(R) , A v B l hai thuc tnh ca quan h R, chng minh: A=a ( B=b(r) ) = B=b ( A=a(r) ) Chng minh: A=a ( B=b(r) ) = A=a ({t r | t[B]=b})= {t {t r | t[B]=b}| t[A]=a }= {t r| t[A]=a t[B]=b }= {t {t r | t[A]=a}| t[B]=b }= B=b ( A=a(r) )
32

Chng minh biu thc i s quan h


Cho 2 quan h r, s , A l thuc tnh ca quan h R,S. Chng minh: A=a (r s) = A=a ( r) A=a(s) ) Chng minh: A=a (r s) = A=a (t r t s) = { t {t|t r t s}| t[A]=a}= {t|t r v t[A]=a} {t|t s v t[A]=a } A=a ( r ) A=a ( s )

33

i s quan h v ngn ng SQL

34

Ton t mt ngi (unary operations)


Selection

course = Computing Students In SQL:


Select * From Students Where course = Computing;

Projection

stud#, name Students In SQL:


Select stud#, name From Students;

Selection & Projection stud#, name ( course = Computing Students)

In SQL:
Select stud#, name From students Where course = Computing;
35

Ton t hai ngi/kt Binary Operations/Joins


Tch Descartes: Students X Courses

In SQL:
Select * From Students, Courses;

Theta kt: Students <stud# =200> Courses

In SQL:
Select * From Students, Courses Where stud# = 200;
36

Ton t hai ngi/kt


Inner Join (Equijoin): Students <course=course#> Courses

In SQL:
Select * From Students, Courses Where course=course#;

Natural Join: R1= Students

<course = course#>

Courses

R2= < stud#, Students.name, course, Courses.name > R1

In SQL:
Select stud#, Students.name, course, Courses.name From Students, Courses Where course=course#;
37

Php kt ngoi (Outer Joins)


Left Outer Join Students <course = course#> Courses

In SQL:
Select * From Students, Courses Where course = course#(+)

Right Outer Join Students <course = course#> Courses

In SQL:
Select * From Students, Courses Where course(+) = course#

38

T hp cc php ton mt ngi v hai ngi


R1= Students <course=course#> Courses R2= <address=Aberdeen> R1 R3= <Students.name, Course.name> R2

In SQL:
Select Students.name, Courses.name From Students, Courses Where course=course# AND address=Aberdeen;

39

Cc ton t tp hp
Union: R S

In SQL:
Select * From R Union Select * From S;

Intersection: R S

In SQL:
Select * From R Intersect Select * From S;

Difference: R - S

In SQL:
Select * From R Minus Select * From S;
40

Cc ton t trong SQL


Between, In, Like, Not

41

Cc ton t SQL
SELECT * FROM Book WHERE catno BETWEEN 200 AND 400; SELECT * FROM Product WHERE prod_desc BETWEEN C AND S; SELECT * FROM Book WHERE catno NOT BETWEEN 200 AND 400;

42

Cc ton t SQL
SELECT Catno FROM Loan WHERE Date-Returned IS NULL; SELECT Catno FROM Loan WHERE Date-Returned IS NOT NULL;

43

Cc ton t SQL
SELECT Name FROM Member WHERE memno IN (100, 200, 300, 400); SELECT Name FROM Member WHERE memno NOT IN (100, 200, 300, 400);

44

Cc ton t SQL
SELECT Name FROM Member WHERE address NOT LIKE %Aberdeen%; SELECT Name FROM Member WHERE Name LIKE _ES%; Note: In MS Access, use * and # instead of % and _

45

Chn gi tr phn bit


Student

stud#

100Fred Aberdeen 200Dave Dundee 300Bob Aberdeen

name

address

SELECT Distinct address FROM Student;


address
Aberdeen Dundee

46

Cc bi tp v SQL

47

Lc CSDL
Professor(ssn, profname, status, salary) Course(crscode, crsname, credits) Taught(crscode, semester, ssn)

Gi nh (1) Mi kha hc ch c mt gio s ph trch trong trong mi hc k; (2) tt c gio s u c lng khc nhau; (3) tt c gio s c tn khc nhau; (4) tt c kha hc c tn khc nhau; (5) thuc tnh status c th c cc gi tr Full, Associate, v Assistant.
48

Truy vn 1

Lit k tt c gio s dy kha hc c m CSC6710 nhng khng dy kha hc c m CSC7710.

49

Li gii SQH

ssn(crscode=CSC6710(Taught))ssn(crscode=CSC7710(Taught))

50

Li gii SQL

(SELECT ssn From Taught Where crscode = CSC6710) EXCEPT (SELECT ssn From Taught Where crscode = CSC7710))
51

Truy vn 2

Lit k cc gio s dy cc kha hc c m CSC6710 v CSC7710.

52

i s quan h

ssn(crscode=CSC6710 crscode=CSC7710 (Taught), SAI! ssn(crscode=CSC6710(Taught)) ssn(crscode=CSC7710(Taught)), NG!

53

SQL

SELECT T1.ssn From Taught T1, Taught T2, Where T1.crscode = CSC6710 AND T2.crscode=CSC7710 AND T1.ssn=T2.ssn

54

Truy vn 3

Lit k cc gio s khng dy mn c m s CSC7710.

55

i s quan h

ssn(crscode<>csc7710(Taught)), SAI! ssn(Professor)-ssn(crscode=csc7710(Taught)), NG!


56

SQL

(SELECT ssn From Professor) EXCEPT (SELECT ssn From Taught T Where T.crscode = CSC7710)

57

Truy vn 4

Lit k cc gio s dy mn hc c m CSC6710 v CSC7710 trong cng mt hc k

58

i s quan h

ssn(crscode1=CSC6710(Taught[crscode1, ssn, semester]) crscode2=CSC7710(Taught[crscode2, ssn, semester]))


59

SQL

SELECT T1.ssn From Taught T1, Taught T2, Where T1.crscode = CSC6710 AND T2.crscode=CSC7710 AND T1.ssn=T2.ssn AND T1.semester=T2.semester

60

Truy vn 5

Lit k cc gio s dy mn c m CSC6710 hay mn hc c m CSC7710 nhng khng dy c hai mn.


61

i s quan h

ssn(crscode=CSC6710 crscode=CSC7710(Taught))(ssn(crscode=CSC6710(Taught)) ssn(crscode=CSC7710(Taught)))


62

SQL

(SELECT ssn FROM Taught T WHERE T.crscode=CSC6710 OR T.crscode=CSC7710) Except (SELECT T1.ssn From Taught T1, Taught T2, Where T1.crscode = CSC6710) AND T2.crscode=CSC7710 AND T1.ssn=T2.ssn)
63

Truy vn 6

Tr v cc kha hc khng bao gi m.

64

i s quan h

crscode(Course)-crscode(Taught)

65

SQL

(SELECT crscode FROM Course) EXCEPT (SELECT crscode FROM TAUGHT )

66

Truy vn 7

Lit k cc kha hc c dy ti thiu trong 2 hc k.

67

i s quan h

crscode( semester1 <> semester2( Taught[crscode, ssn1, semester1] Taught[crscode, ssn2, semester2]))

68

SQL

SELECT T1.crscode FROM Taught T1, Taught T2 WHERE T1.crscode=T2.crscode AND T1.semester <> T2.semester

69

Truy vn 8

Lit k cc kha hc c dy trong t nht l 10 hc k.

70

SQL

SELECT crscode FROM Taught GROUP BY crscode HAVING COUNT(*) >= 10

71

Truy vn 9

Lit k cc kha hc c dy trong t nht l 5 gio s khc nhau.

72

SQL

SELECT crscode FROM (SELECT DISTINCT crscode, ssn FROM TAUGHT) GROUP BY crscode HAVING COUNT(*) >= 5 SELECT crscode FROM Course C WHERE (SELECT COUNT(DISTINCT *) FROM Taught T WHERE T.crscode = C.crscode ) >=5.
73

Truy vn 10

Lit k tn cc gio s dy kha hc c m CSC6710.

74

i s quan h

profname(crscode=CSC6710(Taught) Professor)

75

SQL

SELECT P.profname FROM Professor P, Taught T WHERE P.ssn = T.ssn AND T.crscode = CSC6710

76

Truy vn 11

Lit k tn ca cc full professors dy mn hc c m CSC6710.

77

i s quan h

profname(crscode=csc6710(Taught) status=full(Professor))

78

SQL

SELECT P.profname FROM Professor P, Taught T WHERE P.status = full AND P.ssn = T.ssn AND T.crscode = CSC6710

79

Truy vn 12

Lit k tn ca cc full professors dy t nht l 2 kha hc trong mt hc k.

80

i s quan h

profname(ssn( crscode1 <> crscode2( Taught[crscode1, ssn, semester] Taught[crscode2, ssn, semester]))) status=full(Professor))
81

SQL

SELECT P.profname FROM Professor P, Taught T1, Taught T2 WHERE P.status = Full AND P.ssn = T1.ssn AND T1.ssn = T2.ssn AND T1.crscode <> T2.crscode AND T1.semester = T2.semester

82

SQL

SELECT P.profname FROM Professor P WHERE status = Full AND ssn IN( SELECT ssn FROM Taught GROUP BY ssn, semester HAVING COUNT(*) >= 2 )
83

Truy vn 13

Xa cc gio s khng dy kha hc no.

84

SQL

DELETE FROM Professor WHERE ssn NOT IN (SELECT ssn FROM Taught )

85

SQL

DELETE FROM Professor WHERE ssn IN ( (SELECT ssn FROM Professor) EXCEPT (SELECT ssn FROM Taught) )
86

SQL

DELETE FROM Professor P WHERE NOT EXISTS ( SELECT * FROM Taught T WHERE T.ssn = P.ssn )

87

Truy vn 14

i tt c tn ch (credits) sang 4 cho cc kha hc c ging dy trong hc k ma thu nm 2006 (f2006 semester).

88

SQL

UPDATE Course SET credits = 4 WHERE crscode IN ( SELECT crscode FROM Taught WHERE semester = f2006 )
89

Truy vn 15

Lit k tn ca cc gio s dy hn 30 tn ch kha hc.

90

SQL

SELECT profname FROM Professor WHERE ssn IN ( SELECT T.ssn FROM Taught T, Course C WHERE T.crscode = C.crscode GROUP BY T.ssn HAVING SUM(C.credits) > 30 )
91

Truy vn 16

Lit k tn ca cc gio s dy nhiu kha hc nht trong hc k ma xun nm 2006 (S2006).

92

SQL

SELECT profname FROM Professor WHERE ssn IN( SELECT ssn FROM Taught WHERE semester = S2006 GROUP BY ssn HAVING COUNT(*) = (SELECT MAX(Num) FROM (SELECT ssn, COUNT(*) as Num FROM Taught WHERE semester = S2006 GROUP BY ssn) ) )

93

Truy vn 17

Lit k tn cc kha hc m gio s Smith dy trong hc k ma thu nm 2007.

94

i s quan h

crsname(profname=Smith(Professor) semester=f2007(Taught) Course)


95

SQL

SELECT crsname FROM Professor P, Taught T, Course C WHERE P.profname = Smith AND P.ssn = T.ssn AND T.semester = F2007 AND T.crscode = C.crscode

96

Truy vn 18

Hy lit k theo th t thi gian cc kha hc m gio s c m s ssn = 123456789 dy trong tng hc k.

97

SQL

SELECT semester, COUNT(*) FROM Taught WHERE ssn = 123456789 GROUP BY semester ORDER BY semester ASC

98

Truy vn 19

Hy lit k theo th t t in tn ca tng gio s v s cc kha hc ging dy.

99

SQL

SELECT P.profname, COUNT(*) FROM Professor P, Taught T WHERE P.ssn = T.ssn GROUP BY P.ssn, P.profname ORDER BY P.profname ASC

100

Truy vn 20

Xa cc gio s dy t hn 10 kha hc.

101

SQL

DELETE FROM Professor WHERE ssn IN( SELECT ssn FROM Taught GROUP BY ssn HAVING COUNT(*) < 10 )
102

Truy vn 21

Xa cc gio s dy t hn 40 tn ch.

103

SQL

DELETE FROM Professor WHERE ssn IN( SELECT T.ssn FROM Taught T, Course C WHERE T.crscode = C.crscode GROUP BY ssn HAVING SUM(C.credits) < 40 )
104

Truy vn 22

Lit k cc gio s khng dy bt k kha hc no trong 3 hc k (F2006, W2007, F2007).

105

SQL

SELECT * FROM Professor P WHERE NOT EXISTS( SELECT * FROM Taught WHERE P.ssn = T.ssn AND (T.semester = F2006 OR T.semester = W2007 OR T.semester=F2007)) )
106

Truy vn 23

Lit k tn cc kha hc m gio s Smith khng dy.

107

i s quan h

crsname(Course) crsname(profname=Smith(Professor) (Taught) Course)

108

SQL

SELECT crsname FROM Course C WHERE NOT EXISTS SELECT * FROM Professor P, Taught T WHERE P.profname=Smith AND P.ssn = T.ssn AND T.crscode = C.crscode )
109

Truy vn 24

Lit k tn cc kha hc c ging dy bi tt c gio s.

110

i s quan h

crscode, ssn(Taught)/ ssn(Professor)

111

SQL

SELECT crscode FROM Taught T1 WHERE NOT EXISTS( (SELECT ssn FROM Professor) EXCEPT (SELECT ssn FROM Taught T2 WHERE T2.crscode = T1.crscode) )

112

Truy vn 25

Lit k tn ca cc kha hc c ging dy trong tt c cc hc k.

113

i s quan h

crscode, semester(Taught)/ semester(Taught)

114

SQL

SELECT crscode FROM Taught T1 WHERE NOT EXISTS( (SELECT semester FROM Taught) EXCEPT (SELECT semester FROM Taught T2 WHERE T2.crscode = T1.crscode) )

115

Truy vn 26

Lit k cc kha hc CH c ging dy bi cc tr l gio s (assisitant) professors.

116

i s quan h

crscode(Course) - crscode (statusAssistant(Professor)

Taught)

117

SQL

SELECT crscode FROM Course C WHERE c.crscode NOT IN( (SELECT crscode FROM Taught T, Professor P WHERE T.ssn = P.ssn AND P.status=Junior )
118

Truy vn 27

Lit k tn ca cc gio s ging dy nhiu kha hc nht trong hc k Fall 2001.

119

SQL Solution
SELECT * FROM Professor P1 WHERE Not EXISTS ( SELECT * FROM Professor P2 WHERE( (SELECT COUNT(*) FROM Taught WHERE Taught.ssn = P2.ssn AND Taught.semester=F2001) > (SELECT COUNT(*) FROM Taught WHERE Taught.ssn = P1.ssn AND Taught.semester=F2001) )

120

Truy vn 28

Lit k tn ca gio s c lng cao nht.

121

SQL Solution

SELECT * FROM Professor WHERE salary = ( (SELECT MAX(salary) FROM Professor P )

122

Truy vn 29

Lit k tn ca gio s c lng cao xp th nh.

123

SQL Solution

SELECT * FROM Professor P1 WHERE 1 = ( (SELECT COUNT(*) FROM Professor P2 WHERE P2.salary > P1.salary )
124

You might also like