Datenbanksysteme I Dr. Gjergji Kasneci (Folien von Prof. Dr. Felix

Transcrição

Datenbanksysteme I Dr. Gjergji Kasneci (Folien von Prof. Dr. Felix
Datenbanksysteme I
SQL
Dr. Gjergji Kasneci (Folien von Prof. Dr. Felix Naumann)
7.5.2013
SQL – Historie
2
■ SEQUEL
(1974, IBM Research Labs San Jose)
■ SEQUEL2
(1976, IBM Research Labs San Jose)
□ System R
■ SQL
(1982, IBM)
Don Chamberlin, IBM
http://www.almaden.ibm.com/cs/people/
chamberlin/sequel-1974.pdf
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
SQL – Standardisierung
3
■ SQL1 von ANSI als Standard verabschiedet (1986)
■ SQL1 von der (ISO) als Standard verabschiedet (1987)
□ 1989 nochmals überarbeitet.
■ SQL2 oder SQL-92 von der ISO verabschiedet (1992)
■ SQL3 oder SQL:1999 verabschiedet
□ Trigger, rekursive Anfragen
□ Objektrelationale Erweiterungen
■ SQL:2003 von der ISO verabschiedet
□ XML-Support durch SQL/XML
■ SQL/XML:2006
□ XQuery eingebunden
■ SQL:2008
□ Updates auf Sichten, logisches Löschen (TRUNCATE), …
■ SQL:2011
□ Aktuelle Revision des SQL-Standards.
■ Trotz Standardisierung: Inkompatibilitäten zwischen Systemen der einzelnen
Hersteller
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
SQL:2008 Struktur
4
■ Part
□
■ Part
□
■ Part
□
■ Part
□
■ Part
□
■ Part
□
■ Part
□
■ Part
□
■ Part
□
1: Framework (SQL/Framework) – 82 Seiten
Überblick
2: Foundation (SQL/Foundation) – 1316 Seiten
Datenmodell, DDL, DML, Abfragen
3: Call-Level Interface (SQL/CLI) – 389 Seiten
Zugriff auf DBMS mittels Funktionsaufrufen aus anderen Programmiersprachen
4: Persistent Stored Modules (SQL/PSM) – 188 Seiten
Prozedurale Erweiterungen
9: Management of External Data (SQL/MED) – 484 Seiten
Neue Datentypen und Funktionen
10: Object Language Bindings (SQL/OLB) – 396 Seiten
Auch (SQLJ); zur Einbettung von SQL in Java
11: Information and Definition Schemas (SQL/Schemata) – 286 Seiten
DBMS werden selbst-beschreibend durch normierten Katalog
13: SQL Routines and Types (SQL/JRT) – 198 Seiten
Externe Java Routinen als „stored procedures“
Zusammen:
14: XML-Related Specifications (SQL/XML) – 438 Seiten
XML Datentyp und Erweiterung von SQL um XQuery
3777 Seiten
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Motivation für SQL
5
■ Meist-verbreitete Datenbankanfragesprache
■ Ad-hoc und einfach
■ Deklarativ
□ Nicht prozedural / imperativ
□ Optimierbar
■ Very-High-Level Language
■ Anfragen an relationale Algebra angelehnt
□ Hinzu kommt DDL: Data definition language
□ Hinzu kommt DML: Data manipulation language
■ Achtung: Syntax kann sich von System zu System leicht
unterscheiden.
■ Achtung: Funktionalität kann sich von System zu System leicht
unterscheiden.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
SQL Referenzen
6
■ DBMS-spezifische Webseiten
■ DB2
□ http://publib.boulder.ibm.com/infocenter/db2help/
□ SQL Reference Volume 1:
http://public.dhe.ibm.com/ps/products/db2/info/vr101/pdf/en_US
/DB2SQLRefVol1-db2s1e1011.pdf
□ SQL Reference Volume 2:
http://public.dhe.ibm.com/ps/products/db2/info/vr101/pdf/en_US
/DB2SQLRefVol2-db2s2e1011.pdf
■ Oracle
□ http://docs.oracle.com/cd/B19306_01/server.102/b14200/toc.ht
m
■ MS SQL Server
□ http://msdn.microsoft.com/enus/library/ms181080(v=sql.105).aspx
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Überblick
7
■ Einfache Anfragen
■ Anfragen über mehrere Relationen
■ Geschachtelte Anfragen
■ Operationen auf einer Relation
■ Datenbearbeitung (DML)
■ Schemata (DDL)
■ Sichten
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Beispielschema
8
Studio
Film
Titel
spielt_in
Jahr
Länge
FilmTitel
Schauspieler
Name
inFarbe
FilmJahr
Adresse
Manager
Name
Adresse
StudioName
VorsitzenderID
ProduzentID
Name
Geschlecht
Name
Adresse
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Geburtstag
ManagerID
Gehalt
SELECT … FROM … WHERE …
9
■ SELECT *
FROM
Film
WHERE StudioName = ‘Disney‘ AND Jahr= 1990;
■ Lesereihenfolge (und Schreibreihenfolge):
1. FROM: Relation(en) aus denen die Daten stammen
2. WHERE: Bedingung(en) an die Daten
3. SELECT: Schema der Ergebnisrelation
◊ *: Alle Attribute der Inputrelationen
■ Ausführung
□ Für jedes Tupel aus „Film“ prüfe die Bedingungen und gebe
gültige Tupel aus.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Groß- und Kleinschreibung
10
■ In SQL wird Groß- und Kleinschreibung nicht beachtet
□ From = FROM = from = FrOm
■ Auch bei Attribut- und Relationennamen
□ SELect vorNAMe fROm fiLM = SELECT vorname FROM film
■ Natürlich nicht bei Konstanten:
□ ‘FROM‘ ≠ ‘from‘ ≠ from
■ Konvention zur Lesbarkeit
□ Schlüsselworte großschreiben
□ Schemaelemente kleinschreiben
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Projektion in SQL (SELECT, )
11
Spezifikation in der SELECT Klausel
■ SELECT * FROM FILM
□ Alle Attribute
■ SELECT Titel, Jahr, inFarbe FROM FILM
□ Projektion auf die drei Attribute
Erweiterte Projektion
■ Umbenennung:
□ SELECT Titel AS Name, Jahr AS Zeit FROM FILM
■ Arithmetischer Ausdruck:
□ SELECT Titel, Länge * 0.016667 AS Stunden FROM FILM
■ Konstanten:
□ SELECT Titel, Länge * 0.016667 AS Stunden,
‘std.‘ AS inStunden FROM FILM
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Selektion in SQL (WHERE, )
12
Spezifikation in der WHERE Klausel
■ Bedingungen wie in einer Programmiersprache
■ Sechs Vergleichsoperatoren
□ =, <>, <, >, <=, >=
□ <>, <=, >= entspricht ≠, , 
■ Operanden
□ Konstanten und Attributnamen
□ Auch Attribute, die nicht in der SELECT Klausel genannt
werden.
■ Arithmetische Ausdrücke für numerische Attribute
□ Z.B.: (Jahr - 1930) * (Jahr - 1930) <= 100
■ Konkatenation für Strings
□ ‘Star‘ || ‘Wars‘ entspricht ‘StarWars‘
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Selektion in SQL
13
Ergebnis ist stets Boole‘scher Wert
■ TRUE oder FALSE
■ Können mit AND, OR und NOT verknüpft werden.
□ Klammerungen sind erlaubt.
■ Nur wenn insgesamt auf TRUE evaluiert wird, erscheint das
entsprechende Tupel im Ergebnis.
Beispiele
■ SELECT Titel
FROM Film
WHERE Jahr > 1970 AND NOT inFarbe;
■ SELECT Titel
FROM Film
WHERE (Jahr > 1970 OR Länge < 90) AND StudioName = ‘MGM‘;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Stringvergleiche
14
■ Datentypen
□ Array fester Länge, Buchstabenliste variabler Länge,
Konstanten
□ SQL erlaubt viele Vergleiche über Datentypen hinweg
■ foo _ _ _ _ _ = foo = ‘foo‘
■ Vergleiche mit <, >, <=, >=
□ Lexikographischer Vergleich
□ ‘fodder‘ < ‘foo‘; ‘bar‘ < ‘bargain‘;
□ Sortierreihenfolge upper-case/lower-case usw. je nach DBMS
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
String-Mustervergleiche mit LIKE
15
■ string LIKE pattern
□ bzw. string NOT LIKE pattern
■ Pattern hat spezielle Zeichen
□ ‘%‘: Beliebige Sequenz von 0 oder mehr Zeichen
□ ‘_‘: Ein beliebiges Zeichen
■ SELECT Titel FROM Film
WHERE Titel LIKE ‘Star
_ _ _ _‘;
□ Star Wars und Star Trek
■ SELECT Titel FROM Film WHERE Titel LIKE ‘%War%‘;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Datum und Uhrzeit
16
Spezielle Datentypen und Repräsentationen
■ Datumskonstante:
□ DATE ‚YYYY-MM-DD‘
□ DATE ‚1948-05-14‘
■ Zeitkonstante
□ TIME ‚HH:MM:SS.S‘
□ TIME ‚15:00:02.5‘
■ Zeitstempel
□ TIMESTAMP ‚1948-05-14 15:00:02.5‘
■ Zeitvergleiche
□ TIME ‚15:00:02.5‘ < TIME ‚15:02:02.5‘ ergibt TRUE
□ Selektion: ERSCHEINUNGSTAG >= DATE ‚1949-11-12‘
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Nullwerte
17
■ Darstellung: NULL bzw. ⊥
■ Mögliche Interpretationen
□ Unbekannter Wert
◊ Geburtstag eines
Schauspielers
□ Wert unzulässig
◊ Ehegatte eines
unverheirateten
Schauspielers
□ Wert unterdrückt
◊ Geheime
Telefonnummer
■ Regeln für Umgang mit Nullwerten
□ Arithmetische Operationen mit NULL
ergeben NULL
□ Vergleich mit NULL ergibt
Wahrheitswert UNKNOWN
□ NULL ist keine Konstante, sondern
erscheint nur als Attributwert
■ Beispiel (sei der Wert von x NULL):
□ x+3 ergibt NULL.
□ NULL+3 ist kein zulässiger
Ausdruck.
□ x = 3 ergibt UNKNOWN.
■ Prüfen von Nullwerten in WHERE Klausel
□ Geburtstag IS NULL
□ bzw. Geburtstag IS NOT NULL
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Wahrheitswerte
18
AND
true
unknown
false
true true
unknown
false
unknown unknown
unknown
false
false
false
false false
OR
true
unknown
false
true
true
unknown true
unknown
unknown
false true
unknown
false
true true
NOT
true false
unknown unknown
false true
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Wahrheitswerte
19
AND
true
unknown
false
true true
unknown
false
unknown unknown
unknown
false
false
false
false false
OR
true
unknown
false
true
true
unknown true
unknown
unknown
false true
unknown
false
true true
NOT
true false
unknown unknown
false true
Rechenregeln
■ TRUE
=1
FALSE
=0
UNKNOWN = ½
■ AND: Minimum der beiden
Werte
■ OR: Maximum der beiden Werte
■ NOT: 1 – Wert
■ Beispiel
□ TRUE AND (FALSE OR
NOT(UNKNOWN))
= MIN(1, MAX(0, (1 - ½ )))
= MIN(1, MAX(0, ½ )
= MIN(1, ½ ) = ½.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Wahrheitswerte
20
Titel
Jahr
Länge
inFarbe
Studio
ProduzentID
Total Recall
1990
NULL
True
Fox
12345
■ Überraschendes Verhalten
□ SELECT *
FROM Film
WHERE Länge <= 90 OR Länge > 90;
UNKNOWN
UNKNOWN
UNKNOWN
□ Tupel erscheint nicht im Ergebnis.
■ Ausführungspriorität: NOT vor AND vor OR
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Sortierung
21
ORDER BY Klausel ans Ende der Anfrage
■ ORDER BY <Attributliste> DESC/ASC
■ ASC (aufsteigend) ist default
■ SELECT *
FROM
Film
WHERE StudioName = ‘Disney‘ AND Jahr = 1990
ORDER BY Länge, Titel;
■ SELECT *
FROM
Film
WHERE StudioName = ‘Disney‘ AND Jahr = 1990
ORDER BY Länge ASC, Titel DESC;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Überblick
22
■ Einfache Anfragen
■ Anfragen über mehrere Relationen
■ Geschachtelte Anfragen
■ Operationen auf einer Relation
■ Datenbearbeitung (DML)
■ Schemata (DDL)
■ Sichten
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Motivation
23
■ Hauptstärke der Relationalen Algebra ist die Kombination von
Relationen
■ Erst mit mehreren Relationen sind viele interessante Anfragen
möglich.
■ Nennung der beteiligten Relationen in der FROM Klausel
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Kreuzprodukt und Join
24
■ Film(Titel, Jahr, Länge, inFarbe, StudioName, ProduzentID)
■ Manager(Name, Adresse, ManagerID, Gehalt)
■ SELECT
FROM
WHERE
AND
Name
Film, Manager
Titel = ‘Star Wars‘
ProduzentID = ManagerID;
Kreuzprodukt
Selektionsbedingung
Joinbedingung
■ Semantik
□ Betrachte jedes Tupelpaar der Relationen Film und Manager.
□ Wende Bedingung der WHERE Klausel auf jedes Tupelpaar an
□ Falls Bedingung erfüllt, produziere ein Ergebnistupel.
■ Kreuzprodukt gefolgt von Selektion: Join
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Uneindeutige Attributnamen
25
■ Schauspieler(Name, Adresse, Geschlecht, Geburtstag)
■ Manager(Name, Adresse, ManagerID, Gehalt)
Bei gleichen Attributnamen aus mehreren beteiligten Relationen:
■ Relationenname als Präfix:
□ SELECT Schauspieler.Name, Manager.Name
FROM
Schauspieler, Manager
WHERE Schauspieler.Adresse = Manager.Adresse;
■ Präfix ist auch erlaubt wenn Attributname eindeutig ist.
□ Erleichtert das Lesen von SQL Anfragen
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Tupelvariablen
26
■ Zur eindeutigen Kennzeichnung von Tupeln beteiligter Relationen
□ „Alias“ einer Relation
□ Insbesondere: Bei der mehrfachen Verwendung einer Relation
in einer Anfrage
■ Gesucht: Schauspieler, die zusammen leben
□ SELECT Star1.Name, Star2.Name
FROM
Schauspieler Star1, Schauspieler Star2
WHERE Star1.Adresse = Star2.Adresse
■ Auch sinnvoll als abkürzenden Schreibweise
Äquivalent zu
Schauspieler AS Star2
□ SELECT S.Name, M.Name
FROM
Schauspieler S, Manager M
WHERE S.Adresse = M.Adresse;
■ Ohne explizites Angeben einer Tupelvariablen wird der
Relationenname als Tupelvariable verwendet.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Tupelvariablen – Selfjoin
27
Name
Adresse
Carrie Fisher
123 Maple St., Hollywood
F
9/9/99
Mark Hamill
456 Oak Rd., Brentwood
M
8/8/88
Brad Pitt
123 Maple St., Hollywood
M
7/7/77
■ SELECT Star1.Name, Star2.Name
FROM
Schauspieler Star1, Schauspieler Star2
WHERE Star1.Adresse = Star2.Adresse;
■ SELECT
FROM
WHERE
AND
Star1.Name, Star2.Name
Schauspieler Star1, Schauspieler Star2
Star1.Adresse = Star2.Adresse
Star1.Name <> Star2.Name;
■ SELECT
FROM
WHERE
AND
Star1.Name, Star2.Name
Schauspieler Star1, Schauspieler Star2
Star1.Adresse = Star2.Adresse
Star1.Name < Star2.Name;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Geschlecht
Geburt
Star1.Name
Star2.Name
Carrie Fisher
Carrie Fisher
Carrie Fisher
Brad Pitt
Brad Pitt
Carrie Fisher
Brad Pitt
Brad Pitt
Mark Hamill
Mark Hamill
Star1.Name
Star2.Name
Carrie Fisher
Brad Pitt
Brad Pitt
Carrie Fisher
Star1.Name
Star2.Name
Brad Pitt
Carrie Fisher
Interpretation von Anfragen
28
Drei Interpretationsvarianten für Anfragen mit mehreren Relationen
■ Nested Loops (geschachtelte Schleifen)
□ Bei mehreren Tupelvariablen: Eine geschachtelte Schleife für
jede Variable
■ Parallele Zuordnung
□ Alle Kombinationen werden parallel bezüglich der Bedingungen
geprüft.
■ Relationale Algebra
□ Bilde Kreuzprodukt
□ Wende Selektionsbedingungen auf jedes Resultat-Tupel an
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Interpretation von Anfragen
29
■ Gegeben drei Relationen: R(A), S(A) und T(A)
■ Gesucht: R  (S  T)
□ SELECT
FROM
WHERE
OR
(= (R  S)  (R  T) )
R.A
R, S, T
R.A = S.A
R.A = T.A;
■ Problemfall: T ist leer, hat also kein Tupel
■ Vermeintliches Resultat: R  S
■ Tatsächliches Resultat: leere Menge
□ Ausführung als
drei geschachtelte Schleifen
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
SELECT *
FROM
(
(SELECT A FROM R)
INTERSECT
(SELECT * FROM
(SELECT A FROM S)
UNION
(SELECT A FROM T)
)
)
Joins
30
Man kann Joins auch auf andere Weise ausdrücken.
■ Geschmacksfrage
■ Film CROSS JOIN spielt_in
□ Kreuzprodukt
□ Doppelte Attributnamen werden mit Präfix der Relation aufgelöst
■ Film JOIN spielt_in
ON Titel = FilmTitel AND Jahr = FilmJahr
□ Theta-Join
□ SELECT Titel, Jahr, Länge, inFarbe, StudioName,
ProduzentID, SchauspielerName
FROM
Film JOIN spielt_in ON Titel = FilmTitel
AND Jahr = FilmJahr;
□ Eliminiert redundante Attribute FilmTitel und FilmJahr
■ Schauspieler NATURAL JOIN Manager
□ Natural Join; Eliminiert redundante Attribute
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Outer Joins
31
■ Schauspieler(Name, Adresse, Geschlecht, Geburtstag)
■ Manager(Name, Adresse, ManagerID, Gehalt)
■ Schauspieler, die zugleich Manager sind
□ SELECT Name, Adresse, Geburtstag, Gehalt
FROM Schauspieler NATURAL INNER JOIN Manager
■ Schauspieler und gegebenenfalls ihre Managerinfo
□ …FROM Schauspieler NATURAL LEFT OUTER JOIN Manager
□ Gehalt bleibt gegebenenfalls NULL
■ Manager und gegebenenfalls ihre Schauspielerinfo
□ …FROM Schauspieler NATURAL RIGHT OUTER JOIN Manager
□ Geburtstag bleibt gegebenenfalls NULL
■ Alle Schauspieler und Manager
□ …FROM Schauspieler NATURAL FULL OUTER JOIN Manager
□ Geburtstag oder Gehalt bleiben gegebenenfalls leer
□ Unterschied zu UNION: Nur eine Zeile pro Person
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Outer Joins
32
Manager
Schauspieler
Geburtstag
Name
1.2.1960 Mark Hamill
27.5.1969 Carrie Fischer
11.12.1940 Alec Guinness
Adresse
Gehalt
LA
NULL
New York
NULL
London
NULL
22.3.1981 Ben Affleck
Boston
23.8.1973 Quentin Tarantino
Berlin
5Mio
10Mio
NULL
George Lukas
San Jose
100Mio
NULL
Steven Spielberg
LA
500Mio
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Outer Joins
33
■ Alle Filme mit Schauspielern
□ Film JOIN spielt_in
ON Titel = FilmTitel AND Jahr = FilmJahr;
■ Alle Filme
□ Film FULL OUTER JOIN spielt_in
ON Titel = FilmTitel AND Jahr = FilmJahr;
■ Alle Filme, gegebenenfalls mit Schauspieler
□ Film LEFT OUTER JOIN spielt_in
ON Titel = FilmTitel AND Jahr = FilmJahr;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Kreuzprodukt
34
■ Alle Paare aus Tupeln der beteiligten Relationen
□ SELECT *
FROM Schauspieler CROSS JOIN Film
□ SELECT *
FROM Schauspieler, Film
■ Selten verwendet
■ Grundbaustein für Joins
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Mengenoperationen in SQL
35
■ Vereinigung: UNION
■ Schnittmenge: INTERSECT
■ Differenz: EXCEPT
■ Mengenoperationen nur zwischen geklammerten
Anfrageergebnissen
■ Mengenoperationen haben implizit eine Mengensemantik
□ Wandeln Input-Relationen in Mengen um
□ Wandeln Output in Menge um
■ Anfrageergebnisse müssen gleiche Schemata haben
□ Gleiche Attributnamen
□ Gleiche Datentypen
■ Schauspieler(Name, Adresse, Geschlecht, Geburtstag)
■ Manager(Name, Adresse, ManagerID, Gehalt)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Schnittmenge: INTERSECT
36
■ Entspricht dem logischen „und“
■ (SELECT Name, Adresse FROM Schauspieler)
INTERSECT
(SELECT Name, Adresse FROM Manager);
■ (SELECT Name, Adresse
FROM
Schauspieler
WHERE Geschlecht = ‘F‘)
INTERSECT
(SELECT Name, Adresse
FROM
Manager
WHERE Gehalt > 1.000.000)
■ Multimengen-Semantik: INTERSECT ALL
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Vereinigung: UNION
37
■ Entspricht dem logischen „oder“
■ (SELECT Name, Adresse FROM Schauspieler)
UNION
(SELECT Name, Adresse FROM Manager);
■ Multimenge: UNION ALL
□ Beliebt, da schnell
□ Verwenden falls
◊ Semantik egal
◊ Multimengensemantik erwünscht
◊ Mengeneigenschaft von Input und Output bekannt
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Differenz: EXCEPT
38
■ Auch MINUS
■ (SELECT Titel, Jahr
FROM
Film)
EXCEPT
(SELECT FilmTitel AS Titel, FilmJahr AS Jahr
FROM
spielt_in)
■ Multimenge: EXCEPT ALL
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Klammerung
39
SELECT *
FROM
(
(SELECT A FROM R)
INTERSECT
(SELECT * FROM
(SELECT A FROM S)
UNION
(SELECT A FROM T)
)
)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Zusammenfassung der Semantik
40
R1
R2
1
1
1
2
2
2
3
4
4
5
1
1
3
3
3
3
4
UNION
ALL
UNION
EXCEPT
ALL
EXCEPT
INTERSECT
ALL
1
1
3
4
INTERSECT
1
1
1
2
1
1
2
2
5
3
1
3
2
4
1
4
2
1
5
4
2
5
2
2
3
3
3
3
3
4
4
http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/topi
4
c/com.ibm.db2.luw.sql.ref.doc/doc/r0000877.html
5
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Überblick
41
■ Einfache Anfragen
■ Anfragen über mehrere Relationen
■ Geschachtelte Anfragen
■ Operationen auf einer Relation
■ Datenbearbeitung (DML)
■ Schemata (DDL)
■ Sichten
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Motivation
42
Eine Anfrage kann Teil einer anderen Anfrage sein.
■ Theoretisch beliebig tiefe Schachtelung
Drei Varianten
1. Subanfrage erzeugt einen einzigen Wert, der in der WHEREKlausel mit einem anderen Wert verglichen werden kann.
2. Subanfrage erzeugt eine Relation, die auf verschiedene Weise in
WHERE-Klausel verwendet werden kann.
3. Subanfrage erzeugt eine Relation, die in der FROM Klausel
verwendet werden kann.
□ Wie jede normale Relation
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Skalare Subanfragen
43
Allgemeine Anfragen produzieren Relationen.
■ Mit mehreren Attributen
□ Zugriff auf ein bestimmtes Attribut ist möglich
■ i.A. mit mehreren Tupeln
■ Manchmal (garantiert) nur ein Tupel und Projektion auf nur ein
Attribut
□ „Skalare Anfrage“
□ Verwendung wie eine Konstante möglich
SUM
17
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Skalare Subanfragen
44
■ Manager(Name, Adresse, ManagerID, Gehalt)
■ Film(Titel, Jahr, Länge, inFarbe, StudioName, ProduzentID)
■ Gesucht: Produzent von Star Wars
□ SELECT Name
FROM
Film, Manager
WHERE Titel = ‘Star Wars‘ AND Jahr = ‘1977‘
AND
ProduzentID = ManagerID;
■ Oder aber
□ SELECT Name
FROM
Manager
WHERE ManagerID =
( SELECT ProduzentID
FROM
Film
WHERE Titel = ‘Star Wars‘ AND Jahr = ‘1977‘ );
■ DBMS erwartet genau ein Tupel als Ergebnis der Teilanfrage
□ Falls kein Tupel: Laufzeitfehler
□ Falls mehr als ein Tupel: Laufzeitfehler
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Skalare Subanfragen – Beispiel
45
Abteilungen, deren durchschnittliche Bonuszahlungen höher sind als
deren durchschnittliches Gehalt.
SELECT a.Name, a.Standort
FROM
Abteilung a
WHERE (SELECT AVG(bonus)
FROM
personal p
WHERE a.AbtID = p.AbtID)
>
(SELECT AVG(gehalt)
FROM
personal p
WHERE a.AbtID = p.AbtID)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Skalare Subanfragen – Beispiel
46
■ Alle Potsdamer Abteilungen mit ihrem Maximalgehalt.
□ SELECT a.AbtID, a.Name,
(SELECT MAX(Gehalt)
FROM
Personal p
WHERE a.AbtID = p.AbtID) AS maxGehalt
FROM
Abteilung a
WHERE a.Ort = ‘Potsdam‘
■ Anmerkung: Auch Abteilungen ohne Mitarbeiter erscheinen im
Ergebnis.
■ Nicht so in der folgenden Anfrage:
□ SELECT a.AbtID, a.Name, MAX(p.Gehalt) AS maxGehalt
FROM
Abteilung a, Personal p
WHERE a.Ort = ‘Potsdam‘
AND
a.AbtID = p.AbtID
GROUP BY a.AbtID, a.Name
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Bedingungen mit Relationen
47
Bestimmte SQL Operatoren auf Relationen erzeugen Boole‘sche Werte
■ EXISTS R
□ TRUE, falls R nicht leer
■ x IN R
□
□
□
■ x >
TRUE falls x gleich einem Wert in R ist (R hat nur ein Attribut)
Verallgemeinerung auf Tupel später
x NOT IN R: TRUE falls x keinem Wert in R gleicht
ALL R
□
□
□
■ x >
TRUE falls x größer als jeder Wert in R ist (R hat nur ein Attribut)
Alternativ: <, >, <=, >=, <>, =
x <> ALL R: Entspricht x NOT IN R bzw. auch NOT(x in R)
ANY R
□ TRUE falls x größer als mindestens ein Wert in R ist (R hat nur ein Attribut)
□ Alternativ: <, >, <=, >=, <>, =
□ x = ANY R: Entspricht x IN R
□ Alternativer Befehl: SOME
■ Negation mit NOT(…) ist immer möglich.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
EXISTS Beispiele
48
■ Die ISBNs aller ausgeliehenen Bücher
□ SELECT ISBN
FROM
BuchExemplar
WHERE EXISTS
(SELECT *
FROM Ausleihe
WHERE Ausleihe.Inventarnr = BuchExemplar.Inventarnr)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
EXISTS Beispiele
49
■ Lehrstuhlbezeichnungen der Professoren, die alle von ihnen
gelesenen Vorlesungen auch schon einmal geprüft haben.
■ bzw. Lehrstuhlbezeichnungen von Professoren, so dass keine von
diesem gelesene Vorlesung existiert, die von ihm nicht geprüft
wurde.
□ SELECT Lehrstuhlbezeichnung
FROM
Prof
WHERE NOT EXISTS
(SELECT *
FROM
Liest
WHERE Liest.PANr = Prof.PANr
AND NOT EXISTS (SELECT *
FROM Prüft
WHERE Prüft.PANr = Prof.PANr
AND
Prüft.VL_NR = Liest.VL_NR)
)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
IN Beispiele
50
■ Eine Auswahl an Büchern
□ SELECT Titel
FROM Bücher
WHERE ISBN IN
(‘3898644006‘, ‘1608452204‘, ‘0130319953‘)
■ Matrikel der Studenten, die zumindest einen Prüfer gemeinsam
mit dem Studenten der Matrikel ‚123456‘ haben
□ SELECT Matrikel
FROM
Prüft
WHERE Prüfer IN ( SELECT Prüfer
FROM Prüft
WHERE Matrikel = ‘123456‘)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
IN Beispiele
51
■ Nachnamen aller Professoren, die schon einmal eine 1,0 vergeben
haben.
□ SELECT Nachname
FROM
Prof
WHERE 1.0 IN ( SELECT Note
FROM
Prüft
WHERE Prüfer = Prof.ID )
■ Achtung: Korrellierte Subanfrage
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
ALL und ANY Beispiele
52
■ Die schlechteste Note des Studenten mit Matrikel 123456
□ SELECT
FROM
WHERE
AND
Note
Prüft
Matrikel = ‘123456‘
Note >= ALL (SELECT Note
FROM
Prüft
WHERE Matrikel = ‘123456‘
■ All Studenten, die mindestens eine Prüfung absolvierten
□ SELECT Name, Matrikel
FROM
Student
WHERE Matrikel = ANY (SELECT Matrikel
FROM
Prüft)
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Bedingungen mit Tupeln
53
Verallgemeinerung von IN, ALL und ANY auf Tupel
■ t IN R
□ TRUE falls t ein Tupel in R ist (mehr als ein Attribut möglich)
□ Setzt gleiche Schemata voraus
□ Setzt gleiche Reihenfolge der Attribute voraus
■ t > ALL R
□ TRUE falls t größer als jedes Tupel in R ist
□ Vergleiche in Standardreihenfolge der Attribute
■ t <> ANY R
□ TRUE falls R mindestens ein Tupel hat, das ungleich t ist
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Bedingungen mit Tupeln
54
■ Namen von Produzenten von Filmen mit Harrison Ford
□ SELECT Name
FROM
Manager
WHERE ManagerID IN
( SELECT ProduzentID
FROM
Film
WHERE (Titel, Jahr) IN
( SELECT FilmTitel AS Titel, FilmJahr AS Jahr
FROM
spielt_in
WHERE SchauspielerName = ‘Harrison Ford‘
));
■ Analyse am besten von innen nach außen
■ Alternative Formulierung
□ SELECT
FROM
WHERE
AND
AND
AND
Name
Manager, Film, spielt_in
ManagerID = ProduzentID
Titel = FilmTitel
Jahr = FilmJahr
SchauspielerName = ‘Harrison Ford‘;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Subanfragen in FROM-Klausel
55
Bisher: Nur Subanfragen in WHERE-Klausel
■ Anstelle einfacher Relation steht eine geklammerte Subanfrage
■ Es muss ein Alias vergeben werden.
□ SELECT M.Name
FROM Manager M, (SELECT ProduzentID AS ID
FROM
Film, spielt_in
WHERE Titel = FilmTitel
AND
Jahr = FilmJahr
AND
Schauspieler = ‘Harrison Ford‘)
Produzent
WHERE M.ManagerID = Produzent.ID;
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Korrelierte Subanfragen
56
■ Unkorrelliert: Subanfragen einmalig ausführen und das Ergebnis
weiterverwenden
■ Korrelierte Subanfragen werden mehrfach ausgeführt, einmal pro
Bindung der korrelierten Variable der äußeren Anfrage
■ Alle mehrfachen Filme mit Ausnahme der jeweils jüngsten
Ausgabe
Scope: Attributnamen
□ SELECT Titel, Jahr
gehören zunächst zur
FROM Film Alt
Tupelvariablen der aktuellen
WHERE Jahr < ANY
Anfrage. Sonst: Suche von
innen nach außen.
( SELECT Jahr
FROM Film
WHERE Titel = Alt.Titel);
□ Ausführung der Subanfrage für jedes Tupel in Filme
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Korrelierte Subanfragen – Beispiel
57
Unkorreliert:
Name und Gehalt aller Mitarbeiter
in Potsdam
Korreliert:
SELECT Name, Gehalt
FROM Personal p
WHERE AbtID IN
SELECT Name, Gehalt
FROM
Personal p
WHERE Gehalt >
(SELECT 0.1*Budget
FROM Abteilung a
WHERE a.AbtID = p.AbtID)
(SELECT AbtID
FROM
Abteilung
WHERE Ort = ‘Potsdam‘)
Name und Gehalt aller
Mitarbeiter, deren Gehalt höher
als 10% des Abteilungsbudgets
ist.
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014
Überblick
58
■ Einfache Anfragen
■ Anfragen über mehrere Relationen
■ Geschachtelte Anfragen
■ Operationen auf einer Relation
■ Datenbearbeitung (DML)
■ Schemata (DDL)
■ Sichten
Gjergji Kasneci | Datenbanksysteme I | Sommer 2014

Documentos relacionados