Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

1 Dr. Brigitte Mathiak Kapitel 5 SQL DDL + DML

2 Datenbanken, WS 12/13 Kapitel 5: SQL22 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

3 Datenbanken, WS 12/13 Kapitel 5: SQL23 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

4 Datenbanken, WS 12/13 Kapitel 5: SQL24 Beispiel: Universitätsschema hören StudentenVorlesungen ** MatrNr Name Semester VorlNr Titel SWS Professoren * * PersNr Name Rang Raum voraussetzen lesen * 11 * Prüfen Note Assistenten PersNr Name Fachgebiet arbeitenFür *1

5 Datenbanken, WS 12/13 Kapitel 5: SQL25 Professoren PersNrNameRangRaum 2125SokratesC4226 2126RusselC4232 2127KopernikusC3310 2133PopperC352 2134AugustinusC3309 2136CurieC436 2137KantC47 Studenten MatrNrNameSemester 24002Xenokrates18 25403Jonas12 26120Fichte10 26830Aristoxenos8 27550Schopenhaue r 6 28106Carnap3 29120Theophrastos2 29555Feuerbach2 Vorlesungen VorlNrTitelSWSgelesenV on 5001Grundzüge42137 5041Ethik42125 5043Erkenntnistheorie32126 5049Mäeutik22125 4052Logik42125 5052Wissenschaftstheori e 32126 5216Bioethik22126 5259Der Wiener Kreis22133 5022Glaube und Wissen22134 4630Die 3 Kritiken42137 voraussetzen VorgängerNachfolger 50015041 50015043 50015049 50415216 50435052 50415052 5259 hören MatrNrVorlNr 261205001 275505001 275504052 281065041 281065052 281065216 291205001 291205041 291205049 254035022 Assistenten PerslNrNameFachgebietBoss 3002PlatonIdeenlehre2125 3003AristotelesSyllogistik2125 3004WittgensteinSprachtheorie2126 3005RhetikusPlanetenbewegung2127 3006NewtonKeplersche Gesetze2127 3007SpinozaGott und Natur2126 prüfen MatrNrVorlNrPersNrNote 28106500121261 25403504121252

6 Datenbanken, WS 12/13 Kapitel 5: SQL26 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 R2 muss ein gleicher Wert des Primärschlüssels in irgendeinem Tupel von Relation R1 vorhanden sein

7 Datenbanken, WS 12/13 Kapitel 5: SQL27 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).

8 Datenbanken, WS 12/13 Kapitel 5: SQL28 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 PersNrNameFachgebietBoss 3002PlatonIdeenlehre2125 3003AristotelesSyllogistik2125 3004WittgensteinSprachtheorie2126 3005RhetikusPlanetenbewegung2127 3006NewtonKeplersche Gesetze2127 3007SpinozaGott und Natur2126 Professoren PersNrNameRangRaum 2125SokratesC4226 2126RusselC4232 2127KopernikusC3310 2133PopperC352 2134AugustinusC3309 2136CurieC436 2137KantC47

9 Datenbanken, WS 12/13 Kapitel 5: SQL29 (Einfache) Datendefinition in SQL CREATE TABLE (, …, … ) Wichtige Datentypen in Oracle: varchar2 (n) für Strings variabler Länge NUMBER(p,s) für Zahlen mit der angegebenen Genauigkeit PLS_INTEGER für Integerwert (bessere Performanz) blob oder raw für sehr große binäre Daten clob für sehr große String-Attribute date für Datumsangaben xml für XML-Dokumente …

10 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: SQL210

11 Schemaänderungen ALTER TABLE RENAME TO ; Beispiel: ALTER TABLE suppliers RENAME TO vendors; Statt RENAME TO gibt es auch eine Reihe anderer Änderungsmöglichkeiten z.B. ADD MODIFY DROP RENAME COLUMN TO Datenbanken, WS 12/13 Kapitel 5: SQL211

12 Datenbanken, WS 12/13 Kapitel 5: SQL212 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' ; Studenten MatrNrNameSemester 29120Theophrastos2 29555Feuerbach2 28121Archimedes- Null-Wert

13 Datenbanken, WS 12/13 Kapitel 5: SQL213 Veränderungen am Datenbestand Löschen von Tupeln delete Studenten where Semester > 13; Verändern von Tupeln update Studenten set Semester = Semester + 1;

14 Datenbanken, WS 12/13 Kapitel 5: SQL214 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 PersNrNameFachgebietBoss 3002PlatonIdeenlehre2125 3003AristotelesSyllogistik2125 3004WittgensteinSprachtheorie2126 3005RhetikusPlanetenbewegung2127 3006NewtonKeplersche Gesetze2127 3007SpinozaGott und Natur2126 Professoren PersNrNameRangRaum 2125SokratesC4226 2126RusselC4232 2127KopernikusC3310 2133PopperC352 2134AugustinusC3309 2136CurieC436 2137KantC47

15 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: SQL215

16 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: SQL216

17 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: SQL217

18 Joins in SQL-92 cross join: Kreuzprodukt select * from R1, R2; natural join: natürlicher Join Join oder inner join: Theta-Join left, right oder full outer join: äußerer Join union join: Vereinigungs-Join (wird hier nicht vorgestellt)

19 Datenbanken, SS 12 Kapitel 2: SQL Anfragen19 Inner Join Anfrage: welcher Professor bietet welche Vorlesungen an? SELECT p.Name, v.Name FROM Professoren p JOIN Vorlesungen v ON p.PersNr = v.gelesenVon ; SELECT p.Name, v.Name FROM Professoren p, Vorlesungen v WHERE p.PersNr = v.gelesenVon ;

20 Datenbanken, SS 12 Kapitel 2: SQL Anfragen20 Natural Join Anfrage: Welcher Student hört welche Vorlesung? SELECT Studenten.Name, Vorlesungen.Name FROM Studenten NATURAL JOIN hören NATURAL JOIN Vorlesungen ; SELECT s.Name, v.Name FROM Studenten s, hören h, Vorlesungen v WHERE s.MatrNr = h.MatrNr AND h.VorlNr = v.vorlNr ;

21 Datenbanken, SS 12 Kapitel 2: SQL Anfragen21 Cross Join Anfrage: alle Paare "Professor – Student" : SELECT Professoren.Name, Studenten.Name FROM Professoren CROSS JOIN Studenten ; SELECT p.Name, s.Name FROM Professoren p, Studenten s ;

22 Datenbanken, SS 12 Kapitel 2: SQL Anfragen22 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.PersN r p.Name f.PersN r f.Not e f.MatrN r s.Matr Nr s.Name 2126Russel2126128106 Carnap 2125 Sokrate s 2125225403 Jonas 2137Kant2137227550 Schopenhauer 2136CurieØØØØØ …………………

23 Datenbanken, SS 12 Kapitel 2: SQL Anfragen23 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.PersN r p.Namef.PersNrf.Note f.MatrN r s.MatrNrs.Name 2126Russel2126128106 Carnap 2125Sokrates2125225403 Jonas 2137Kant2137227550 Schopenhau er ØØØØØ 26120Fichte …………………

24 Datenbanken, SS 12 Kapitel 2: SQL Anfragen24 p.PersN r p.Namef.PersNrf.Notef.MatrNrs.MatrNrs.Name 2126Russel2126128106 Carnap 2125 Sokrate s 2125225403 Jonas 2137Kant2137227550 Schopenhauer ØØØØØ 26120Fichte ………………… 2136Curie ØØØØØ ………………… 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

25 Datenbanken, SS 12 Kapitel 2: SQL Anfragen25 Outer Joins: Oracle-Syntax SELECT * FROM Studenten LEFT OUTER JOIN hören USING (MatrNr) SELECT * FROM Studenten s, hören h WHERE s.MatrNr = h.MatrNr (+) Anfrage: welche Studenten hören welche Vorlesungen

26 Äußere Joins 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; PersNrp.Namef.PersNrf.Notef.MatrNrs.MatrNrs.Name 2126Russel2126128106 Carnap 2125Sokrates2125225403 Jonas 2137Kant2137227550 Schopen- hauer 2136Curie-----

27 Äußere Joins 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= s.MatrNr) on p.PersNr=f.PersNr; PersNrp.Namef.PersNrf.Notef.MatrNrs.MatrNrs.Name 2126Russel2126128106 Carnap 2125Sokrates2125225403 Jonas 2137Kant2137227550 Schopen- hauer -----26120Fichte

28 Äußere Joins 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;

29 p.PersNrp.Namef.PersNrf.Notef.MatrNrs.MatrNrs.Name 2126Russel2126128106 Carnap 2125Sokrates2125225403 Jonas 2137Kant2137227550 Schopen- hauer -----26120Fichte 2136Curie-----

30 Rekursion select Vorgänger from voraussetzen, Vorlesungen where Nachfolger= VorlNr and Titel= `Der Wiener Kreis´

31 Der Wiener Kreis WissenschaftstheorieBioethik ErkenntnistheorieEthikMäeutik Grundzüge

32 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´

33 select v1.Vorgänger from voraussetzen v1 voraussetzen vn_minus_1 voraussetzen 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?

34 Grundproblem: Transitive Hülle trans A,B (R)= {(a,b) k IN ( 1,..., k R ( 1.A= 2.B k-1.A= k.B 1.A= a k.B= b))}

35 Der Wiener Kreis WissenschaftstheorieBioethik ErkenntnistheorieEthikMäeutik Grundzüge

36 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üge Ethik Erkenntnistheorie Wissenschaftstheorie

37 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´) )

38 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

39 Datenbanken, SS 12 Kapitel 2: SQL Anfragen39 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_rec VorgängerNachfolger 50015041 50015043 50015049 50415216 50435052 50415052 5259 50015216 50015052 50015043 50015052 50435259 50415259 Achtung! Solche Datenstrukturen sind oft schwer aktuell zu halten -> Datenintegrität

40 Datenbanken, SS 12 Kapitel 2: SQL Anfragen40 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] ]

41 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: SQL241 Verhindert, dass Paare zweimal vorkommen

42 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: SQL242 Leider nicht durch den Standard vorgesehen!!!

43 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: SQL243

44 Datenbanken, WS 12/13 Kapitel 5: SQL244 Constraints and Views.....to be continued.


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

Ähnliche Präsentationen


Google-Anzeigen