SELECT

Werbung
Vorlesung Datenbanken
2
Wintersemester 2012/13
Das Relationenmodell: Sprachen und Systeme
E.F. Codd, 1970
2.1 Grundlegende Definitionen
Sei U eine endliche, universelle Attributmenge. Sei X eine abzählbare,
universelle Wertemenge. Sei NULL ∈ X ein ausgezeichneter Nullwert.
Sei dom : U → 2X eine Funktion, welche jedem Attribut A ∈ U einen
nichtleeren Wertebereich dom(A) ⊆ X mit NULL ∈ dom(A) zuordnet.
Tupel und Relationen werden analog zu Entities und Entity–Mengen
definiert.
Prof. Dr. Dietmar Seipel
64
Vorlesung Datenbanken
Wintersemester 2012/13
Definition (Tupel, Relation)
1. Ein Tupel t über V ⊆ U ist eine Abbildung, welche jedem Attribut
A ∈ V einen Wert t(A) ∈ dom(A) zuordnet.
def (t) := V heißt Definitionsbereich von t.
Die Projektion t[X] von t auf X ⊆ V ist die Abbildung mit dem
eingeschränkten Definitionsbereich X.
2. Eine Menge r von Tupeln über V heißt Relation über V .
Beispiel (EMPLOYEE) V = { FNAME, MINIT, LNAME, . . . , DNO }
t(FNAME) = ’John’, t(MINIT) = ’B’, t(LNAME) = ’Smith’,
t(SSN) = ’444444444’, . . . , t(SUPERSSN) = ’222222222’, t(DNO) = 5.
Prof. Dr. Dietmar Seipel
FNAME
MINIT
LNAME
SSN
...
SUPERSSN
DNO
John
B
Smith
444444444
...
222222222
5
65
Vorlesung Datenbanken
Wintersemester 2012/13
Definition (Relationenschema)
1. R = (V, K, NOTNULL) heißt Relationenschema mit
K ⊆ NOTNULL ⊆ V ⊆ U
2. def (R) := V heißt auch Definitionsbereich von R.
3. K und NOTNULL spezifizieren intrarelationale Bedingungen für R:
• K heißt Primärschlüssel von R,
• NOTNULL heißt die Menge der NOTNULL–Attribute von R.
Beispiel (EMPLOYEE)
V
=
{ FNAME, MINIT, LNAME, SSN, BDATE,
ADDRESS, SEX, SALARY, SUPERSSN, DNO },
K
=
{ SSN },
NOTNULL
=
{ FNAME, LNAME, SSN, DNO }.
Prof. Dr. Dietmar Seipel
66
Vorlesung Datenbanken
Wintersemester 2012/13
Definition (Relation)
Sei R = (V, K, NOTNULL) ein Relationenschema.
Eine Relation r für R ist eine Menge von Tupeln über V ,
die zusätzlich die intrarelationalen Bedingungen von R erfüllen:
1.
∀ t, t′ ∈ r : t[K] = t′ [K] ⇒ t = t′ ,
2.
∀ A ∈ NOTNULL : t(A) 6= NULL.
Beispiel (EMPLOYEE)
Prof. Dr. Dietmar Seipel
FNAME
MINIT
LNAME
SSN
...
SUPERSSN
DNO
John
B
Smith
444444444
...
222222222
5
...
...
...
...
...
...
...
James
E
Borg
111111111
...
NULL
1
67
Vorlesung Datenbanken
Wintersemester 2012/13
Definition (Fremdschlüsselbedingung)
Sei R = { R1 , . . . , Rn } eine Menge von Relationenschemata
Ri = (Vi , Ki , NOTNULLi )
und R = (V, K, NOTNULL) ein einzelnes Relationenschema. Dann heißt
FK = (R, KF , QFIER, R, DRULE , URULE )
Fremdschlüsselbedingung (foreign key constraint), falls gilt:
1. KF ⊆ V
2. QFIER ∈ { exactly one, at least one, all }
3. DRULE , URULE ∈
{ N O ACTION , S ET N ULL , S ET D EFAULT , C ASCADE }
R heißt referenzierendes Relationenschema, die Ri heißen referenzierte
Relationenschemata.
Prof. Dr. Dietmar Seipel
68
Vorlesung Datenbanken
Wintersemester 2012/13
Eine Teilmenge KF ⊆ V der Attributmenge V von R referenziert die
Schlüssel Ki der Relationenschemata Ri .
R = (V, K, . . . )
KF
^
R1 = (V1 , K1 , . . . ) . . . Rn = (Vn , Kn , . . . )
K1
^
...
Kn
• Sei r eine erlaubte Instanz von R, und
• sei ri eine erlaubte Instanz von Ri , für 1 ≤ i ≤ n.
Ein Tupel t ∈ r referenziert die Relation ri ,
falls es ein Tupel ti ∈ ri gibt, mit t[KF ] = ti [Ki ].
Da Ki der Schlüssel von Ri ist, gibt es zu jedem t ∈ r maximal ein solches
referenziertes Tupel ti ∈ ri .
Prof. Dr. Dietmar Seipel
69
Vorlesung Datenbanken
Wintersemester 2012/13
Ein Tupel t ∈ r referenziert ri , falls es ein Tupel ti ∈ ri gibt, mit
t[KF ] = ti [Ki ].
...
KF
...
t[KF ]
...
K1
...
t1 [K1 ]
Prof. Dr. Dietmar Seipel
...
...
Kn
...
U
tn [Kn ]
70
Vorlesung Datenbanken
Wintersemester 2012/13
Die Fremdschlüsselbedingung FK wird von
• der erlaubten Instanz r von R und
• den erlaubten Instanzen ri von Ri , für 1 ≤ i ≤ n,
erfüllt, falls für alle Tupel t ∈ r gilt:
(∀A ∈ KF : t(A) = NULL) ∨
(QFIER = exactly one ⇒ t referenziert genau ein ri ) ∨
(QFIER = at least one ⇒ t referenziert mindestens ein ri ) ∨
(QFIER = all ⇒ t referenziert alle ri ).
Der Normalfall ist n = 1.
Dann fallen “exactly one”, “at least one” und “all” zusammen.
In S QL können momentan nur Fremdschlüsselbedingungen mit n = 1
referenzierten Relationenschemata spezifiziert werden.
Prof. Dr. Dietmar Seipel
71
Vorlesung Datenbanken
Wintersemester 2012/13
Inklusionsabhängigkeit
Eine Fremdschlüsselbedingung
FK = (R, KF , QFIER, R, DRULE , URULE )
mit nur einem referenzierten Relationenschema
R1 = (V1 , K1 , NOTNULL1 )
ist äquivalent zu einer Inklusionsabhängigkeit, denn für die zugehörigen
erlaubten Instanzen muß folgendes gelten:
ΠKF (r) \ { tNULL } ⊆ ΠK1 (r1 ),
wobei tNULL das Tupel über KF mit lauter Nullwerten ist.
Diese Bedingung nennt man eine Inklusionsabhängigkeit.
Prof. Dr. Dietmar Seipel
72
Vorlesung Datenbanken
Wintersemester 2012/13
Beispiel (COMPANY)
Für die Tabelle E MPLOYEE gilt folgendes:
• Wenn ein Angestellter einen von NULL verschiedenen
S UPERSSN–Eintrag hat, dann muß es genau ein referenziertes Tupel in
E MPLOYEE geben mit diesem S SN–Eintrag.
Wenn ein Angestellter keinen Vorgesetzten hat (so wie der Chef James
E. Borg der Firma), dann kann man NULL eintragen.
• Aufgrund der NOTNULL–Bedingung für D NO muß jeder Angestellte
einer Abteilung zugeordnet sein. Die von NULL verschiedene D NO
referenziert genau ein Tupel in D EPARTMENT mit demselben
D NUMBER–Eintrag.
Da S SN und D NUMBER die Primärschlüssel ihrer Tabellen sind, gibt es
jeweils maximal ein referenziertes Tupel.
Prof. Dr. Dietmar Seipel
73
Vorlesung Datenbanken
Wintersemester 2012/13
E MPLOYEE
FNAME
MINIT
LNAME
SSN
BDATE
ADDRESS
SEX
SALARY
SUPERSSN
DNO
John
B
Smith
444444444
1955-01-09
731 Fondren, Houston, TX
M
30000
222222222
5
Franklin
T
Wong
222222222
1945-12-08
638 Voss, Houston, TX
M
40000
111111111
5
Alicia
J
Zelaya
777777777
1958-07-19
3321 Castle, Spring, TX
F
25000
333333333
4
Jennifer
S
Wallace
333333333
1931-06-20
291 Berry, Bellaire, TX
F
43000
111111111
4
Ramesh
K
Narayan
555555555
1952-09-15
975 Fire Oak, Humble, TX
M
38000
222222222
5
Joyce
A
English
666666666
1962-07-31
5631 Rice, Houston, TX
F
25000
222222222
5
Ahmad
V
Jabbar
888888888
1959-03-29
980 Dallas, Houston, TX
M
25000
333333333
4
James
E
Borg
111111111
1927-11-10
450 Stone, Houston, TX
M
55000
NULL
1
6
D EPARTMENT
DNAME
DNUMBER
MGRSSN
MGRSTARTDATE
Headquarters
1
111111111
1971-06-19
Administration
4
333333333
1985-01-01
Research
5
222222222
1978-05-22
6
Jede D NO–Zelle in E MPLOYEE referenziert genau eine D NUMBER–Zelle in
D EPARTMENT mit demselben Attributwert. Analog für S UPERSSN.
Prof. Dr. Dietmar Seipel
74
Vorlesung Datenbanken
Wintersemester 2012/13
Die Relationship–Typen aus dem ER–Diagramm führen zu folgenden
Fremdschlüsselbedingungen im Relationenmodell:
1. Die 1:N–Beziehung WORKS_FOR, welche als Attribut DNO in die
Relation EMPLOYEE integriert wurde, führt zu
FK1 = ( EMPLOYEE, {DNO}, _, {DEPARTMENT}, _, _ ).
Das Attribut DNO von EMPLOYEE referenziert den Schlüssel
DNUMBER von DEPARTMENT.
2. Die 1:N–Beziehung SUPERVISION, welche als Attribut SUPERSSN in
die Relation EMPLOYEE integriert wurde, führt zu
FK2 = ( EMPLOYEE, {SUPERSSN}, _, {EMPLOYEE}, _, _ ).
Das Attribut SUPERSSN von EMPLOYEE referenziert den Schlüssel
SSN von EMPLOYEE.
Prof. Dr. Dietmar Seipel
75
Vorlesung Datenbanken
Wintersemester 2012/13
3. Die 1:1–Beziehung MANAGES mit Existenzabhängigkeit, welche als
Attribut MGRSSN in die Relation DEPARTMENT integriert wurde,
führt zu
FK3 = ( DEPARTMENT, {MGRSSN}, _, {EMPLOYEE}, _, _ ).
Das Attribut MGRSSN von DEPARTMENT referenziert den Schlüssel
SSN von EMPLOYEE.
4. Die N:M–Beziehung WORKS_ON, welche zu einer eigenen Relation
wurde, führt zu je einer Fremdschlüsselbedingung auf die beteiligten
Relationen:
FK4 = ( WORKS_ON, {ESSN}, _, {EMPLOYEE}, _, _ )
FK5 = ( WORKS_ON, {PNO}, _, {PROJECT}, _, _ )
Das Attribut ESSN von WORKS_ON referenziert den Schlüssel SSN
von EMPLOYEE. Das Attribut PNO von WORKS_ON referenziert den
Schlüssel PNUMBER von PROJECT.
Prof. Dr. Dietmar Seipel
76
Vorlesung Datenbanken
Wintersemester 2012/13
Fremdschlüsselbedingungen mit mehreren referenzierten Relationenschemas
R1 , . . . , Rn treten z.B. auf, wenn ein referenziertes Relationenschema
zerlegt wird.
Beispiel (COMPANY)
Falls man das Relationenschema EMPLOYEE zerlegt in
• ein Schema Ei mit allen internen und
• ein weiteres Schema Ee mit allen externen Angestellten,
so erhält man anstelle von FK4 die neue Fremdschlüsselbedingung FK′4 :
FK′4 = ( WORKS_ON, {ESSN}, exactly one, {Ei , Ee }, _, _ )
Das Attribut ESSN von WORKS_ON referenziert den Schlüssel SSN von Ei
bzw. Ee .
Prof. Dr. Dietmar Seipel
77
Vorlesung Datenbanken
Wintersemester 2012/13
Fremdschlüssel stellen inter–relationale Bedingungen für
Datenbankschemata dar.
Definition (Datenbankschema, Datenbank–Instanz)
1. Ein relationales Datenbankschema S = (R, FK) besteht aus
• einer Menge von Relationenschemata,
R = { R1 , . . . , Rn },
• und einer Menge FK von Fremdschlüsseln auf R.
2. Eine erlaubte Datenbank–Instanz von S ist eine Menge
I = { r1 , . . . , rn }
von Relationen für die Relationenschemata Ri , welche die
Fremdschlüsselbedingungen aus FK erfüllen.
3. Dann ist DB = (S, I) eine relationale Datenbank.
Prof. Dr. Dietmar Seipel
78
Vorlesung Datenbanken
Wintersemester 2012/13
Fremdschlüsselbedingungen sind für Operationen (Löschen, Modifizieren)
auf den referenzierten Relationen relevant.
D ELETE– und U PDATE–Modi für Fremdschlüsselbedingungen
N O ACTION: Es erfolgt keine Aktion.
S ET N ULL, S ET D EFAULT:
Beim Löschen und Update von referenzierten Tupeln werden die Werte
der referenzierenden Attribute auf NULL bzw. auf den DEFAULT–Wert
gesetzt. Dies erfolgt nur, soweit keine NOTNULL–Bedingungen verletzt
werden; ansonsten muß die Operation abgelehnt werden.
C ASCADE:
Beim Löschen von referenzierten Tupeln werden alle referenzierenden
Tupel ebenfalls gelöscht. Beim Update werden die Werte der
referenzierenden Fremdschlüsselattribute auf die neuen Werte der
referenzierten Attribute gesetzt.
Prof. Dr. Dietmar Seipel
79
Vorlesung Datenbanken
Wintersemester 2012/13
Zyklische Fremdschlüsselbedingungen müssen geeignet behandelt werden.
Beispiel (Zyklus)
EMPLOYEE
...
SSN
...
DNO
DEPARTMENT
...
Prof. Dr. Dietmar Seipel
DNUMBER
MGRSSN
...
80
Vorlesung Datenbanken
Wintersemester 2012/13
2.2 Relationale Algebra
äquivalente relationale Anfragesprachen:
• Relationale Algebra
• Relationale Kalküle (Tupelkalküle, Wertebereichskalküle)
Relationale Algebra: 9 Operatoren
• 4 traditionelle Mengenoperatoren:
Vereinigung ∪, Schnitt ∩, Differenz \, kartesisches Produkt ×
• 5 spezifische relationale Operatoren:
Selektion σ, Projektion π, Join ⊲⊳, Division ÷, Umbenennung ̺
Das Ergebnis einer relationalen Operation ist wieder eine Relation,
d.h. die Relationale Algebra ist abgeschlossen.
Prof. Dr. Dietmar Seipel
81
Vorlesung Datenbanken
Wintersemester 2012/13
Kartesisches Produkt
1. Für zwei Tupel t = (t1 , . . . , tn ) und t′ = (t′1 , . . . , t′m ) ist
t × t′ = (t1 , . . . , tn , t′1 , . . . , t′m ).
2. Für zwei Relationen r und s über Vr bzw. Vs betrachten wir das
kartesische Produkt r × s = { t × t′ | t ∈ r, t′ ∈ s } als eine Relation
über der Vereinigung V = Vr ∪· Vs mit Duplikaten;
V ist eine Multimenge, falls Vr ∩ Vs 6= ∅. r × s enthält |r| · |s| Tupel.
r×s
s
A
B
C
D
1
2
2
5
1
2
2
6
1
2
3
7
r
A
Prof. Dr. Dietmar Seipel
C
D
2
5
2
6
5
6
2
5
3
7
5
6
2
6
5
6
3
7
B
1
2
5
6
⇒
82
Vorlesung Datenbanken
Wintersemester 2012/13
Suchprädikate
• Vergleichsoperatoren:
OP = { =, 6=, <, >, ≤, ≥ }
• θ := A ⊙ B, mit A, B ∈ U , ⊙ ∈ OP, ist ein Suchprädikat mit
def (θ) = { A, B }; z.B. θ = (A < B).
Für ein Tupel t mit def (θ) ⊆ def (t) gilt genau dann θ(t) = true,
wenn t(A) ⊙ t(B).
• θ := A ⊙ a, mit A ∈ U, a ∈ dom(A), ⊙ ∈ OP, ist ein Suchprädikat
mit def (θ) = { A }; z.B. θ = (A = 1).
Für ein Tupel t mit def (θ) ⊆ def (t) gilt genau dann θ(t) = true,
wenn t(A) ⊙ a.
Prof. Dr. Dietmar Seipel
83
Vorlesung Datenbanken
Wintersemester 2012/13
• Sind θ, θ1 , θ2 Suchprädikate, dann auch
θ1
AND θ2 ,
θ1
OR θ2 , NOT
θ,
und es gilt def (θ1 AND θ2 ) = def (θ1 OR θ2 ) = def (θ1 ) ∪ def (θ2 ),
def (NOT θ) = def (θ); z.B. θ = (A > 4) AND (B 6= 1).
Für ein Tupel t mit def (θ1 ) ∪ def (θ2 ) ⊆ def (t) gilt
(θ1
(θ1
AND θ2 )(t)
= θ1 (t) AND θ2 (t),
OR θ2 )(t) = θ1 (t) OR θ2 (t).
Für ein Tupel t mit def (θ) ⊆ def (t) gilt
(NOT θ)(t) =
NOT
θ(t).
Für θ = (A ≤ B) AND (C 6= 1) und {A, B, C} ⊆ def (t) gilt
θ(t) = (t(A) ≤ t(B)) AND (t(C) 6= 1).
Der Definitionsbereich def (θ) eines Suchprädikats θ ist also immer die
Menge aller in θ vorkommenden Attribute A ∈ U .
Prof. Dr. Dietmar Seipel
84
Vorlesung Datenbanken
Wintersemester 2012/13
spezifische relationale Operatoren
Sie R die Menge aller Relationen über einer Attributmenge V ⊆ U .
Selektion:
σθ : R −→ R
Falls def (θ) ⊆ def (r), so enthält σθ (r) alle Tupel aus r, welche das
Suchprädikat θ erfüllen:
σθ (r) := { t ∈ r | θ(t) = true }.
Berechnung: |r| Schritte
Projektion:
πV : R −→ R
Falls V ⊆ def (r), so erhalten wir πV (r) durch Projektion aller
Tupel aus r auf V :
πV (r) := { t[V ] | t ∈ r }.
Berechnung: |r| Schritte
Prof. Dr. Dietmar Seipel
85
Vorlesung Datenbanken
Wintersemester 2012/13
Verbund (Join, Theta–Join):
⊲⊳θ : R × R −→ R
Sei θ ein Suchprädikat, Vi = def (ri ) und V = V1 ∪· V2 die
Vereinigung mit Duplikaten.
Falls def (θ) ⊆ V , so ist r1 ⊲⊳θ r2 die Relation über V mit allen
Tupeln t des kartesischen Produkts r1 × r2 , welche θ erfüllen:
r1 ⊲⊳θ r2 := { t ∈ r1 × r2 | θ(t) = true } = σθ (r1 × r2 ).
bei lauter Gleichheitsoperatoren in θ: Equi–Join.
Berechnung (Nested Loop–Join):
• Finde zu jedem Tupel t1 ∈ r1 alle Tupel t2 ∈ r2 , so daß
t = t1 × t2 das Suchprädikat θ erfüllt. −→ |r1 | · |r2 | Schritte
• Ein Equi–Join über eine Fremdschlüssel/Schlüssel–Beziehung
kann den Index über r2 verwenden. −→ |r1 | · log2 |r2 | Schritte
Beispiel: EMPLOYEE ⊲⊳DNO=DNUMBER DEPARTMENT
Prof. Dr. Dietmar Seipel
86
Vorlesung Datenbanken
Wintersemester 2012/13
Selektion und Projektion:
ΠA (r)
r
A
σA<B (r)
B
1
2
4
3
5
6
⇒
A
B
1
2
5
6
A
1
4
5
Equi–Join:
s
r
C
A
Prof. Dr. Dietmar Seipel
r ⊲⊳B=C s
D
B
1
2
3
4
5
6
2
5
2
6
3
7
4
8
⇒
A
B
C
D
1
2
2
5
1
2
2
6
3
4
4
8
87
Vorlesung Datenbanken
Wintersemester 2012/13
Natural Join: Join über gemeinsame Attribute
Sie Vi = def (ri ) und V = V1 ∪ V2 die Vereinigung ohne Duplikate.
Falls def (θ) ⊆ V , so ist der Natural Join r1 ⊲⊳ r2 die Menge aller
Tupel über V , deren Projektionen auf Vi in ri liegen:
r1 ⊲⊳ r2 := { t | def (t) = V ∧ t[V1 ] ∈ r1 ∧ t[V2 ] ∈ r2 }.
Zwei Tupel ti ∈ ri werden zu einem Tupel t ∈ r1 ⊲⊳ r2 verbunden,
falls sie auf den gemeinsamen Attributen übereinstimmen:
t1 [V1 ∩ V2 ] = t2 [V1 ∩ V2 ] :


für A ∈ V1 \ V2 ,

 t1 (A),
t(A) =
t2 (A),
für A ∈ V2 \ V1 ,



t1 (A) = t2 (A), für A ∈ V1 ∩ V2 .
r1 ⊲⊳ r2 entspricht einem Equi–Join mit Gleichheitsprädikaten über
V1 ∩ V2 gefolgt von einer Projektion zur Elimination doppelter Attribute.
Prof. Dr. Dietmar Seipel
88
Vorlesung Datenbanken
Wintersemester 2012/13
Der Natural Join entspricht einem Equi–Join mit Projektion:
r ⊲⊳ s′ = ΠA,r.B,D (r ⊲⊳ r.B=s′ .B s′ ).
s′
r ⊲⊳ s′
r
B
A
D
B
1
2
3
4
5
6
r ⊲⊳ r.B=s′ .B s′
2
5
2
6
3
7
4
8
⇒
A
B
D
A
B
B
D
1
2
5
1
2
2
5
1
2
6
1
2
2
6
3
4
8
3
4
4
8
Der Equi–Join r ⊲⊳ r.B=s′ .B s′ ohne Projektion würde hingegen eine
Relation erzeugen, in der das Attribut B doppelt vorkommt.
Wir können kurz ΠA (r) für Π{A} (r) und ΠA1 ,... ,An (r) für Π{A1 ,... ,An } (r)
schreiben.
Prof. Dr. Dietmar Seipel
89
Vorlesung Datenbanken
Wintersemester 2012/13
Outer Join:
Tupel aus r bzw. s, die keinen Join–Partner finden, werden durch
NULL–Werte aufgefüllt.
A
B
C
D
1
2
2
5
1
2
2
6
3
4
4
8
NULL
NULL
3
7
5
6
NULL
NULL
Durch Projektion des Outer Join u auf die beiden Attributmengen
Vr bzw. Vs und Elimination der reinen NULL–Tupel erhält man
wieder die ursprünglichen Relationen:
r = σA6=NULL OR B6=NULL (ΠA,B (u)),
s = σC6=NULL OR D6=NULL (ΠC,D (u)).
Prof. Dr. Dietmar Seipel
90
Vorlesung Datenbanken
Division (Faktorisierung):
Wintersemester 2012/13
÷ : R × R −→ R
Falls def (s) ⊆ def (r), so definieren wir r ÷ s als die maximale
Relation über def (r) \ def (s), deren kartesisches Produkt mit s in r
enthalten ist: (r ÷ s) × s ⊆ r (vgl. ganzzahlige Division).
Mathematische Formalisierung (Exkurs):
r ÷ s := { t | def (t) = def (r) \ def (s) ∧ ∀u ∈ s : t × u ∈ r },
wobei (t1 , . . . , tn ) × (s1 , . . . , sm ) = (t1 , . . . , tn , s1 , . . . , sm ).
Für r, s ∈ IN+ ist t = r ÷ s die maximale natürliche Zahl, so daß t × s ≤ r.
Umbenennung (Renaming):
̺Θ : R −→ R
Θ = { A1 7→ B1 , . . . , Ak 7→ Bk } ist eine Umbenennung der
Attribute. Falls V = { A1 , . . . , Ak } ⊆ def (r), so erhält man die
Relation ̺Θ (r), indem jedes Attribut Ai in Bi umbenannt wird;
Attribute A von r, mit A 6∈ V , bleiben unverändert.
Prof. Dr. Dietmar Seipel
91
Vorlesung Datenbanken
r=
r=
Wintersemester 2012/13
A
B
C
7
1
2
7
3
4
9
1
2
A
B
C
7
1
2
7
3
4
9
1
2
9
3
4
s=
s=
B
C
1
2
3
4
B
C
1
2
3
4
⇒ r÷s=
A
7
A
⇒ r÷s=
7
9
Für ganze Zahlen gilt z.B. 3 ÷ 2 = 1 und 4 ÷ 2 = 2.
Prof. Dr. Dietmar Seipel
92
Vorlesung Datenbanken
Wintersemester 2012/13
Beispiel (COMPANY)
Finde die Namen aller Angestellten heraus, die an allen Projekten
mitarbeiten, welche von Abteilung Nummer 5 kontrolliert werden:
r1
=
̺{PNUMBER7→PNO} ( ΠPNUMBER (σDNUM = 5 (PROJECT))),
r2
=
ΠESSN,PNO (WORKS_ON),
r3
=
ΠFNAME,LNAME (EMPLOYEE ⊲⊳SSN=ESSN (r2 ÷ r1 )).
r2
ESSN
PNO
r1
222222222
2
PNO
444444444
1
r2 ÷ r1
444444444
2
ESSN
FNAME
LNAME
1
444444444
3
3
444444444
John
Smith
2
555555555
666666666
1
666666666
Joyce
English
666666666
2
666666666
3
666666666
10
3
r3
Der Join zur Berechnung von r3 könnte nach Umbenennung von r2 ÷ r1
mittels {ESSN 7→ SSN} auch als Natural Join geschrieben werden.
Prof. Dr. Dietmar Seipel
93
Vorlesung Datenbanken
Wintersemester 2012/13
Einfache Optimierung in der relationalen Algebra
Selektion und Projektion sollten in Ausdrücken der relationalen Algebra
frühzeitig angewendet werden, da sie die Anzahl der Tupel einer Relation
unter Umständen deutlich verkleinern können:
r
s
A
B
A
C
a
b1
a
c1
...
...
...
...
a
bn
a
cn
ΠA (r)
⇒
σC=ci (s)
A
A
C
a
a
ci
Der Join r ⊲⊳ s enthält n2 Tupel, aber
s′ = σC=ci (ΠA,C (r ⊲⊳ s)) = ΠA,C (r ⊲⊳ σC=ci (s)) = ΠA (r) ⊲⊳ σC=ci (s)
kann aus ΠA (r) und σC=ci (s) berechnet werden, ohne daß man r ⊲⊳ s
berechnen muß. Hier enthält s′ nur 1 Tupel, denn s′ = σC=ci (s).
Prof. Dr. Dietmar Seipel
94
Vorlesung Datenbanken
Wintersemester 2012/13
2.3 Die relationale Datenbanksprache SQL
Relationenalgebra
Der Benutzer muß beim Formulieren der Anfrage angeben, auf welche Weise
das gewünschte Resultat berechnet werden soll.
Deklarative High–Level–Sprachschnittstellen
Der Benutzer gibt auf sehr abstrakte Weise an, wie das gewünschte Resultat
der Anfrage aussehen soll. Der Ausführungsplan inklusive der
Anfrageoptimierung wird vom System erstellt.
ANSI–Standards:
SQL1: 1986
SQL2: 1992
SQL3: objektorientierte Erweiterungen, . . .
Prof. Dr. Dietmar Seipel
95
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.1 Datendefinition in SQL
Im Großen und Ganzen kann man einen ER–Entwurf in SQL mittels
C REATE TABLE–Statements umsetzen:
1. Für jedes Attribut einer Tabelle wird auch ein Datentyp angegeben, und
möglicherweise eine NOT NULL–Bedingung und ein DEFAULT–Wert.
2. Eine Attributkombination K wird mittels P RIMARY K EY (K) zum
primären Schlüssel mit automatischer NOT NULL–Bedingung gemacht.
Nach diesem werden die Datensätze auf dem Sekundärspeicher
organisiert, und es wird automatisch ein Index angelegt.
3. Weitere Attributkombinationen X können mittels U NIQUE (X) zu
sekundären Schlüsseln gemacht werden. NOT NULL–Bedingungen
müssen hierfür bei Bedarf explizit angegeben werden.
Prof. Dr. Dietmar Seipel
96
Vorlesung Datenbanken
Wintersemester 2012/13
4. Fremdschlüsselbedingungen von einer Attributkombinationen X auf
einen Schlüssel K einer Tabelle T werden mittels
F OREIGN K EY (X) R EFERENCES T (K)
vereinbart.
Erzeugen einer Datenbank
Vor dem erste C REATE TABLE–Statement muß man die Datenbank
erzeugen und eine Verbindung damit aufbauen:
CREATE DATABASE COMPANY;
USE COMPANY;
Alle folgenden S QL–Statements richten sich dann an diese Datenbank.
Prof. Dr. Dietmar Seipel
97
Vorlesung Datenbanken
Wintersemester 2012/13
Erzeugen einer Tabelle
CREATE TABLE EMPLOYEE (
FNAME
VARCHAR(15) NOT
MINIT
CHAR,
LNAME
VARCHAR(15) NOT
SSN
CHAR(9)
NOT
BDATE
DATE,
ADDRESS VARCHAR(30),
SEX
CHAR,
SALARY
DECIMAL(10,2),
SUPERSSN CHAR(9),
DNO
INT
NOT
Prof. Dr. Dietmar Seipel
NULL,
NULL,
NULL,
NULL,
98
Vorlesung Datenbanken
Wintersemester 2012/13
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN)
REFERENCES EMPLOYEE(SSN),
FOREIGN KEY (DNO)
REFERENCES DEPARTMENT(DNUMBER) );
Durch die NOT NULL–Bedingung für DNO wird die Existenzabhängigkeit
der Angestellten von den Abteilungen aus WORKS_FOR realisiert.
Die umgekehrte Existenzabhängigkeit kann im CREATE TABLE–Statement
nicht realisiert werden.
Mittels UNIQUE (FNAME,MINIT,LNAME,BDATE) könnte man die
Kombination aus dem Namen und dem Geburtsdatum zu einem weiteren,
sekundären Schlüssel machen.
Prof. Dr. Dietmar Seipel
99
Vorlesung Datenbanken
Wintersemester 2012/13
Syntax
CREATE TABLE table-name (
column-name type [ NOT NULL | UNIQUE ]
[ DEFAULT { literal | NULL } ]
[, column-name . . . ]
[, UNIQUE ( list-of-column-names ) . . . ]
[, PRIMARY KEY ( list-of-column-names ) ]
[, FOREIGN KEY ( list-of-column-names )
REFERENCES table-name
[ ( list-of-column-names ) ] . . . ]
[, CHECK ( condition ) . . . ] )
Prof. Dr. Dietmar Seipel
100
Vorlesung Datenbanken
Wintersemester 2012/13
FOREIGN KEY ( list-of-column-names )
REFERENCES table-name
[ ( list-of-column-names ) ]
[ MATCH { FULL | PARTIAL } ]
[ ON DELETE
{ NO ACTION | CASCADE |
SET DEFAULT | SET NULL } ]
[ ON UPDATE
{ NO ACTION | CASCADE |
SET DEFAULT | SET NULL } ]
Prof. Dr. Dietmar Seipel
101
Vorlesung Datenbanken
Wintersemester 2012/13
Datentypen
1. numerisch:
INT[EGER], SMALLINT
FLOAT, REAL, DOUBLE PRECISION
NUMERIC(I,J), DEC[IMAL](I,J)
precision: I, scale: J (default: J=0),
Beispiel: 1.43 ⇒ I=3, J=2
2. Character String:
CHAR[ACTER](N): feste Länge N, der Default ist N=1
VARCHAR(N), CHAR[ACTER] VARYING(N): N ist das Maximum
3. Bit String:
BIT(N) (default: N=1)
BIT VARYING(N)
Prof. Dr. Dietmar Seipel
102
Vorlesung Datenbanken
Wintersemester 2012/13
4. Datum und Zeit:
DATE:
YYYY-MM-DD
TIME:
HH:MM:SS
TIME(I):
HH:MM:SS:F1 . . . FI
TIME WITH TIME ZONE:
08:32:16+01:00
TIMESTAMP:
DATE TIME(6)
TIMESTAMP WITH TIME ZONE
INTERVAL:
YYYY-MM oder DD TIME
Character Strings sowie Datum und Zeit werden mit Hochkommatas
angegeben (z.B.: ’John’, ’Smith’, ’1955-01-09’), Zahlenwerte ohne
Hochkommatas (z.B.: 30000, 5).
Prof. Dr. Dietmar Seipel
103
Vorlesung Datenbanken
Wintersemester 2012/13
Das Erstellen der kompletten COMPANY–Datenbank
CREATE TABLE DEPARTMENT (
DNAME
VARCHAR(15)
DNUMBER
INT
MGRSSN
CHAR(9)
MGRSTARTDATE DATE,
PRIMARY KEY (DNUMBER),
UNIQUE (DNAME),
FOREIGN KEY (MGRSSN)
REFERENCES EMPLOYEE(SSN)
NOT NULL,
NOT NULL,
NOT NULL,
);
Durch die NOT NULL–Bedingung für MGRSSN wird die
Existenzabhängigkeit aus MANAGES realisiert, die besagt, daß eine
Abteilung genau einen Manager haben muß.
Prof. Dr. Dietmar Seipel
104
Vorlesung Datenbanken
Wintersemester 2012/13
CREATE TABLE DEPT_LOCATIONS (
DNUMBER
INT
NOT NULL,
DLOCATION VARCHAR(15) NOT NULL,
PRIMARY KEY (DNUMBER, DLOCATION),
FOREIGN KEY (DNUMBER)
REFERENCES DEPARTMENT(DNUMBER)
ON DELETE CASCADE ON UPDATE CASCADE );
Die Fremdschlüsselbedingung ist mit einem Trigger verbunden, der bei
Löschungen und Updates in DEPARTMENT aktiv wird.
Prof. Dr. Dietmar Seipel
105
Vorlesung Datenbanken
Wintersemester 2012/13
CREATE TABLE PROJECT (
PNAME
VARCHAR(15) NOT NULL,
PNUMBER
INT
NOT NULL,
PLOCATION VARCHAR(15),
DNUM
INT
NOT NULL,
PRIMARY KEY (PNUMBER),
UNIQUE (PNAME),
FOREIGN KEY (DNUM)
REFERENCES DEPARTMENT(DNUMBER) );
Durch die NOT NULL–Bedingung für DNUM wird die
Existenzabhängigkeit aus CONTROLS realisiert, die besagt, daß ein Projekt
genau eine verantwortliche Abteilung haben muß.
Prof. Dr. Dietmar Seipel
106
Vorlesung Datenbanken
Wintersemester 2012/13
CREATE TABLE WORKS_ON (
ESSN
CHAR(9)
NOT NULL,
PNO
INT
NOT NULL,
HOURS DECIMAL(3,1) NOT NULL,
PRIMARY KEY (ESSN, PNO),
FOREIGN KEY (ESSN)
REFERENCES EMPLOYEE(SSN),
FOREIGN KEY (PNO)
REFERENCES PROJECT(PNUMBER) );
Die beiden Existenzabhängigkeiten aus WORKS_FOR können in den
CREATE TABLE–Statements nicht realisiert werden.
Prof. Dr. Dietmar Seipel
107
Vorlesung Datenbanken
Wintersemester 2012/13
CREATE TABLE DEPENDENT (
ESSN
CHAR(9) NOT NULL,
DEPENDENT_NAME VARCHAR(15) NOT NULL,
SEX
CHAR,
BDATE
DATE,
RELATIONSHIP
VARCHAR(8),
PRIMARY KEY (ESSN, DEPENDENT_NAME),
FOREIGN KEY (ESSN)
REFERENCES EMPLOYEE(SSN) );
Prof. Dr. Dietmar Seipel
108
Vorlesung Datenbanken
Wintersemester 2012/13
Namen und Trigger für Constraints
CREATE TABLE EMPLOYEE ( ...
DNO
INT NOT NULL DEFAULT 1,
CONSTRAINT EMPPK
PRIMARY KEY (SSN),
CONSTRAINT EMPSUPERFK
FOREIGN KEY (SUPERSSN)
REFERENCES EMPLOYEE(SSN)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT EMPDEPTFK
FOREIGN KEY (DNO)
REFERENCES DEPARTMENT(DNUMBER)
ON DELETE SET DEFAULT ON UPDATE CASCADE );
Prof. Dr. Dietmar Seipel
109
Vorlesung Datenbanken
Wintersemester 2012/13
CREATE TABLE DEPARTMENT ( ...
MGRSSN CHAR(9) NOT NULL DEFAULT ’111111111’,
CONSTRAINT DEPTPK
PRIMARY KEY (DNUMBER),
CONSTRAINT DEPTSK
UNIQUE (DNAME),
CONSTRAINT DEPTMGRFK
FOREIGN KEY (MGRSSN)
REFERENCES EMPLOYEE(SSN)
ON DELETE SET DEFAULT ON UPDATE CASCADE );
Prof. Dr. Dietmar Seipel
110
Vorlesung Datenbanken
Wintersemester 2012/13
Typ–Definition
CREATE DOMAIN SSN_TYPE AS CHAR(9);
Schema–Modifikationen
DROP DATABASE COMPANY
CASCADE
RESTRICTED (nur für leeres Schema)
DROP TABLE DEPENDENT
CASCADE
RESTRICTED (nur für nicht referenzierte Tabellen)
Prof. Dr. Dietmar Seipel
111
Vorlesung Datenbanken
Wintersemester 2012/13
ALTER TABLE table-name
{ ADD [ COLUMN ] column-name data-type
| ALTER [ COLUMN ] column-name
{ SET default-definition | DROP DEFAULT }
| DROP [ COLUMN ] column-name
| ADD [ CONSTRAINT constraint-name ]
{ { PRIMARY KEY | UNIQUE }
( list-of-column-names )
| FOREIGN KEY ( list-of-column-names )
REFERENCES . . .
| CHECK ( condition ) }
| DROP CONSTRAINT constraint-name }
Prof. Dr. Dietmar Seipel
112
Vorlesung Datenbanken
Wintersemester 2012/13
Beispiel
ALTER TABLE EMPLOYEE
ADD JOB VARCHAR(12);
ALTER TABLE EMPLOYEE
DROP ADDRESS CASCADE;
ALTER TABLE DEPARTMENT
ALTER MGRSSN DROP DEFAULT;
ALTER TABLE DEPARTMENT
ALTER MGRSSN SET DEFAULT ’222222222’;
ALTER TABLE EMPLOYEE
DROP CONSTRAINT EMPSUPERFK CASCADE;
Prof. Dr. Dietmar Seipel
113
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.2 Anfragen in SQL
S ELECT–F ROM –W HERE–Block:
Verglichen mit der Relationenalgebra realisiert der SELECT–Teil eine
Projektion auf die interessierenden Attribute, der FROM–Teil realisiert den
Join der genannten Tabellen, und der WHERE–Teil enthält die Selektions–
und Join–Bedingungen.
SELECT
<attribute list>
→ Resultatsattribute
FROM
<table list>
→ angefragte Tabellen
WHERE
<condition>
→ Bedingung an die Resultatstupel
Joins erfolgen oft über Schlüssel/Fremdschlüssel–Beziehungen; dies hilft
beim Finden geeigneter Join–Bedingungen. Außerdem können die
Join–Partner zu Tupeln aus der Tabelle mit dem Fremdschlüssel in der
Tabelle mit dem Schlüssel sehr schnell gefunden werden.
Prof. Dr. Dietmar Seipel
114
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 0 (Selektion und Projektion)
Finde das Geburtsdatum und die Addresse des Angestellten mit dem Namen
“John B. Smith” heraus.
S ELECT
BDATE, ADDRESS
F ROM
EMPLOYEE
W HERE
FNAME=’John’ A ND MINIT=’B’ A ND LNAME=’Smith’
Ergebnis:
BDATE
ADDRESS
1955-01-09
731 Fondren, Houston, TX
In der Relationenalgebra:
ΠB DATE , A DDRESS (σF NAME=’John’ ∧ M INIT=’B’ ∧ L NAME=’Smith’ (EMPLOYEE)).
Prof. Dr. Dietmar Seipel
115
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage (Projektion und Join)
Bestimme für alle Angestellten – gegeben durch Vornamen und
Nachnamen – ihre Projekte – gegeben durch die Projektnamen –
und die Anzahl der daran gearbeiteten Stunden.
S ELECT
FNAME, LNAME, PNAME, HOURS
F ROM
EMPLOYEE, WORKS_ON, PROJECT
W HERE
SSN=ESSN A ND PNO=PNUMBER
Jeder Tabellenname im F ROM–Teil steht für ein Tupel.
E MPLOYEE
FNAME
...
LNAME
W ORKS _O N
ESSN
PNO
HOURS
P ROJECT
PNAME
Prof. Dr. Dietmar Seipel
PNUMBER
...
SSN
...
In der Relationenalgebra:
ΠFNAME, L NAME, PNAME, HOURS (
E MPLOYEE ⊲⊳ SSN = E SSN
W ORKS _O N ⊲⊳ PNO = PNUMBER P ROJECT ).
116
Vorlesung Datenbanken
Wintersemester 2012/13
Für jedes Tripel von Tupeln, welches die W HERE–Bedingung erfüllt, kann man
durch Projektion auf die Attribute aus dem S ELECT–Teil ein Resultatstupel bilden.
Prof. Dr. Dietmar Seipel
FNAME
LNAME
PNAME
HOURS
John
Smith
ProductX
32.5
John
Smith
ProductY
7.5
Ramesh
Narayan
ProductZ
40.0
Joyce
English
ProductX
20.0
Joyce
English
ProductY
20.0
Franklin
Wong
ProductY
10.0
Franklin
Wong
ProductZ
10.0
Alicia
Zelaya
Newbenefits
30.0
Alicia
Zelaya
Computerization
10.0
Ahmad
Jabbar
Computerization
35.5
Ahmad
Jabbar
Newbenefits
5.0
Jennifer
Wallace
Newbenefits
20.0
Jennifer
Wallace
Reorganization
15.0
James
Borg
Reorganization
NULL
117
Vorlesung Datenbanken
Wintersemester 2012/13
Mit binären Joins in der Relationenalgebra:
ΠF NAME , L NAME , P NAME , H OURS (
E MPLOYEE ⊲⊳ S SN = E SSN ( W ORKS _O N ⊲⊳ P NO = P NUMBER P ROJECT ) ).
Zugehöriger Operatorbaum:
O1 :
ΠF NAME , L NAME , P NAME , H OURS
6
⊲⊳ S SN = E SSN
I
E MPLOYEE
⊲⊳ P NO = P NUMBER
I
W ORKS _O N
Prof. Dr. Dietmar Seipel
P ROJECT
118
Vorlesung Datenbanken
Wintersemester 2012/13
Mit binären Joins in der Relationenalgebra:
ΠF NAME , L NAME , P NAME , H OURS (
( E MPLOYEE ⊲⊳ S SN = E SSN W ORKS _O N ) ⊲⊳ P NO = P NUMBER P ROJECT ).
Zugehöriger Operatorbaum:
O2 :
ΠF NAME , L NAME , P NAME , H OURS
6
⊲⊳ P NO = P NUMBER
I
⊲⊳ S SN = E SSN
P ROJECT
I
E MPLOYEE
Prof. Dr. Dietmar Seipel
W ORKS _O N
119
Vorlesung Datenbanken
Wintersemester 2012/13
Das folgende Mengendiagramm zeigt die Attributmengen der beteiligten
Relationen. Es ist angereichert um die Join–Bedingungen (in blau und rot).
Es sind nur die Projektions– bzw. Join–Attribute angezeigt.
W ORKS _O N
E MPLOYEE
P ROJECT
L NAME
S SN
E SSN
P NO
F NAME
P NUM BER
P NAME
H OURS
Der Join sollte immer von der zentralen Relation W ORKS _O N ausgehen.
Es ist sinnlos, zuerst E MPLOYEE und P ROJECT zu joinen, denn dies wäre ein
kartesisches Produkt.
Hier erscheint auch ein ternärer (Drei–Wege–) Join sinnvoll, bei dem in
einem Durchlauf für jedes Tupel aus W ORKS _O N indexunterstützt die
passenden Partner aus den anderen beiden Relationen gesucht werden.
Prof. Dr. Dietmar Seipel
120
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 1 (Selektion, Projektion und Join)
Finde die Namen und Addressen aller Angestellten heraus, die für die
“Research”–Abteilung arbeiten.
S ELECT
F ROM
W HERE
Ergebnis:
FNAME, LNAME, ADDRESS
EMPLOYEE, DEPARTMENT
DNAME=’Research’ A ND DNUMBER=DNO
FNAME
LNAME
ADDRESS
John
Smith
731 Fondren, Houston, TX
Franklin
Wong
638 Voss, Houston, TX
Ramesh
Narayan
975 Rice, Houston, TX
Joyce
English
5631 Rice, Houston, TX
In der Relationenalgebra:
ΠF NAME , L NAME , A DDRESS ( σD NAME=’Research’ (
E MPLOYEE ⊲⊳D NUMBER =D NO D EPARTMENT ) ).
Prof. Dr. Dietmar Seipel
121
Vorlesung Datenbanken
Wintersemester 2012/13
In der Relationenalgebra:
ΠF NAME , L NAME , A DDRESS ( σD NAME=’Research’ (
E MPLOYEE ⊲⊳D NUMBER =D NO D EPARTMENT ) ).
Zugehöriger Operatorbaum:
O1 :
ΠF NAME , L NAME , A DDRESS
6
σD NAME=’Research’
6
⊲⊳D NUMBER =D NO
I
E MPLOYEE
Prof. Dr. Dietmar Seipel
D EPARTMENT
122
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage–Optimierung: Push Selection into Join
ΠF NAME , L NAME , A DDRESS (
E MPLOYEE ⊲⊳D NUMBER =D NO σD NAME=’Research’ (D EPARTMENT) ).
Zugehöriger Operatorbaum:
O2 :
ΠF NAME , L NAME , A DDRESS
6
⊲⊳D NUMBER =D NO
I
E MPLOYEE
σD NAME=’Research’
6
D EPARTMENT
Prof. Dr. Dietmar Seipel
123
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 2
Liste die Projektnummer, die Nummer der zugehörigen Abteilung sowie den
Nachnamen, die Addresse und das Geburtsdatum des Abteilungsleiters für
alle Projekte, die in Stafford angesiedelt sind.
S ELECT
PNUMBER, DNUM, LNAME, ADDRESS, BDATE
F ROM
PROJECT, DEPARTMENT, EMPLOYEE
W HERE
DNUM=DNUMBER A ND MGRSSN=SSN
A ND
PLOCATION=’Stafford’
Ergebnis:
Prof. Dr. Dietmar Seipel
PNUMBER
DNUM
LNAME
ADDRESS
BDATE
10
4
Wallace
291 Berry, Bellaire, TX
1931-06-20
30
4
Wallace
291 Berry, Bellaire, TX
1931-06-20
124
Vorlesung Datenbanken
Wintersemester 2012/13
Zusammenhang mit der Relationenalgebra
S ELECT D ISTINCT eliminiert doppelte Tupel aus dem Resultat
1. Projektion: π{A1 ,... ,Ak } (R), mit {A1 , . . . , Ak } ⊆ def (R):
S ELECT D ISTINCT A1 , . . . , Ak F ROM R
2. Selektion: σA=B (R), mit A, B ∈ def (R):
S ELECT D ISTINCT *
F ROM R
W HERE A = B
Prof. Dr. Dietmar Seipel
125
Vorlesung Datenbanken
Wintersemester 2012/13
3. Vereinigung | Durchschnitt | Differenz: R ∪ S, R ∩ S, R \ S
S ELECT D ISTINCT * F ROM R
U NION | I NTERSECT | E XCEPT
S ELECT D ISTINCT * F ROM S
4. Natural Join: R ⊲⊳R.B1 =S.B1 ∧...∧R.Bm =S.Bm S, mit
def (R) = {A1 , . . . , An , B1 , . . . , Bm },
def (S) = {B1 , . . . , Bm , C1 , . . . , Cl }
S ELECT D ISTINCT A1 , . . . , An , R.B1 , . . . , R.Bm , C1 , . . . , Cl
F ROM R, S
W HERE R.B1 = S.B1 A ND . . . A ND R.Bm = S.Bm
Prof. Dr. Dietmar Seipel
126
Vorlesung Datenbanken
Wintersemester 2012/13
Mehrdeutige Attributnamen und Aliasing
Um Mehrdeutigkeiten zu beseitigen,
• kann man einen Attributnamen A durch Voranstellen des
Relationennamens R eindeutig machen (R.A), und
• man kann ein Alias R′ für einen Relationennamen R vergeben (R R′ ,
z.B. EMPLOYEE E).
Beides ist z.B. erforderlich, wenn man eine Relation mit sich selbst joint.
Anfrage 8
Prof. Dr. Dietmar Seipel
S ELECT
E.FNAME, E.LNAME, S.FNAME, S.LNAME
F ROM
EMPLOYEE E, EMPLOYEE S
W HERE
E.SUPERSSN=S.SSN
127
Vorlesung Datenbanken
Wintersemester 2012/13
Die Vorgesetzten–Hierarchie:
111111111
1: James Borg
j
222222222
5: Franklin Wong
444444444
5: John Smith
Prof. Dr. Dietmar Seipel
?
555555555
5: Ramesh Narayan
333333333
4: Jennifer Wallace
j
666666666
5: Joyce English
777777777
4: Alicia Zelaya
R
888888888
4: Ahmad Jabbar
128
Vorlesung Datenbanken
Wintersemester 2012/13
E MPLOYEE
FNAME
MINIT
LNAME
SSN
...
SUPERSSN
...
E
John
B
Smith
444444444
...
222222222
...
S
Franklin
T
Wong
222222222
...
111111111
...
...
...
...
...
...
...
...
Ergebnis:
Prof. Dr. Dietmar Seipel
E.FNAME
E.LNAME
S.FNAME
S.LNAME
John
Smith
Franklin
Wong
Franklin
Wong
James
Borg
Alica
Zelaya
Jennifer
Wallace
Jennifer
Wallace
James
Borg
Ramesh
Narayan
Franklin
Wong
Joyce
English
Franklin
Wong
Ahmad
Jabbar
Jennifer
Wallace
129
Vorlesung Datenbanken
Wintersemester 2012/13
Anfragen ohne WHERE–Klausel, Benutzung von ’*’ (Wildcard)
Anfrage 9 (Projektion)
Suche alle EMPLOYEE SSNs in der Datenbank.
S ELECT
F ROM
SSN
EMPLOYEE
Ergebnis:
SSN
444444444
222222222
777777777
333333333
in der Relationenalgebra:
ΠSSN (EMPLOYEE)
555555555
666666666
888888888
111111111
Prof. Dr. Dietmar Seipel
130
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 1C (Selektion)
S ELECT
*
F ROM
EMPLOYEE
W HERE
DNO = 5
Ergebnis:
FNAME
MINIT
LNAME
SSN
BDATE
ADDRESS
SEX
SALARY
SUPERSSN
DNO
John
B
Smith
444444444
1955-01-09
...
M
30000
222222222
5
Franklin
T
Wong
222222222
1945-12-08
...
M
40000
111111111
5
Ramesh
K
Narayan
555555555
1952-09-15
...
M
38000
222222222
5
Joyce
A
English
666666666
1962-07-31
...
F
25000
222222222
5
in der Relationenalgebra:
Prof. Dr. Dietmar Seipel
σDNO=5 (EMPLOYEE)
131
Vorlesung Datenbanken
Wintersemester 2012/13
Tabellen als Mengen
Anfrage 11
Hole das Gehalt aller Angestellten aus der Datenbank.
S ELECT
SALARY
F ROM
EMPLOYEE
S ELECT
D ISTINCT SALARY
F ROM
EMPLOYEE
Falls es mehrere Angestellte mit dem selben Lohn gibt, so liefert das erste
Statement den Lohn mehrfach zurück, während das zweite Statement nur die
einzelnen Lohnstufen jeweils einmal auflistet.
Prof. Dr. Dietmar Seipel
132
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 4
Erstelle eine Liste aller Projekte, an denen ein Arbeiter mit dem Nachnamen
“Smith” arbeitet, oder die einer Abteilung zugeordnet sind, deren
Abteilungsleiter den Nachnamen “Smith” trägt.
( S ELECT
PNO
F ROM
WORKS_ON, EMPLOYEE
W HERE
ESSN=SSN A ND LNAME=’Smith’ )
U NION
( S ELECT
Prof. Dr. Dietmar Seipel
PNUMBER
F ROM
PROJECT, DEPARTMENT, EMPLOYEE
W HERE
DNUM=DNUMBER
A ND
MGRSSN=SSN A ND LNAME=’Smith’ )
133
Vorlesung Datenbanken
Wintersemester 2012/13
Geschachtelte Anfragen und Mengenvergleiche
Finde die ESSN aller Angestellten, die an einem Projekt so viele Stunden
arbeiten wie der Angestellte mit der ESSN=’444444444’:
S ELECT
D ISTINCT ESSN
F ROM
WORKS_ON
W HERE
(PNO, HOURS) I N (
S ELECT
PNO, HOURS
F ROM
WORKS_ON
W HERE
ESSN=’444444444’ );
Dabei bezieht sich die innere/äußere Variable ESSN auf das innere/äußere
WORKS_ON.
Prof. Dr. Dietmar Seipel
134
Vorlesung Datenbanken
Wintersemester 2012/13
Finde alle Angestellten, die mehr verdienen als alle Angestellten aus
Abteilung 5:
S ELECT
LNAME, FNAME
F ROM
EMPLOYEE
W HERE
SALARY > A LL I N (
S ELECT
SALARY
F ROM
EMPLOYEE
W HERE
DNO = 5 );
Auch möglich mit <, =, <=, >=, <>, SOME, ANY
Prof. Dr. Dietmar Seipel
135
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 4A
S ELECT
D ISTINCT PNUMBER
F ROM
PROJECT
W HERE
PNUMBER I N (
OR
S ELECT
PNUMBER
F ROM
PROJECT, DEPARTMENT, EMPLOYEE
W HERE
DNUM = DNUMBER
A ND
MGRSSN = SSN A ND LNAME=’Smith’ )
PNUMBER I N (
S ELECT
PNO
F ROM
WORKS_ON, EMPLOYEE
W HERE
ESSN = SSN A ND LNAME = ’Smith’ )
Anders als bei Anfrage 4 werden hier keine Duplikate geliefert.
Prof. Dr. Dietmar Seipel
136
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 12
Suche die Namen aller Angestellten, die einen Angehörigen mit gleichem
Vornamen und Geschlecht haben.
S ELECT
E.FNAME, E.LNAME
F ROM
EMPLOYEE E
W HERE
SSN I N (
S ELECT
ESSN
F ROM
DEPENDENT
W HERE
SSN = ESSN
A ND
FNAME = DEPENDENT_NAME
A ND
E.SEX = SEX )
Das Attribut SEX ohne Präfix E im inneren S ELECT–Statement bezieht sich
auf DEPENDENT.
Prof. Dr. Dietmar Seipel
137
Vorlesung Datenbanken
Wintersemester 2012/13
Eine alternative Formulierung mit einem flachen S ELECT–Statement wäre:
S ELECT
E.FNAME, E.LNAME
F ROM
EMPLOYEE E, DEPENDENT D
W HERE
E.SSN = D.ESSN
A ND
E.FNAME = D.DEPENDENT_NAME
A ND
E.SEX = D.SEX
Hier sind zwei Aliase, E und D, erforderlich, um das Attribut SEX korrekt
den Relationen EMPLOYEE bzw. DEPENDENT zuzuordnen.
Prof. Dr. Dietmar Seipel
138
Vorlesung Datenbanken
Wintersemester 2012/13
Explizite Mengen
Anfrage 13
Finde die Sozialversicherungsnummern aller Angestellten heraus,
die an einem der Projekte 1, 2 oder 3 arbeiten.
S ELECT
D ISTINCT ESSN
F ROM
WORKS_ON
W HERE
PNO I N (1, 2, 3)
Alternativ – aber weniger elegant – könnte man die folgende, etwas längere
W HERE–Bedingung schreiben:
Prof. Dr. Dietmar Seipel
W HERE
PNO = 1
OR
PNO = 2
OR
PNO = 3
139
Vorlesung Datenbanken
Wintersemester 2012/13
NULL–Werte
Anfrage 14
Finde die Namen aller Angestellten heraus, die keinen Vorgesetzten haben.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
SUPERSSN I S N ULL
Eigentlich würde bereits “SUPERSSN = N ULL” eindeutig anzeigen, daß auf
den Nullwert getestet wird, da ja keine Hochkommata verwendet werden.
Zur zusätzlichen Unterscheidung muß man aber sogar “I S” anstelle von “=”
schreiben.
Prof. Dr. Dietmar Seipel
140
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 3
Finde die Namen aller Angestellten heraus, die an allen Projekten
mitarbeiten, welche von Abteilung Nummer 5 kontrolliert werden.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
( ( S ELECT
PNO
F ROM
WORKS_ON
W HERE
SSN = ESSN )
C ONTAINS
( S ELECT
PNUMBER
F ROM
PROJECT
W HERE
DNUM = 5 ) )
Diese Anfrage mit C ONTAINS kann in der Relationenalgebra mittels einer
Division ausgewertet werden.
Prof. Dr. Dietmar Seipel
141
Vorlesung Datenbanken
Wintersemester 2012/13
E XISTS
Anfrage 12B
Suche die Namen aller Angestellten, die einen Angehörigen mit gleichem
Vornamen und Geschlecht haben.
Prof. Dr. Dietmar Seipel
S ELECT
E.FNAME, E.LNAME
F ROM
EMPLOYEE E
W HERE
E XISTS (
S ELECT
*
F ROM
DEPENDENT
W HERE
E.SSN = ESSN
A ND
E.SEX = SEX
A ND
E.FNAME = DEPENDENT_NAME )
142
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 6
Suche die Namen aller Angestellten, die keine Angehörigen haben.
Prof. Dr. Dietmar Seipel
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
N OT E XISTS (
S ELECT
*
F ROM
DEPENDENT
W HERE
SSN = ESSN )
143
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 7
Führe die Namen aller Abteilungsleiter auf, die mindestens einen
Angehörigen haben.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
E XISTS (
A ND
Prof. Dr. Dietmar Seipel
S ELECT
*
F ROM
DEPENDENT
W HERE
SSN = ESSN )
E XISTS (
S ELECT
*
F ROM
DEPARTMENT
W HERE
SSN = MGRSSN )
144
Vorlesung Datenbanken
Wintersemester 2012/13
Eine alternative Formulierung mit einem flachen S ELECT–Statement, die
zusätzlich noch die Vornamen der jeweiligen Angehörigen ausgibt, wäre:
S ELECT
FNAME, LNAME, DEPENDENT_NAME
F ROM
EMPLOYEE, DEPENDENT, DEPARTMENT
W HERE
SSN = ESSN
A ND
SSN = MGRSSN
Ergebnis:
FNAME
LNAME
DEPENDENT_NAME
Franklin
Wong
Alice
Franklin
Wong
Joy
Franklin
Wong
Theodore
Jennifer
Wallace
Abner
Falls man DEPENDENT_NAME nicht mit ausgibt, so kann man mittels
DISTINCT verhindern, daß derselbe Angestellte mehrmals aufgelistet wird.
Prof. Dr. Dietmar Seipel
145
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 3A
Finde die Namen aller Angestellten heraus, die an allen Projekten
mitarbeiten, welche von Abteilung Nummer 5 kontrolliert werden.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
N OT E XISTS
(S ELECT
*
F ROM
WORKS_ON B
W HERE
B.PNO I N
A ND
Prof. Dr. Dietmar Seipel
N OT E XISTS
(S ELECT
PNUMBER
F ROM
PROJECT
W HERE
DNUM=5)
(S ELECT
*
F ROM
WORKS_ON C
W HERE
C.ESSN=SSN
A ND
C.PNO=B.PNO))
146
Vorlesung Datenbanken
Wintersemester 2012/13
Umbenennung von Attributen und explizite Joins
Anfrage 8A
S ELECT
E.LNAME A S EMPLOYEE,
S.LNAME A S SUPERVISOR
F ROM
EMPLOYEE A S E, EMPLOYEE A S S
W HERE
E.SUPERSSN=S.SSN
Ergebnis:
Prof. Dr. Dietmar Seipel
EMPLOYEE
SUPERVISOR
Smith
Wong
Wong
Borg
Zelaya
Wallace
...
...
147
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 1A
S ELECT
FNAME, LNAME, ADDRESS
F ROM
(EMPLOYEE J OIN DEPARTMENT O N DNO=DNUMBER)
W HERE
DNAME=’Research’
Die Join–Bedingung kann in den F ROM–Teil gezogen werden.
Anfrage 1B
S ELECT
FNAME, LNAME, ADDRESS
F ROM
(EMPLOYEE NATURAL JOIN
(DEPARTMENT A S D(DNAME, DNO, X, Y)))
W HERE
DNAME=’Research’
Die Join–Bedingung DNO=DNUMBER wird beim NATURAL JOIN
dadurch realisiert, daß DNUMBER von DEPARTMENT mittels A S an DNO
von EMPLOYEE angeglichen wird (Renaming).
Prof. Dr. Dietmar Seipel
148
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 8B
Die folgende Anfrage bestimmt wieder die Vorgesetzten:
S ELECT
E.LNAME A S EMPLOYEE,
S.LNAME A S SUPERVISOR
F ROM
(EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S
ON E.SUPERSSN=S.SSN)
Der LEFT OUTER JOIN enthält immer Tupel zu den Tupeln der linken
Tabelle, selbst wenn es keine passenden Tupel in der rechten Tabelle gibt.
Das bedeutet hier, daß alle Angestellten E aufgelistet werden, selbst wenn
sie – wie der Firmenchef James Borg – keinen Vorgesetzten S haben.
Prof. Dr. Dietmar Seipel
149
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 2A
S ELECT
PNUMBER, DNUM, LNAME, ADDRESS, BDATE
F ROM
( ( PROJECT
JOIN DEPARTMENT ON DNUM=DNUMBER )
JOIN EMPLOYEE ON MGRSSN=SSN )
W HERE
PLOCATION=’Stafford’
Man kann Join–Spezifikationen auch schachteln; d.h., eine der Tabellen eines
Joins kann selbst wieder das Resultat eines Joins sein.
In unserem Falle werden zuerst PROJECT und DEPARTMENT verbunden;
das Resultat wird dann mit EMPLOYEE verbunden.
Prof. Dr. Dietmar Seipel
150
Vorlesung Datenbanken
Wintersemester 2012/13
Aggregatsfunktionen und Gruppierung
Anfrage 15
Berechne die Summe, das Maximum, das Minimum und den Durchschnitt
der Gehälter aller Angestellten.
S ELECT
F ROM
S UM (SALARY), M AX (SALARY),
M IN (SALARY), AVG (SALARY)
EMPLOYEE
Nullwerte (bei SALARY) werden bei der Aggregation nicht berücksichtigt.
Anfrage 18
Bestimme die Anzahl der Mitarbeiter in der Abteilung ’Research’.
S ELECT
F ROM
W HERE
Prof. Dr. Dietmar Seipel
C OUNT (*)
EMPLOYEE, DEPARTMENT
DNO=DNUMBER A ND DNAME=’Research’
151
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 19
Bestimme die Anzahl verschiedener Löhne in der Datenbank.
S ELECT
C OUNT (D ISTINCT SALARY)
F ROM
EMPLOYEE
Anfrage 20
Bestimme für alle Abteilungen die Abteilungsnummer, die Anzahl der
Angestellten und das Durchschnittsgehalt.
Prof. Dr. Dietmar Seipel
S ELECT
DNO, C OUNT (*) A S EMPS, AVG (SALARY)
F ROM
EMPLOYEE
G ROUP B Y
DNO
152
Vorlesung Datenbanken
Wintersemester 2012/13
Ergebnis von Anfrage 20:
Zunächst werden die Angestellten nach Abteilungszugehörigkeit gruppiert.
FNAME
MINIT
LNAME
SSN
...
SALARY
SUPERSSN
DNO
John
B
Smith
444444444
...
30000
222222222
5
Franklin
T
Wong
222222222
...
40000
111111111
5
Ramesh
K
Narayan
555555555
...
38000
222222222
5
Joyce
A
English
666666666
...
25000
222222222
5
Alicia
J
Zelaya
777777777
...
25000
333333333
4
Jennifer
S
Wallace
333333333
...
43000
111111111
4
Ahmad
V
Jabbar
888888888
...
25000
333333333
4
James
E
Borg
111111111
...
55000
NULL
1






















o
Danach werden die Gruppen zusammengefaßt.
Prof. Dr. Dietmar Seipel
DNO
EMPS
AVG(SALARY)
5
4
33250
4
3
31000
1
1
55000
153
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 5
S ELECT
LNAME, FNAME
F ROM
EMPLOYEE
W HERE
( S ELECT
C OUNT (*)
F ROM
DEPENDENT
W HERE
SSN = ESSN ) >= 2
Anfrage 21
Zu jedem Projekt sollen Projektnummer und Projektname sowie die Anzahl
der an diesem Projekt arbeitenden Angestellten zurückgegeben werden.
Prof. Dr. Dietmar Seipel
S ELECT
PNUMBER, PNAME, C OUNT (*) A S EMPS
F ROM
PROJECT, WORKS_ON
W HERE
PNUMBER = PNO
G ROUP B Y
PNUMBER, PNAME
154
Vorlesung Datenbanken
Wintersemester 2012/13
Gruppierung mit Having
Anfrage 22
Zu jedem Projekt mit mehr als zwei Angestellten, die daran arbeiten, sollen
Projektnummer und Projektname sowie die Anzahl der an diesem Projekt
arbeitenden Angestellten zurückgegeben werden.
Prof. Dr. Dietmar Seipel
S ELECT
PNUMBER, PNAME, C OUNT (*) A S EMPS
F ROM
PROJECT, WORKS_ON
W HERE
PNUMBER=PNO
G ROUP B Y
PNUMBER, PNAME
H AVING
C OUNT (*) > 2
155
Vorlesung Datenbanken
Wintersemester 2012/13
Ergebnis von Anfrage 22:
Zunächst wird der Join der Relationen PROJECT und WORKS_ON gebildet,
wobei die Bedingung PNO=PNUMBR berücksichtigt wird.
Prof. Dr. Dietmar Seipel
PNAME
PNUMBER
...
ESSN
PNO
HOURS
ProductX
1
...
444444444
1
32.5
ProductX
1
...
666666666
1
20.0
ProduktY
2
...
444444444
2
7.5
ProduktY
2
...
666666666
2
20.0
ProduktY
2
...
222222222
2
10.0
ProductZ
3
...
555555555
3
40.0
ProductZ
3
...
222222222
3
10.0
Computerization
10
...
222222222
10
10.0
Computerization
10
...
777777777
10
10.0
Computerization
10
...
888888888
10
35.0
Reorganization
20
...
222222222
20
10.0
Reorganization
20
...
333333333
20
15.0
Reorganization
20
...
111111111
20
NULL
Newbenefits
30
...
888888888
30
5.0
Newbenefits
30
...
333333333
30
20.0
Newbenefits
30
...
777777777
30
30.0










































156
Vorlesung Datenbanken
Wintersemester 2012/13
Dann wird die Bedingung “H AVING C OUNT (*) > 2” ausgewertet.
PNAME
...
ESSN
PNO
HOURS
ProduktY
2
...
444444444
2
7.5
ProduktY
2
...
666666666
2
20.0
ProduktY
2
...
222222222
2
10.0
Computerization
10
...
222222222
10
10.0
Computerization
10
...
777777777
10
10.0
Computerization
10
...
888888888
10
35.0
Reorganization
20
...
222222222
20
10.0
Reorganization
20
...
333333333
20
15.0
Reorganization
20
...
111111111
20
NULL
Newbenefits
30
...
888888888
30
5.0
Newbenefits
30
...
333333333
30
20.0
Newbenefits
Prof. Dr. Dietmar Seipel
PNUMBER
30
...
777777777
30
30.0




























157
Vorlesung Datenbanken
Wintersemester 2012/13
Und schließlich werden noch die Gruppen zusammengefaßt.
Prof. Dr. Dietmar Seipel
PNUMBER
PNAME
EMPS
2
ProductY
3
10
Computerization
3
20
Reorganization
3
30
Newbenefits
3
158
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 23
Gib zu jedem Projekt den Projektnamen, die Projektnummer und die Anzahl
der Angestellten, die daran arbeiten und Abteilung 5 angehören, an.
Prof. Dr. Dietmar Seipel
S ELECT
PNUMBER, PNAME, C OUNT (*) A S EMPS
F ROM
PROJECT, WORKS_ON, EMPLOYEE
W HERE
PNUMBER=PNO A ND SSN=ESSN A ND DNO=5
G ROUP B Y
PNUMBER, PNAME
159
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 24
Es sind alle Abteilungen gesucht, die mehr als 5 Angestellte haben; zu diesen
Abteilungen ist auch die Anzahl der Angestellten mit mehr als 40.000 $
Verdienst gesucht.
S ELECT
DNAME, C OUNT (*) A S EMPS
F ROM
DEPARTMENT, EMPLOYEE
W HERE
DNUMBER=DNO A ND SALARY > 40000
A ND
DNO I N (
G ROUP B Y
Prof. Dr. Dietmar Seipel
S ELECT
DNO
F ROM
EMPLOYEE
G ROUP B Y
DNO
H AVING
C OUNT (*) > 5 )
DNAME
160
Vorlesung Datenbanken
Wintersemester 2012/13
Anfrage 24A
Es sind alle Abteilungen gesucht, die mehr als 5 Angestellte mit mehr als
40.000 $ Verdienst haben; zu diesen Abteilungen ist auch die Anzahl dieser
Angestellten gesucht.
Prof. Dr. Dietmar Seipel
S ELECT
DNAME, C OUNT (*) A S EMPS
F ROM
DEPARTMENT, EMPLOYEE
W HERE
DNUMBER=DNO A ND SALARY > 40000
G ROUP B Y
DNAME
H AVING
C OUNT (*) > 5
161
Vorlesung Datenbanken
Wintersemester 2012/13
Regeln für S ELECT–Statements mit G ROUP B Y und H AVING
1. Zuerst wird der Join der Relationen aus der F ROM–Klausel basierend
auf den Selektions– und Joinbedingungen der W HERE–Klausel
berechnet.
2. Dann wird mittels G ROUP B Y die Gruppierung vorgenommen, und die
Aggregationsfunktionen werden auf die entstandenen Gruppen
angewendet; Nullwerte werden bei der Aggregation ignoriert.
3. Die H AVING–Klausel selektiert dann einzelne Gruppen.
4. In der S ELECT–Klausel können abschließend Attributwerte, nach denen
gruppiert wurde (und nur solche), zusammen mit berechneten
Aggregatswerten zurückgegeben werden.
5. Alle nicht aggregierten Attribute aus der S ELECT–Klausel müssen also
im G ROUP B Y vorkommen.
Prof. Dr. Dietmar Seipel
162
Vorlesung Datenbanken
Wintersemester 2012/13
Teilstring–Vergleiche
Anfrage 25
Gesucht sind alle Angestellten, die in Houston, Texas, leben.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
ADDRESS L IKE ’%Houston, TX%’
Anfrage 26
Finde alle Angestellten heraus, die in den 50er Jahren geboren wurden.
S ELECT
FNAME, LNAME
F ROM
EMPLOYEE
W HERE
BDATE L IKE ’_ _ 5 _–_ _–_ _’
Alternative: BDATE L IKE ’_ _ 5%’
Prof. Dr. Dietmar Seipel
163
Vorlesung Datenbanken
Wintersemester 2012/13
Arithmetische Operationen, Ordnung und Formatierung der Ausgabe
Anfrage 27
Zeige die Gehälter, die die Angestellten, die am ProductX arbeiten, im Falle
einer 10%–igen Lohnerhöhung bekommen würden.
S ELECT
FNAME, LNAME, 1.1*SALARY
F ROM
EMPLOYEE, WORKS_ON, PROJECT
W HERE
SSN = ESSN
A ND
PNO = PNUMBER A ND PNAME = ’ProductX’
O RDER B Y
FNAME, LNAME
Um FNAME absteigend zu sortieren, würde man die O RDER B Y–Klausel
ersetzen durch: O RDER B Y FNAME D ESC, LNAME A SC.
Mittels S ELECT FNAME, ’:’, LNAME, ’:’, 1.1*SALARY könnte man
eine ’:’–separierte Ausgabe zum Import in MS Excel erzeugen.
Prof. Dr. Dietmar Seipel
164
Vorlesung Datenbanken
Wintersemester 2012/13
Falls nichts angegeben wurde, sie ist die Standard–Ordnung aufsteigend.
Anfrage 28
S ELECT
DNAME, FNAME, LNAME, PNAME
F ROM
DEPARTMENT, EMPLOYEE,
WORKS_ON, PROJECT
Prof. Dr. Dietmar Seipel
W HERE
DNUMBER = DNO
A ND
SSN = ESSN
A ND
PNO = PNUMBER
O RDER B Y
DNAME D ESC, LNAME, FNAME
165
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.3 Update–Statements in SQL
Zum Einfügen eines einzelnen Tupels in eine Relation (I NSERT) gibt es zwei
Möglichkeiten:
1. Man listet die Werte des neuen Tupels in derselben Reihenfolge auf, in
der die zugehörigen Attribute beim C REATE TABLE angegeben wurden.
2. Man gibt die Attribute zu den Werten des neuen Tupels in
entsprechender Reihenfolge explizit an.
In MySQL können auch mehrere Tupel durch Kommata getrennt in einem
einzigen I NSERT–Statement angegeben werden.
Prof. Dr. Dietmar Seipel
166
Vorlesung Datenbanken
Wintersemester 2012/13
Beispiel
I NSERT I NTO
EMPLOYEE
VALUES
(’Richard’, ’K’, ’Marini’, ’111222333’, ’1952-12-30’,
’98 Oak Forest, Katy, TX’, ’M’, 37000 , ’333333333’, 4 )
I NSERT I NTO
EMPLOYEE(FNAME, LNAME, SSN, DNO)
VALUES
(’Richard’, ’Marini’, ’111222333’, 4),
(’Robert’, ’Hatcher’, ’555666777’, 2)
Die Überprüfung der Integritätsbedingungen ist systemabhängig. Die
folgende Operation wird abgelehnt, da kein Wert für “SSN” angegeben ist:
Prof. Dr. Dietmar Seipel
I NSERT I NTO
EMPLOYEE(FNAME, LNAME, DNO)
VALUES
(’Robert’, ’Hatcher’, 2)
167
Vorlesung Datenbanken
Wintersemester 2012/13
Es kann auch eine ganze mittels eines S ELECT–Statements erzeugte Relation
eingefügt werden:
CREATE TABLE
DNAME
EMPS
TOTAL_SAL
INSERT INTO
SELECT
FROM
WHERE
GROUP BY
Prof. Dr. Dietmar Seipel
DEPT (
VARCHAR(15),
INTEGER,
INTEGER );
DEPT
DNAME
EMPS
TOTAL_SAL
Administration
3
93000
Headquarters
1
55000
Research
4
133000
DEPT
DNAME, COUNT(*), SUM(SALARY)
DEPARTMENT, EMPLOYEE
DNUMBER = DNO
DNAME
168
Vorlesung Datenbanken
Wintersemester 2012/13
Das Löschen von Tupeln erfolgt mit D ELETE; auch hier ist die Überprüfung
von referentiellen Integritätsbedingungen systemabhängig.
D ELETE F ROM
EMPLOYEE
W HERE
LNAME=’Brown’
D ELETE F ROM
EMPLOYEE
W HERE
DNO I N (
D ELETE F ROM
S ELECT
DNUMBER
F ROM
DEPARTMENT
W HERE
DNAME = ’Research’ )
EMPLOYEE
Das letzte Statement – ohne W HERE–Teil – löscht dabei alle Tupel.
Prof. Dr. Dietmar Seipel
169
Vorlesung Datenbanken
Wintersemester 2012/13
Das U PDATE–Kommando
• In einer W HERE–Klausel werden die zu modifizierenden Tupel
spezifiziert.
• Eine S ET–Klausel spezifiziert die zu modifizierenden Attribute sowie
die zugehörigen Attributwerte.
U PDATE
PROJECT
S ET
PLOCATION=’Bellaire’, DNUM=5
W HERE
PNUMBER=10
Prof. Dr. Dietmar Seipel
170
Vorlesung Datenbanken
Wintersemester 2012/13
Es können mehrere Tupel gleichzeitig mittels einer Berechnungsregel
modifiziert werden:
U PDATE
EMPLOYEE
S ET
SALARY = SALARY * 1.1
W HERE
DNO I N (
S ELECT
DNUMBER
F ROM
DEPARTMENT
W HERE
DNAME = ’Research’ )
Wie bei Programmiersprachen bezeichnet ein Attributsname auf der rechten
Seite einer Zuweisung den alten Wert, während er auf der linken Seite den
neuen Wert bezeichnet.
Prof. Dr. Dietmar Seipel
171
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.4 Views (Sichten) in SQL
Ein View ist eine virtuelle Tabelle, welche von anderen Tabellen
(gespeicherten Basistabellen oder auch anderen Views) abgeleitet ist.
Diese anderen Tabellen werden definierende Tabellen genannt.
Ein View hat einen (virtuellen) Tabellennamen, eine Liste von Attributen,
und sein Inhalt wird durch ein S ELECT–Statement spezifiziert:
C REATE V IEW
E_WORKS_ON_P
AS
S ELECT
FNAME, LNAME, PNAME, HOURS
F ROM
EMPLOYEE, WORKS_ON, PROJECT
W HERE
SSN=ESSN A ND PNO=PNUMBER
Prof. Dr. Dietmar Seipel
172
Vorlesung Datenbanken
Wintersemester 2012/13
E_W ORKS _O N _P
Prof. Dr. Dietmar Seipel
FNAME
LNAME
PNAME
HOURS
John
Smith
ProductX
32.5
John
Smith
ProductY
7.5
Ramesh
Narayan
ProductZ
40.0
Joyce
English
ProductX
20.0
Joyce
English
ProductY
20.0
Franklin
Wong
ProductY
10.0
Franklin
Wong
ProductZ
10.0
Alicia
Zelaya
Newbenefits
30.0
Alicia
Zelaya
Computerization
10.0
Ahmad
Jabbar
Computerization
35.5
Ahmad
Jabbar
Newbenefits
5.0
Jennifer
Wallace
Newbenefits
20.0
Jennifer
Wallace
Reorganization
15.0
James
Borg
Reorganization
NULL
173
Vorlesung Datenbanken
Wintersemester 2012/13
C REATE V IEW
DEPT (DNAME, EMPS, TOTAL_SAL)
AS
S ELECT
DNAME, C OUNT (*), S UM (SALARY)
F ROM
DEPARTMENT,
EMPLOYEE
W HERE
DNUMBER=DNO
G ROUP B Y
DNAME
DEPT
DNAME
EMPS
TOTAL_SAL
Administration
3
93000
Headquarters
1
55000
Research
4
133000
Sobald man in einer Sitzung einen View nicht mehr benötigt, sollte man ihn
aus Effizienzgründen löschen:
D ROP V IEW
E_WORKS_ON_P
D ROP V IEW
DEPT
Prof. Dr. Dietmar Seipel
174
Vorlesung Datenbanken
Wintersemester 2012/13
An Views können in üblicher Weise Anfragen gestellt werden. Dies
erleichtert das wiederholte Stellen ähnlicher Anfragen.
S ELECT
FNAME, LNAME
F ROM
E_WORKS_ON_P
W HERE
PNAME = ’ProjectX’
Ein View ist immer aktuell, er reflektiert automatisch Änderungen, welche
sich aus Modifikationen der definierenden Tabellen ergeben.
Zur effizienten Implementierung gibt es zwei wichtige Strategien:
1. Anfrage–Modifizierung: bildet eine Anfrage an einen View auf
Anfragen an die definierenden Relationen ab.
2. View–Materialisierung: bei der ersten Anfrage an einen View wird
dieser berechnet; mittels einer inkrementellen Methode werden
Änderungen der definierenden Relationen auf den View propagiert.
Prof. Dr. Dietmar Seipel
175
Vorlesung Datenbanken
Wintersemester 2012/13
View–Updates
U PDATE–Operationen auf einem View können (manchmal) auf die
definierenden Tabellen propagiert werden.
U PDATE
E_WORKS_ON_P
S ET
PNAME = ’ProductY’
W HERE
LNAME = ’Smith’
A ND
FNAME = ’John’
A ND
PNAME = ’ProductX’
Leider sind bei Views (wie dem obigen), welche durch Joins aus mehreren
definierenden Tabellen abgeleitet sind, die erforderlichen Operationen auf
den definierenden Tabellen meist nicht eindeutig.
Prof. Dr. Dietmar Seipel
176
Vorlesung Datenbanken
Wintersemester 2012/13
Die erste der folgenden drei Alternativen wäre wohl am sinnvollsten:
1. Alternative: Änderung in WORKS_ON
U PDATE
WORKS_ON
S ET
PNO = ( S ELECT PNUMBER F ROM PROJECT
W HERE PNAME=’ProductY’ )
W HERE
ESSN = ( S ELECT SSN F ROM EMPLOYEE
W HERE LNAME=’Smith’ A ND FNAME=’John’ )
A ND
PNO = ( S ELECT PNUMBER F ROM PROJECT
W HERE PNAME=’ProductX’ )
Anstelle von ProductX arbeitet John Smith zukünftig dieselbe
Stundenanzahl an ProductY.
Prof. Dr. Dietmar Seipel
177
Vorlesung Datenbanken
Wintersemester 2012/13
2. Alternative: Änderung in PROJECT
D ELETE
F ROM PROJECT
W HERE
PNAME=’ProductY’
U PDATE
PROJECT
S ET
PNAME=’ProductY’
W HERE
PNAME=’ProductX’
ProductY wird gelöscht, und ProductX wird in ProductY umbenannt.
3. Alternative: Änderung in EMPLOYEE wäre relativ sinnlos.
Prof. Dr. Dietmar Seipel
178
Vorlesung Datenbanken
Wintersemester 2012/13
In den meisten Datenbanksystemen gelten folgende Regeln:
• Ein View über einer einzigen definierenden Tabelle ist modifizierbar,
falls die View–Attribute den Primärschlüssel oder einen anderen
Schlüsselkandidaten der Basisrelation enthalten, denn dann entspricht
jedes virtuelle Tupel des Views genau einem Basis–Tupel.
C REATE V IEW
EMP ( LNAME, SSN )
AS
S ELECT
LNAME, SSN
F ROM
EMPLOYEE
U PDATE
Prof. Dr. Dietmar Seipel
EMP
EMP
LNAME
SSN
Smith
444444444
Wong
222222222
Zelaya
777777777
Wallace
333333333
S ET
LNAME = ’Armstrong’
Narayan
555555555
W HERE
SSN = ’444444444’
English
666666666
Jabbar
888888888
Borg
111111111
179
Vorlesung Datenbanken
Wintersemester 2012/13
• Views, welche mittels Gruppierung und Aggregatsfunktionen definiert
sind, sind nicht modifizierbar.
U PDATE
DEPT
S ET
TOTAL_SAL = 100000
W HERE
DNAME=’Research’
DEPT
DNAME
EMPS
TOTAL_SAL
Administration
3
93000
Headquarters
1
55000
Research
4
133000
• Views über mehreren definierenden Tabellen (mit Joins) sind i.a. nicht
modifizierbar.
In SQL2 muß am Ende der View–Definition die Klausel
WITH CHECK OPTION
stehen, wenn der View modifizierbar sein soll.
Prof. Dr. Dietmar Seipel
180
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.5 Zusätzliche Bedingungen
Integritätsbedingungen
CREATE ASSERTION SALARY_CONSTRAINT
CHECK NOT EXISTS ( SELECT *
FROM EMPLOYEE E, EMPLOYEE M, DEPARTMENT D
WHERE E.SALARY > M.SALARY
AND E.DNO = D.DNUMBER AND D.MGRSSN = M.SSN ) );
Trigger geben eine Bedingung an und eine Aktion,
welche ausgeführt werden soll, sobald die Bedingung verletzt wird.
DEFINE TRIGGER SALARY_TRIGGER
ON EMPLOYEE E, EMPLOYEE M, DEPARTMENT D:
E.SALARY > M.SALARY AND
E.DNO = D.DNUMBER AND D.MGRSSN = M.SSN
ACTION_PROCEDURE INFORM_MANAGER (D.MGRSSN);
Prof. Dr. Dietmar Seipel
181
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.6 Indexe in SQL
Ein Index ist eine physikalische Zugriffsstruktur. Er erleichtert den Zugriff
auf Tupel über Bedingungen, welche die indexierten Attribute betreffen.
CREATE INDEX LNAME_INDEX
ON EMPLOYEE (LNAME);
CREATE INDEX NAMES_INDEX
ON EMPLOYEE (LNAME ASC, FNAME DESC, MINIT);
Zum Primärschlüssel und zu den Sekundärschlüsseln wird automatisch –
beim C REATE TABLE – ein Index angelegt.
Prof. Dr. Dietmar Seipel
182
Vorlesung Datenbanken
Wintersemester 2012/13
Das Schlüsselwort U NIQUE hinter dem C REATE erklärt die Indexattribute
zum Schlüssel.
CREATE UNIQUE INDEX NAMES_INDEX
ON EMPLOYEE (LNAME, FNAME, MINIT);
Eine Basisrelation kann höchstens einen “Clusterindex” – nach diesem sind
die Datensätze physisch auf der Festplatte organisiert – haben, aber beliebig
viele andere Indexe.
CREATE INDEX DNO_INDEX
ON EMPLOYEE (DNO)
CLUSTER;
Da die Pflege eines Index bei Updates der Basisrelation aufwendig ist, sollte
man den Index löschen, sobald er nicht mehr benötigt wird.
DROP INDEX DNO_INDEX;
Prof. Dr. Dietmar Seipel
183
Vorlesung Datenbanken
Wintersemester 2012/13
2.3.7 Java Database Connectivity (JDBC)
S QL kann im Zusammenhang mit herkömmlichen, prozeduralen
Programmiersprachen wie JAVA, C++ oder C benutzt werden.
Diese Sprachen nennt man dann Hostsprachen.
import
import
import
import
import
java.io.*;
java.sql.*;
java.util.*;
java.text.*;
java.lang.reflect.*;
class MySQL_Query {
protected
protected
protected
protected
Prof. Dr. Dietmar Seipel
final
final
String
String
String dbUser = "seipel";
String dbPassword = "...";
jdbcURL = "jdbc:mysql://localhost/company";
jdbcDriver = "org.gjt.mm.mysql.Driver";
184
Vorlesung Datenbanken
Wintersemester 2012/13
/* connection to the database */
protected Connection con = null;
public static void main(String args[])
{
MySQL_Query query = new MySQL_Query();
query.initConnection();
query.salary_query();
}
protected void initConnection()
...
private void salary_query()
...
}
Prof. Dr. Dietmar Seipel
185
Vorlesung Datenbanken
Wintersemester 2012/13
protected void initConnection()
{
try {
Class.forName(jdbcDriver).newInstance();
con = DriverManager.getConnection(
jdbcURL, dbUser, dbPassword );
}
catch (InstantiationException ie) {
System.out.println(ie + ie.getMessage());
}
catch (IllegalAccessException iae) {
System.out.println(iae + iae.getMessage());
}
catch (SQLException sqle) {
System.out.println(sqle + sqle.getMessage());
}
catch (ClassNotFoundException cnfe) {
System.out.println(cnfe + cnfe.getMessage());
}
}
Prof. Dr. Dietmar Seipel
186
Vorlesung Datenbanken
Wintersemester 2012/13
private void salary_query()
{
try {
String query =
"SELECT * FROM employee WHERE salary >= 30000";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String fname = rs.getString(1);
String minit = rs.getString(2);
String lname = rs.getString(3);
String salary = rs.getString(8);
System.out.println( "( " + fname + ", " + minit +
", " + lname + ", " + salary + " )" );
}
}
catch (Exception mye){
System.out.println(mye.toString());
}
}
Prof. Dr. Dietmar Seipel
187
Herunterladen