60
Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen

Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Embed Size (px)

Citation preview

Page 1: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Dr. Brigitte Mathiak

Kapitel 2

SQL Anfragen

Page 2: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 2

Lernziele

• Syntax von SQL Anfragen

• Präzise Semantik von SQL Anfragen:Abbildung auf Relationale Algebra

• Erweiterte Konstrukte in SQL Abfragen:Aggregation, Gruppierung, rekursive Anfragen ..

Page 3: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 4: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Einfache SQL-Anfragen

select *

from Professoren;

PersNr

Name Rang Raum

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

select *: Wählt alles aus

from wählt die Tabelle

Page 5: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Einfache SQL-Anfragen

PersNr Name2125 Sokrates2126 Russel

2136 Curie2137 Kant

select PersNr, Name

from Professoren

where Rang= ´C4´;

Bei select können auch bestimmte Spalten gewählt werden

Bei where können logische Einschränkungen gemacht werden

Page 6: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Einfache SQL-AnfragenSortierung

select PersNr, Name, Rang

from Professoren

order by Rang desc, Name asc;

PersNr Name Rang2136 Curie C42137 Kant C42126 Russel C42125 Sokrates C42134 Augustinus C32127 Kopernikus C32133 Popper C3

Mit order by kann die Reihenfolge der Anzeige verändert werden

Was zuerst steht, danachwird zuerst sortiert

desc ist für absteigende Ordnung, asc für aufsteigende

Page 7: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

select distinct Rang

from Professoren

Rang

C3

C4

Duplikateliminierung

Mit distinct werden Duplikate herausgenommen

Page 8: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 9: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Anfragen über mehrere Relationen

Welcher Professor liest "Mäeutik"?

select Name, Titelfrom Professoren, Vorlesungenwhere PersNr = gelesenVon and Titel = `Mäeutik‘ ;

Hinter from werden nun zwei Tabellen genannt

Page 10: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Anfragen über mehrere Relationen

RaumRangNamePersNr

226232

7

C4C4

C4

SokratesRussel

Kant

21252126

2137

Professoren

gelesen VonSWSTitelVorlNr

21374Grundzüge5001

21374Die 3 Kritiken4630

21252Mäeutik5049

21254Ethik5041

Vorlesungen

Verknüpfung

Page 11: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

4630

5041

5001

5049

5041

5001

VorlNr

Die 3 Kritiken

Ethik

Grundzüge

Mäeutik

Ethik

Grundzüge

Titel

4

4

4

2

4

4

SWS

2137

2125

2137

2125

2125

2137

gelesen Von

7

232

232

226

226

226

Raum

C4Kant2137

RangNamePersNr C4Sokrates2125

C4Russel2126

C4Russel2126

C4Sokrates2125

C4Sokrates1225

PersNr Name Rang Raum VorlNr Titel SWS gelesen Von

2125 Sokrates C4 226 5049 Mäeutik 2 2125

Name TitelSokrates Mäeutik

where PersNr = gelesenVon and Titel = `Mäeutik‘

select Name, Titel

Jeder mit jedem einmal

Page 12: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Anfragen über mehrere Relationen

Welche Studenten hören welche Vorlesungen?

select Name, Titelfrom Studenten, hören, Vorlesungenwhere Studenten.MatrNr = hören.MatrNr and

hören.VorlNr = Vorlesungen.VorlNr;

Alternativ:select s.Name, v.Titelfrom Studenten s, hören h, Vorlesungen vwhere s. MatrNr = h. MatrNr and

h.VorlNr = v.VorlNrMit Korrelationsvariablen

Page 13: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 14: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Mengenoperationen und geschachtelte Anfragen

Mengenoperationen union, intersect, minus (Vereinigung, Schnittmenge, Differenz)

( select Name from Assistenten )union( select Name from Professoren);

Was passiert hier?

Was würde bei intersect Passieren oder bei minus?

Jeder für sich mit Zettel und Stift; 3 min.

Page 15: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

Existenzquantor exists

select p.Namefrom Professoren pwhere not exists ( select *

from Vorlesungen v where v.gelesenVon =

p.PersNr );

Korrelation

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Page 16: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Existenzquantor exists

select p.Namefrom Professoren pwhere not exists ( select *

from Vorlesungen v where v.gelesenVon =

p.PersNr );Professoren

PersNr

Name Rang Raum

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

ProfessorenPersN

rName Rang Rau

m

2127 Kopernikus

C3 310

2136 Curie C4 36

Page 17: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Mengenvergleich

select Name

from Professoren

where PersNr not in ( select gelesenVon

from Vorlesungen );

Unkorrelierte Unterabfragen sind meist effizienter, da sienicht pro Zeile ausgewertetwerden müssen

Hatten wir das nicht gerade?

Page 18: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 18

"Quantifizierte" Subqueries

Die Bedingung Wert ANY Menge mit {{=, , , , , } ist erfüllt, wenn es in der Menge ein Element gibt, für das Wert Element gilt. (=ANY ist äquivalent zu IN) .. SOME ist equivalent to ANY

Die Bedingung Wert ALL Menge mit {=, , , , , } ist erfüllt, wenn für alle Elemente der Menge gilt: Wert Element. (<>ALL ist äquivalent zu NOT IN.)

Die Bedingung EXISTS Menge ist erfüllt, wenn die Menge nicht leer ist (dies ist äquivalent zur Bedingung 0 < SELECT COUNT(*) FROM ...)

Achtung: Wert ALL (query_returns_no_rows) = TRUE Wert ANY (query_returns_no_rows) = FALSE

Page 19: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 19

"Quantifizierte" Subqueries

Anfrage:Studenten im höchsten Semester:

SELECT * FROM StudentenWHERE Semester >= ALL (SELECT Semester FROM Studenten) ;

Anfrage:Studenten, für die keine Prüfungen erfasst sind:

SELECT * FROM Studenten sWHERE NOT EXISTS ( SELECT * FROM Prüfen p WHERE p.MatrNr = s.MatrNr );

Page 20: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 21: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Aggregatfunktion und GruppierungAggregatfunktionen avg, max, min, count, sum

select avg (Semester)from Studenten;

select gelesenVon, sum (SWS)from Vorlesungengroup by gelesenVon;

select gelesenVon, Name, sum (SWS)from Vorlesungen, Professorenwhere gelesenVon = PersNr and Rang = ´C4´group by gelesenVon, Namehaving avg (SWS) >= 3;

Page 22: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Besonderheiten bei Aggregatoperationen

SQL erzeugt pro Gruppe ein Ergebnistupel

Deshalb müssen alle in der select-Klausel aufgeführten Attribute - außer den aggregierten – auch in der group by-Klausel aufgeführt werden

Nur so kann SQL sicherstellen, dass sich das Attribut nicht innerhalb der Gruppe ändert

Page 23: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Ausführen der Anfrage mit group by

Vorlesung x ProfessorenVorlNr Titel SWS gelesen

VonPersN

rName Ran

gRaum

5001 Grundzüge

4 2137 2125 Sokrates

C4 226

5041 Ethik 4 2125 2125 Sokrates

C4 226

... ... ... ... ... ... ... ...4630 Die 3

Kritiken4 2137 2137 Kant C4 7

where gelesenVon = PersNr and Rang = ´C4´

Page 24: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

VorlNr Titel SWS gelesen Von

PersNr

Name RangRaum

5001 Grundzüge 4 2137 2137 Kant C4 75041 Ethik 4 2125 2125 Sokrates C4 2265043 Erkenntnis-

theorie3 2126 2126 Russel C4 232

5049 Mäeutik 2 2125 2125 Sokrates C4 2264052 Logik 4 2125 2125 Sokrates C4 2265052 Wissenschafts-

theorie3 2126 2126 Russel C4 232

5216 Bioethik 2 2126 2126 Russel C4 2324630 Die 3 Kritiken 4 2137 2137 Kant C4 7

group by gelesenVon, Name

Page 25: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

having avg (SWS) >= 3

232232232

226

226226

77

Raum

C4Russel212621263Erkenntnistheorie5043C4Russel212621263Wissenschaftsthe

o.5052

C4Russel212621262Bioethik5216

C4Sokrates212521254Logik4052

C4Sokrates212521254Ethik5041C4Sokrates212521252Mäeutik5049

C4Kant213721374Die 3 Kritiken4630C4

Rang

4

SWS

Grundzüge

Titel NamePersNrgelesenVon

VorlNr

Kant213721375001

RaumRangNamePersNr

gelesenVonSWSTitelVorlNr

77

C4C4

KantKant

21372137

21372137

44

GrundzügeDie 3 Kritiken

50014630

C4C4C4

226226226

424

EthikMäeutik

Logik

SokratesSokratesSokrates

212521252125

212521252125

504150494052

Aggregation (sum(SWS)) pro Gruppe

Page 26: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

gelesenVon Name sum (SWS)

2125 Sokrates 10

2137 Kant 8

Page 27: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 28: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Maximalen Eintrag ausgeben

Wie heißt der Student im höchsten Semester?

Alternative 1: mit >= ALL also

SELECT Name FROM StudentenWHERE Semester >= ALL (SELECT Semester FROM Studenten) ;

Alternative 2: mit Maximum

SELECT Name FROM StudentenWHERE Semester = (SELECT MAX(Semester) FROM Studenten);

Page 29: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Richtig schwierig: Welcher Professor hat die meisten Studenten?

Jeder für sich, mit Zettel und Stift.

Lösung in Kapitel 5

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 29

Page 30: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Geschachtelte Anfrage (Forts.)

Unteranfrage in der select-KlauselFür jedes Ergebnistupel wird die Unteranfrage ausgeführtMan beachte, dass die Unteranfrage korreliert ist (greift auf

Attribute der umschließenden Anfrage zu)

select PersNr, Name, ( select sum (SWS) as Lehrbelastung from Vorlesungen

where gelesenVon=PersNr )from Professoren;

Page 31: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

ProfessorenPersN

rName Rang Rau

m

2125 Sokrates C4 226

2126 Russel C4 232

2127 Kopernikus

C3 310

2133 Popper C3 52

2134 Augustinus

C3 309

2136 Curie C4 36

2137 Kant C4 7

Studenten

MatrNr

Name Semester

24002 Xenokrates 18

25403 Jonas 12

26120 Fichte 10

26830 Aristoxenos 8

27550 Schopenhauer

6

28106 Carnap 3

29120 Theophrastos

2

29555 Feuerbach 2

VorlesungenVorlNr Titel SWSgelesen

Von

5001 Grundzüge 4 2137

5041 Ethik 4 2125

5043 Erkenntnistheorie 3 2126

5049 Mäeutik 2 2125

4052 Logik 4 2125

5052 Wissenschaftstheorie

3 2126

5216 Bioethik 2 2126

5259 Der Wiener Kreis 2 2133

5022 Glaube und Wissen

2 2134

4630 Die 3 Kritiken 4 2137

voraussetzenVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hörenMatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

28106 5259

29120 5001

29120 5041

29120 5049

29555 5022

25403 5022

AssistentenPerslN

rName Fachgebiet Boss

3002 Platon Ideenlehre 2125

3003 Aristoteles Syllogistik 2125

3004 Wittgenstein

Sprachtheorie 2126

3005 Rhetikus Planetenbewegung 2127

3006 Newton Keplersche Gesetze 2127

3007 Spinoza Gott und Natur 2126

prüfenMatrN

rVorlNr PersN

rNote

28106 5001 2126 1

25403 5041 2125 2

27550 4630 2137 2

Page 32: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Unkorrelierte versus korrelierte Unteranfragen

korrelierte Formulierungselect s.*from Studenten swhere exists

(select p.*from Professorenwhere p.GebDatum > s.GebDatum);

Page 33: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Äquivalente unkorrelierte Formulierung

select s.*

from Studenten s

where s.GebDatum <

(select max (p.GebDatum)

from Professoren p);

Vorteil: Unteranfrageergebnis kann materialisiert werden

Unteranfrage braucht nur einmal ausgewertet zu werden

Page 34: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Entschachtelung korrelierter Unteranfragen -- Forts.

select a.*from Assistenten awhere exists

( select p.* from Professoren p where a.Boss = p.PersNr and

p.GebDatum>a.GebDatum);

Entschachtelung durch Join

select a.*from Assistenten a, Professoren pwhere a.Boss=p.PersNr and p.GebDatum > a.GebDatum;

Page 35: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Verwertung der Ergebnismenge einer Unteranfrage

select tmp.MatrNr, tmp.Name, tmp.VorlAnzahl

from (select s.MatrNr, s.Name, count(*) as VorlAnzahl

from Studenten s, hören h

where s.MatrNr=h.MatrNr

group by s.MatrNr, s.Name) tmp

where tmp.VorlAnzahl > 2;

MatrNr Name VorlAnzahl

28106 Carnap 4

29120 Theophrastos 3

Page 36: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Decision-Support-Anfragen mit geschachtelten Unteranfragen

select h.VorlNr, h.AnzProVorl, g.GesamtAnz,

h.AnzProVorl/g.GesamtAnz as Marktanteil

from ( select VorlNr, count(*) as AnzProVorl

from hören

group by VorlNr ) h,

( select count (*) as GesamtAnz

from Studenten) g;

Page 37: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

VorlNr AnzProVorl GesamtAnz

Marktanteil

4052 1 8 .125

5001 4 8 .5

5022 2 8 .25

... ... ... ...

Das Ergebnis der Anfrage

Page 38: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 38

Anfrage:

Wer hat alle vierstündigen Vorlesungen gehört?

Problem: ist in SQL nicht vorgesehen, nur exists

Idee: Elimination von und Dazu sind folgende Äquivalenzen anzuwenden:

Simulation allquantifizierter Suchprädikate

Page 39: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 39

Umformung der Logik (1/3)

Schritt 1: Elimination

Page 40: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 40

Umformung der Logik (2/3)

Schritt 2: Elimination

Page 41: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 41

Umformung der Logik (3/3)

Schritt 3: Transformation ergibt schließlich:

Page 42: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 42

SELECT s.MatrNr

FROM Studenten s

WHERE NOT EXISTS

(SELECT *

FROM Vorlesungen v

WHERE v.SWS = 4 AND NOT EXISTS

(SELECT *

FROM hören h

WHERE h.VorlNr = v.VorlNr AND h.MatrNr=s.MatrNr ) );

Umsetzung der Logik in SQL

Anfrage: Wer hat alle vierstündigen Vorlesungen gehört?

Page 43: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 43

SELECT s.MatrNr FROM Studenten s WHERE NOT EXISTS ( SELECT v.VorlNr FROM Vorlesungen v WHERE v.SWS = 4 MINUS SELECT h.VorlNr FROM hören h WHERE h.MatrNr = s.MatrNr ) ;

Simulation allquantifizierter Suchprädikate:alternative Form mit Mengenoperation

Anfrage: Wer hat alle vierstündigen Vorlesungen gehört?

Zwischenanfrage:Alle Vorlesungen, die 4 SWS habenMINUSAlle Vorlesungen, die der Student s gehört hat

Page 44: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Allquantifizierung durch count-Aggregation

Allquantifizierung kann immer auch durch eine count-Aggregation ausgedrückt werden

Wir betrachten dazu eine etwas einfachere Anfrage, in der wir die MatrNr der Studenten ermitteln wollen, die alle Vorlesungen hören:

select h.MatrNr

from hören h

group by h.MatrNr

having count (*) = (select count (*) from Vorlesungen);

Page 45: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

HerausforderungWie formuliert man die komplexere Anfrage: „Wer hat alle vierstündigen Vorlesungen gehört“ohne Korrelation nur mit ZählenGrundidee besteht darin, vorher durch einen Join die Studenten/Vorlesungs-Paare einzuschränken und danach das Zählen durchzuführen

Jeder für sich mit Zettel und Stift; 5 min

Page 46: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 46

Simulation allquantifizierter Suchprädikatedurch count-Aggregation

SELECT h.MatrNr

FROM hören h, Vorlesungen v

WHERE v.SWS = 4 AND h.VorlNr = v.VorlNr

GROUP BY h.MatrNr

HAVING count (*) = (SELECT count (*)

FROM Vorlesungen v1

WHERE v1.SWS = 4);

Anfrage: Wer hat alle vierstündigen Vorlesungen gehört?

Page 47: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 47

Count-Aggregation: Fehlerquellen

SELECT h.MatrNr, s.Name

FROM hören h, Vorlesungen v, Studenten s

WHERE

v.SWS = 4 AND h.VorlNr = v.VorlNr AND h.MatrNr = s.MatrNr

GROUP BY h.MatrNr

HAVING count (*) = (SELECT count (*)

FROM Vorlesungen v1

WHERE v1.SWS = 4);

Anfrage: Namen der Studenten, die alle vierstündigen Vorlesungen gehört haben

Vorsicht: so geht das nicht..

Page 48: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 48

Count-Aggregation: Fehlerquellen

SELECT h.MatrNr, s.Name

FROM hören h, Vorlesungen v, Studenten s

WHERE

v.SWS = 4 AND h.VorlNr = v.VorlNr AND h.MatrNr = s.MatrNr

GROUP BY h.MatrNr, s.Name

HAVING count (*) = ( SELECT count (*)

FROM Vorlesungen v1

WHERE v1.SWS = 4);

SQL erzeugt pro Gruppe ein Ergebnistupel. Deshalb müssen alle in derSELECT-Klausel aufgeführten Attribute - außer den aggregierten – auch in der GROUP BY-Klausel aufgeführt werden!

Anfrage:Namen der Studenten, die alle vierstündigen Vorlesungen gehört haben

Page 49: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 49

Allquantifizierung - Fazit

Es geht zwar nicht direkt, aber indirekt

Man kann per deMorgan den Ausdruck auf exists zurückführenMan kann per Mengenoperation minus die Fälle eliminieren, in denen es nicht übereinstimmtMan kann zählen, ob alle Fälle betrachtet sind und dies dann mit der Gesamtmenge der Fälle vergleichen

Für die Prüfung reicht eine Methode

Page 50: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Nullwerteunbekannter Wert (wird vielleicht später nachgereicht)Nullwerte können auch im Zuge der Anfrageauswertung

entstehen (Bsp. äußere Joins)manchmal sehr überraschende Anfrageergebnisse:

select count (*) from Studentenwhere Semester < 13 or Semester > =13

Wenn es Studenten gibt, deren Semester-Attribut den Wert null hat, werden diese nicht mitgezähltDer Grund liegt in folgenden Regeln für den Umgang mit null-Werten begründet:

Page 51: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Auswertung bei Null-Werten

1. In arithmetischen Ausdrücken werden Nullwerte propagiert, d.h. sobald ein Operand null ist, wird auch das Ergebnis null. Dementsprechend wird z.B. null + 1 zu null ausgewertet-aber auch null * 0 wird zu null ausgewertet.

2. SQL hat eine dreiwertige Logik, die nicht nur true und false kennt, sondern auch einen dritten Wert unknown. Diesen Wert liefern Vergleichsoperationen zurück, wenn mindestens eines ihrer Argumente null ist. Beispielsweise wertet SQL das Prädikat (PersNr=...) immer zu unknown aus, wenn die PersNr des betreffenden Tupels den Wert null hat.

3. Logische Ausdrücke werden nach den folgenden Tabellen berechnet:

Page 52: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

not

true falseunknown

unknown

false true

and true unknown falsetrue true unknown falseunknown unknown unknown falsefalse false false false

or true unknown falsetrue true true trueunknown true unknown unknow

nfalse true unknown false

Page 53: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Diese Berechnungsvorschriften sind recht intuitiv. Unknown or true wird z.B. zu true - die Disjunktion ist mit dem true-Wert des rechten Arguments immer erfüllt, unabhängig von der Belegung des linken Arguments. Analog ist unknown and false automatisch false - keine Belegung des linken Arguments könnte die Konjunktion mehr erfüllen.

4. In einer where-Bedingung werden nur Tupel weitergereicht, für die die Bedingung true ist. Insbesondere werden Tupel, für die die Bedingung zu unknown auswertet, nicht ins Ergebnis aufgenommen.

5. Bei einer Gruppierung wird null als ein eigenständiger Wert aufgefasst und in eine eigene Gruppe eingeordnet.

Note count(*)

1.0 25

1.3 94

… …

null 248

Page 54: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 54

Test auf Nullwert

Anfrage:bisher unbenotete Prüfungsleistungen

SELECT * FROM prüfen WHERE Note IS NULL

Anfrage:Professoren mit eigenem Büro

SELECT * FROM Professoren WHERE Raum IS NOT NULL

Page 55: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Spezielle Sprachkonstrukte ("syntactic sugar")

select *

from Studenten

where Semester > = 1 and Semester < = 6;

select *

from Studenten

where Semester between 1 and 6;

select *

from Studenten

where Semester in (2,4,6);

Page 56: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Das case-Konstrukt

Die erste qualifizierende when-Klausel wird ausgeführt

select MatrNr, ( case when Note >= 5.5 then ´sehr gut´

when Note >= 5.0 then ´gut´

when Note >= 4.5 then ´befriedigend´

when Note >= 4.0 then ´ausreichend´

else ´nicht bestanden´end)

from prüfen;

Page 57: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Vergleiche mit likePlatzhalter "%" ; "_" bei Vergleichen mit like"%" steht für beliebig viele (auch gar kein) Zeichen"_" steht für genau ein ZeichenVorsicht: Bei Vergleichen mit = werden Platzhalter als

normale Zeichen interpretiert!

select *

from Studenten

where Name like ´T%eophrastos´;

select distinct Name

from Vorlesungen v, hören h, Studenten s

where s.MatrNr = h.MatrNr and h.VorlNr = v.VorlNr and v.Titel like ´%thik%´;

Page 58: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Behandlung spezieller Datentypen

• Zu Strings gibt es meist eine Reihe Zusatzfunktionen in den Datenbanken

• Zu erwarten ist einfache Stringmanipulation: Konkatenation, Suchen, Ersetzen; oft reguläre Ausdrücke und zunehmend Anwendungen aus NLP und Suchmaschinentechnologie, wie Synonyme, Ranking, Topic Analysis, …

• Die sind aber bislang noch nicht vereinheitlicht und werden daher hier nicht behandelt

• Weiterhin gibt es oft Methoden um komplexe Datentypen, wie Zeit, Ort, Bilder, Musik, etc. zu verarbeiten

• Das ist aber auch nicht standardisiert, wird hier also nicht behandelt

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 58

Page 59: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 59

Oracle: Syntaxdiagramme

Page 60: Dr. Brigitte Mathiak Kapitel 2 SQL Anfragen. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen2 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL

Fazit

Sie können nun SQL-Anfragen

Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen 60