44
Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML

Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Embed Size (px)

Citation preview

Page 1: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Dr. Brigitte Mathiak

Kapitel 5

SQL DDL + DML

Page 2: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 2

Lernziele

Fähigkeit zur praktischen Anwendung von SQL-Anweisungen in den Bereichen: Schema-Definitionen einschl. referentieller Integrität Einfügen von Daten Ändern von Daten Löschen von Daten

Varianten von SQL kennen lernen

Page 3: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 3

SQL: Komponenten der vollständigen DB-Sprache

Datenmanipulation (Data Manipulation Language DML) Einfügen, Löschen und Ändern von individuellen Tupeln

und von Mengen von Tupeln Zuweisung von ganzen Relationen

Datendefinition (Data Definition Language DDL) Definition von Wertebereichen, Attributen und Relationen Definition von verschiedenen Sichten auf Relationen

Datenkontrolle Spezifikation von Bedingungen zur Zugriffskontrolle Spezifikation von Zusicherungen (assertions) zur semantischen

Integritätskontrolle

Datenabfragen Abbildung von Eingaberelationen durch Auswertung von Bedingungen

auf die Ergebnisrelation

Kopplung mit einer Wirtssprache (z.B. C++) deskriptive Auswahl von Mengen von Tupeln sukzessive Bereitstellung einzelner Tupeln

Das war Kapitel 2

In diesem Kapitel

In diesem Kapitel

Page 4: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 4

Beispiel: Universitätsschema

hörenStudenten Vorlesungen

* *MatrNrName

Semester

VorlNrTitelSWS

Professoren

*

*

PersNrNameRangRaum

voraussetzen

lesen

*

11

*

PrüfenNote

Assistenten

PersNrName

Fachgebiet

arbeitenFür*1

Page 5: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 5

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

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

Vorlesungen

VorlNr Titel SWS gelesenVon

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

voraussetzen

Vorgänger Nachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

hören

MatrNr VorlNr

26120 5001

27550 5001

27550 4052

28106 5041

28106 5052

28106 5216

29120 5001

29120 5041

29120 5049

25403 5022

Assistenten

PerslNr Name 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üfen

MatrNr VorlNr PersNr Note

28106 5001 2126 1

25403 5041 2125 2

Page 6: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 6

Relationale Invarianten

Integritätsbedingungen des Relationenmodells

Primärschlüsselbedingung (Entity-Integrität)- Eindeutigkeit des Primärschlüssels- keine Nullwerte!

Referentielle Integrität: - Darstellung von Beziehungen durch Fremdschlüssel (foreign key):

Attribut, das in Bezug auf den Primärschlüssel einer anderen (oder derselben) Relation definiert ist

- zugehöriger Primärschlüssel muss existieren, d.h. zu jedem Wert (ungleich Null) eines Fremdschlüsselattributs einer Relation R2muss ein gleicher Wert des Primärschlüssels in irgendeinem Tupel von Relation R1 vorhanden sein

Page 7: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 7

Relationale Invarianten (1)

Fremdschlüssel und zugehöriger Primärschlüssel tragen wichtige interrelationale Informationen sie sind auf dem gleichen Wertebereich definiert sie gestatten die Verknüpfung von Relationen mit Hilfe von

Relationenoperationen

Fremdschlüssel können Nullwerte aufweisen, wenn sie nicht Teil

eines Primärschlüssels sind. ein Fremdschlüssel ist „zusammengesetzt“, wenn der zugehörige

Primärschlüssel „zusammengesetzt“ ist

Eine Relation kann mehrere Fremdschlüssel besitzen, die die gleiche oder verschiedene Relationen referenzieren

Zyklen sind möglich (geschlossener referentieller Pfad)Eine Relation kann zugleich referenzierende und referenzierte

Relation sein („self-referencing table“).

Page 8: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 8

SQL: DDL Anweisungen

DDL-Spezifikation in SQL bei CREATE TABLE:

CREATE TABLE Assistenten(PersNr INT PRIMARY KEY, Name VARCHAR2 (100) NOT NULL, Fachgebiet VARCHAR2(100), Boss INT REFERENCES Professoren(PersNr));

Assistenten

PersNr Name 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

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

Page 9: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 9

(Einfache) Datendefinition in SQL

CREATE TABLE <tablename>( <columnname> <Datentyp> <Constraint>, <columnname2> …, …)

Wichtige Datentypen in Oracle: varchar2 (n) für Strings variabler LängeNUMBER(p,s) für Zahlen mit der angegebenen GenauigkeitPLS_INTEGER für Integerwert (bessere Performanz)blob oder raw für sehr große binäre Datenclob für sehr große String-Attributedate für Datumsangabenxml für XML-Dokumente…

Page 10: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Constraints

Mehr zu Constraints im Kapitel Integritätsbedingungen hier nur kurz die wichtigsten:

• PRIMARY KEY für den Primärschlüssel

• REFERENCES rel(col) für einen Fremdschlüssel, der auf die Relation rel und die Spalte col zeigt

• UNIQUE wenn es keine Duplikate in der Spalte geben darf (PRIMARY KEY ist automatisch UNIQUE)

• NOT NULL wenn Nullwerte nicht zugelassen sind

Datenbanken, WS 12/13 Kapitel 5: SQL2 10

Page 11: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Schemaänderungen

ALTER TABLE <table_name> RENAME TO <new_table_name>;

Beispiel:ALTER TABLE suppliers

 RENAME TO vendors;

Statt RENAME TO gibt es auch eine Reihe anderer Änderungsmöglichkeiten z.B.

• ADD <column> <Datentyp> <Constraint>• MODIFY <column> <neuer_Datentyp> <neues_Constraint>• DROP <column>• RENAME COLUMN <column> TO <neuer_Name>

Datenbanken, WS 12/13 Kapitel 5: SQL2 11

Page 12: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 12

Veränderung am Datenbestand

Einfügen von Tupeln:

insert into Studenten (MatrNr, Name)values (28121, 'Archimedes');

insert into hören

select MatrNr, VorlNr

from Studenten, Vorlesungen

where Titel= 'Logik' ;

StudentenMatrNr Name Semester

29120 Theophrastos 229555 Feuerbach 228121 Archimedes -

Null-Wert

Page 13: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 13

Veränderungen am Datenbestand

Löschen von Tupeln

delete Studenten

where Semester > 13;

Verändern von Tupeln

update Studenten

set Semester = Semester + 1;

Page 14: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 14

CREATE TABLE Assistenten(PersNr INT PRIMARY KEY, Name VARCHAR2 (100) NOT NULL, Fachgebiet VARCHAR2(100), Boss INT REFERENCES Professoren(PersNr));

Aufgabe: Denken Sie sich eine Insert, eine Delete und eine Update Anweisung aus, die vom System abgelehnt werden. (Jeder für sich mit Zettel und Stift; 5 min)Zusatzaufgabe: Denken Sie sich ein Alter Table aus, dass vom System abgelehnt wird

Assistenten

PersNr Name 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

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

Page 15: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Bootstrapping

CREATE TABLE Sekretärin(PersNr INT PRIMARY KEY, …Boss INT REFERENCES Professor(PersNr));

CREATE TABLE Professor(PersNr INT PRIMARY KEY, …Sekräterin INT REFERENCES Sekretärin(PersNr));

Was geht da schief?

Welche Tabelle lege ich zuerst an?

Welche Daten füge ich zuerst ein?

Datenbanken, WS 12/13 Kapitel 5: SQL2 15

Page 16: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Bootstrapping (Lösungen)

•ALTER TABLE MODIFY COLUMN Boss INT REFERENCES Professor(PersNr);

•Bei der Datenmodellierung darauf achten, solche zyklischen Abhängigkeiten zu vermeiden

•Transaktionen (s. spätere Kapitel)Es werden mehrere Operationen gleichzeitig ausgeführt

•Insert into Sekretärin values (4, …, Null);Insert into Professor values (7, …, 4);Update Sekretärin Set Boss = 7 Where PersNr = 4 ;

Datenbanken, WS 12/13 Kapitel 5: SQL2 16

Page 17: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Varianten von SQL

Nicht alle Versionen von SQL sind identisch

Neben syntaktischen Varianten sind insbesondere die verschiedenen Join Operatoren und Lösungen für das Rekursionsproblem relevant.

Achtung:

Benutzen Sie in der Klausur ausschließlich Standardsyntax !!!

Datenbanken, WS 12/13 Kapitel 5: SQL2 17

Page 18: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Joins in SQL-92cross join: Kreuzproduktselect *

from R1, R2;

natural join: natürlicher JoinJoin oder inner join: Theta-Joinleft, right oder full outer join: äußerer Joinunion join: Vereinigungs-Join (wird hier nicht vorgestellt)

Page 19: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 19

Inner Join

Anfrage:welcher Professor bietet welche Vorlesungen an?

SELECT p.Name, v.NameFROM Professoren p JOIN Vorlesungen v ON p.PersNr = v.gelesenVon ;

SELECT p.Name, v.NameFROM Professoren p, Vorlesungen vWHERE p.PersNr = v.gelesenVon ;

Page 20: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 20

Natural Join

Anfrage: Welcher Student hört welche Vorlesung?

SELECT Studenten.Name, Vorlesungen.NameFROM Studenten NATURAL JOIN hören NATURAL JOIN Vorlesungen ;

SELECT s.Name, v.NameFROM Studenten s, hören h, Vorlesungen vWHERE s.MatrNr = h.MatrNr AND h.VorlNr = v.vorlNr ;

Page 21: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 21

Cross Join

Anfrage: alle Paare "Professor – Student" :

SELECT Professoren.Name, Studenten.NameFROM Professoren CROSS JOIN Studenten ;

SELECT p.Name, s.NameFROM Professoren p, Studenten s ;

Page 22: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 22

Outer Joins: Left Outer Join

SELECT p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Name

FROM Professoren p LEFT OUTER JOIN ( prüfen f LEFT OUTER JOIN Studenten s

ON f.MatrNr = s.MatrNr ) ON p.PersNr = f.PersNr ;

p.PersNr p.Name f.PersN

rf.Not

ef.MatrN

rs.Matr

Nr s.Name

2126 Russel 2126 1 28106 28106 Carnap

2125 Sokrates 2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopenhauer

2136 Curie Ø Ø Ø Ø Ø

… … … … … … …

Page 23: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 23

Outer Joins: Right Outer Join

SELECT p.PersNr, p.Name, f.PersNr, f.Note,

f.MatrNr, s.MatrNr, s.Name

FROM Professoren p RIGHT OUTER JOIN

(prüfen f RIGHT OUTER JOIN

Studenten s ON f.MatrNr = p.MatrNr)

ON p.PersNr = f.PersNr ;

p.PersNr p.Name f.PersNr f.Note f.MatrN

r s.MatrNr s.Name

2126 Russel 2126 1 28106 28106 Carnap

2125 Sokrates 2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopenhauer

Ø Ø Ø Ø Ø 26120 Fichte

… … … … … … …

Page 24: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 24

p.PersNr p.Name f.PersNr f.Note f.MatrNr s.MatrNr s.Name

2126 Russel 2126 1 28106 28106 Carnap

2125 Sokrates 2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopenhauer

Ø Ø Ø Ø Ø 26120 Fichte

… … … … … … …

2136 Curie Ø Ø Ø Ø Ø… … … … … … …

SELECT p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Name

FROM Professoren p FULL OUTER JOIN

(prüfen f FULL OUTER JOIN Studenten s

ON f.MatrNr = s.MatrNr)

ON p.PersNr = f.PersNr ;

Outer Joins: Full Outer Join

Page 25: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 25

Outer Joins: Oracle-Syntax

SELECT * FROM Studenten LEFT OUTER JOIN hörenUSING (MatrNr)

SELECT * FROM Studenten s, hören h WHERE s.MatrNr = h.MatrNr (+)

Anfrage: welche Studenten hören welche Vorlesungen

Page 26: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Äußere Joinsselect p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Namefrom Professoren p left outer join

(prüfen f left outer join Studenten s on f.MatrNr= s.MatrNr)

on p.PersNr=f.PersNr;

PersNrp.Name f.PersNr f.Note f.MatrNr s.MatrNr

s.Name

2126 Russel 2126 1 28106 28106 Carnap2125 Sokrate

s2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopen-hauer

2136 Curie - - - - -

Page 27: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Äußere Joins

select p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Namefrom Professoren p right outer join

(prüfen f right outer join Studenten s on f.MatrNr= s.MatrNr) on p.PersNr=f.PersNr;PersNrp.Name f.PersNr f.Note f.MatrNr s.MatrN

rs.Name

2126 Russel 2126 1 28106 28106 Carnap2125 Sokrate

s2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopen-hauer

- - - - - 26120 Fichte

Page 28: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Äußere Joins

select p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Namefrom Professoren p full outer join

(prüfen f full outer join Studenten s on f.MatrNr= s.MatrNr)on p.PersNr=f.PersNr;

Page 29: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

p.PersNr

p.Name f.PersNr f.Note f.MatrNr s.MatrNr

s.Name

2126 Russel 2126 1 28106 28106 Carnap2125 Sokrate

s2125 2 25403 25403 Jonas

2137 Kant 2137 2 27550 27550 Schopen-hauer

- - - - - 26120 Fichte

2136 Curie - - - - -

Page 30: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Rekursion

select Vorgänger

from voraussetzen, Vorlesungen

where Nachfolger= VorlNr and

Titel= `Der Wiener Kreis´

Page 31: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Der Wiener Kreis

Wissenschaftstheorie

Bioethik

Erkenntnistheorie Ethik Mäeutik

Grundzüge

Page 32: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Rekursion

select v1.Vorgänger

from voraussetzen v1, voraussetzen v2, Vorlesungen v

where v1.Nachfolger= v2.Vorgänger and

v2.Nachfolger= v.VorlNr and

v.Titel=`Der Wiener Kreis´

Page 33: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

select v1.Vorgängerfrom voraussetzen v1

voraussetzen vn_minus_1voraussetzen vn,

Vorlesungen v

where v1.Nachfolger= v2.Vorgänger and

vn_minus_1.Nachfolger= vn.Vorgänger and

vn.Nachfolger = v.VorlNr and

v.Titel= `Der Wiener Kreis´

Vorgänger des „Wiener Kreises“ der Tiefe n

Wollen wir das wirklich?

Page 34: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Grundproblem: Transitive Hülle

transA,B(R)= {(a,b) k IN (1, ..., k R (

1.A= 2.B

k-1.A= k.B

1.A= a

k.B= b))}

Page 35: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Der Wiener Kreis

Wissenschaftstheorie

Bioethik

Erkenntnistheorie Ethik Mäeutik

Grundzüge

Page 36: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Die connect by-Klausel (Oracle)

select Titel

from Vorlesungen

where VorlNr in (select Vorgänger

fromvoraussetzen

connect by Nachfolger= prior Vorgänger

start with Nachfolger= (select VorlNr

from Vorlesungen

where Titel= `Der

Wiener Kreis´));

GrundzügeEthik

ErkenntnistheorieWissenschaftstheorie

Page 37: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Rekursion in DB2/SQL99: gleiche Anfrage

with TransVorl (Vorg, Nachf)

as (select Vorgänger, Nachfolger from voraussetzen

union all

select t.Vorg, v.Nachfolger

from TransVorl t, voraussetzen v

where t.Nachf= v.Vorgänger)

select Titel from Vorlesungen where VorlNr in

(select Vorg from TransVorl where Nachf in

(select VorlNr from Vorlesungen

where Titel= `Der Wiener Kreis´) )

Page 38: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

zuerst wird eine temporäre Sicht TransVorl mit der with-Klausel angelegt

Diese Sicht TransVorl ist rekursiv definiert, da sie selbst in der Definition vorkommt

Aus dieser Sicht werden dann die gewünschten Tupel extrahiert

Ergebnis ist natürlich wie gehabt

Page 39: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 39

Fazit Rekursion/transitive Hülle

In SQL nur mühsam lösbar

Vorhandene Lösungen sind technologieabhängig

Die praktisch beste Lösung ist fast immer das Ändern der Datenstruktur oder das Anlegen von Hilfstabellen

voraussetzen_recVorgänge

rNachfolger

5001 5041

5001 5043

5001 5049

5041 5216

5043 5052

5041 5052

5052 5259

5001 5216

5001 5052

5001 5043

5001 5052

5043 5259

5041 5259

Achtung!Solche Datenstrukturensind oft schwer aktuell zu halten -> Datenintegrität

Page 40: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, SS 12 Kapitel 2: SQL Anfragen 40

Syntaktische Beschreibung einer Select Anweisung

"Grobsyntax":

select_block { { UNION | INTERSECT | EXCEPT } [ALL] select_block ...} [ORDER BY result_column [ASC | DESC] {, result_column [ASC | DESC] …}

mit select_block ::=

SELECT [ALL | DISTINCT] {column | {expression [AS result_column]}} {, {column | {expression [AS result_column]}} …}FROM table [correlation_var] {, table [correlation_var] …}[WHERE search_condition][GROUP BY column {, column …} [HAVING search_condition] ]

Page 41: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Typische Select-Pattern

Paare von gleichartigen Objekten (z.B. Welche Paare von Studenten haben …?)SELECT a1.name, a2.name FROM a a1, a a2 WHERE a1.ID < a2.ID AND ….

Aggregation (z.B. Wer hört wie viele Vorlesungen?)SELECT a.name, aggr(b.ID) FROM a,b WHERE a.ID=b.Fkey GROUP BY a.name

Choosing group (z.B. Wer hört mehr als zwei Vorlesungen?)SELECT a.name FROM a,b WHERE a.ID=b.Fkey GROUP BY a.name HAVING …

Datenbanken, WS 12/13 Kapitel 5: SQL2 41

Verhindert, dass Paare zweimal vorkommen

Page 42: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Doppelte Aggregation

Double aggregation (z.B. Wie viele Vorlesungen hören Studenten im Durchschnitt?)Warum doppelt?Ich muss erst die Vorlesungen zählen und dann den Durchschnitt bestimmen.Einfachste Variante:

SELECT aggr1(aggr2(b.ID)) FROM a,b WHERE a.ID=b.Fkey GROUP BY a.ID

System unabhängig: SELECT aggr1(t.temp) FROM(SELECT aggr2 AS temp FROM a,b WHERE a.ID=b.Fkey GROUP BY a.ID) t

Datenbanken, WS 12/13 Kapitel 5: SQL2 42

Leider nicht durch den Standard vorgesehen!!!

Page 43: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Choice-by-aggregate

(z.B. Welche Vorlesungen haben die meisten SWS?)SELECT a.name, x FROM a WHERE x = (

SELECT aggr(x) FROM a)

Allerdings müssen beide a exakt identisch sein (inkl. WHERE, GROUP BY und HAVING Klauseln), sonst kann es zu einem Mismatch kommen. Bei komplexen a kann es sich daher lohnen eine View anzulegen (Kap. 8)

Datenbanken, WS 12/13 Kapitel 5: SQL2 43

Page 44: Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML. Datenbanken, WS 12/13 Kapitel 5: SQL22 Lernziele Fähigkeit zur praktischen Anwendung von SQL-Anweisungen

Datenbanken, WS 12/13 Kapitel 5: SQL2 44

Constraints and Views...

..to be continued.