Kapitel 2 SQL Anfragen.

Slides:



Advertisements
Ähnliche Präsentationen
Deduktive Datenbanken
Advertisements

Objekt-relationale und erweiterbare Datenbanksysteme
Grundlagen des relationalen Modells
Deduktive Datenbanken
XML-Datenmodellierung und Web-Services
Das Relationale Modell
Grundlagen des relationalen Datenmodells
XML: Extensible Markup Language
Bauinformatik II Softwareanwendungen 1
SQL standardisierte Datendefinitions (DDL)- Datenmanipulations (DML)-
XML-Datenmodellierung und Web-Services XML Datenmodell Schemabeschreibungssprachen Anfragesprachen: XPath und XQuery Web-Services Überblick WSDL UDDI SOAP.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Datenbanksysteme Schwerpunkte: Datenbanksystem (DBS): Datenbank (DB):
Kapitel 5 SQL DDL + DML.
Kapitel 2 SQL Anfragen.
Kapitel 5 SQL DDL + DML.
Objekt-relationale und erweiterbare Datenbanksysteme
Alternativen und Muster. Alternativen Gegeben ist eine Tabelle in der ein Attribut der Tabelle Buecher Gruppe genannt wurde. So gibt es unter anderem.
SQL als Abfragesprache
Übung Datenbanksysteme SQL-Anfragen (2)
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
Information Systems & Semantic Web University of Koblenz Landau, Germany Vorlesung Multimedia-Datenbanken Objekt-relationale Datenbanksysteme (Folien nach.
Kapitel 4 SQL: Grundlagen.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
Kapitel 11: Relationale Entwurfstheorie
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Information Systems & Semantic Web University of Koblenz Landau, Germany Vorlesung Multimedia-Datenbanken Objekt-relationale Datenbanksysteme (Folien nach.
Datenbankentwicklung IV-LK
Historische Entwicklung relationaler DBMS
Standardisierte -Datendefinitions (DDL)- -Datenmanipulations (DML)- -Anfrage (Query)-Sprache derzeit aktueller Standard ist SQL 99 und SQL3 (2003) objektrelationale.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein
Standardisierte -Datendefinitions (DDL)- -Datenmanipulations (DML)- -Anfrage (Query)-Sprache derzeit aktueller Standard ist SQL 99 und SQL3 (2003) objektrelationale.
Historische Entwicklung relationaler DBMS
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Befehle in SQL Erläuterungen.
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
Relationale Datenbanken I
Verdichten von Daten mit Gruppenfunktionen
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Vorlesung #5 SQL (Teil 2).
RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
Vorlesung Datenbanksysteme vom Anfragebearbeitung  Logische Optimierung.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken abfragen mit SQL
 standardisierte -Datendefinitionssprache (DDL) -Datenmanipulationssprache (DML) -Anfragesprache (Query)  derzeit aktueller Standard ist SQL 3  objektrelationale.
Technische Universität München Übung zur Einführung in die Informatik für Hörer anderer Fachrichtungen im Sommersemester 2010 Sitzung 8: Die relationale.
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Vorlesung #7 SQL (Teil 4).
(Structured Query Language)
 Präsentation transkript:

Kapitel 2 SQL Anfragen

 Lernziele Syntax von SQL Anfragen Präzise Semantik von SQL Anfragen: Abbildung auf Relationale Algebra Erweiterte Konstrukte in SQL Abfragen: Aggregation, Gruppierung, rekursive Anfragen .. Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Einfache SQL-Anfragen select *: Wählt alles aus select * from Professoren; PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 7 from wählt die Tabelle

Einfache SQL-Anfragen Bei select können auch bestimmte Spalten gewählt werden select PersNr, Name from Professoren where Rang= ´C4´; PersNr Name 2125 Sokrates 2126 Russel 2136 Curie 2137 Kant Bei where können logische Einschränkungen gemacht werden

Einfache SQL-Anfragen Mit order by kann die Reihenfolge der Anzeige verändert werden Sortierung select PersNr, Name, Rang from Professoren order by Rang desc, Name asc; PersNr Name Rang 2136 Curie C4 2137 Kant 2126 Russel 2125 Sokrates 2134 Augustinus C3 2127 Kopernikus 2133 Popper Was zuerst steht, danach wird zuerst sortiert desc ist für absteigende Ordnung, asc für aufsteigende

Duplikateliminierung Mit distinct werden Duplikate herausgenommen select distinct Rang from Professoren Rang C3 C4

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Anfragen über mehrere Relationen Welcher Professor liest "Mäeutik"? select Name, Titel from Professoren, Vorlesungen where PersNr = gelesenVon and Titel = `Mäeutik‘ ; Hinter from werden nun zwei Tabellen genannt

Anfragen über mehrere Relationen Raum Rang Name PersNr 226 232 7 C4 Sokrates Russel Kant 2125 2126 2137 Professoren Vorlesungen VorlNr Titel SWS gelesen Von 5001 Grundzüge 4 2137 5041 Ethik 4 2125 5049 Mäeutik 2 2125 4630 Die 3 Kritiken 4 2137 Verknüpfung 

where PersNr = gelesenVon and Titel = `Mäeutik‘ Name Rang Raum VorlNr Titel SWS gelesen Von 2125 Sokrates C4 226 5001 Grundzüge 4 2137 1225 Sokrates C4 226 5041 Ethik 4 2125 Jeder mit jedem einmal 2125 Sokrates C4 226 5049 Mäeutik 2 2125 2126 Russel C4 232 5001 Grundzüge 4 2137 2126 Russel C4 232 5041 Ethik 4 2125 2137 Kant C4 7 4630 Die 3 Kritiken 4 2137 where PersNr = gelesenVon and Titel = `Mäeutik‘ PersNr Name Rang Raum VorlNr Titel SWS gelesen Von 2125 Sokrates C4 226 5049 Mäeutik 2 select Name, Titel Name Titel Sokrates Mäeutik

Anfragen über mehrere Relationen Welche Studenten hören welche Vorlesungen? select Name, Titel from Studenten, hören, Vorlesungen where Studenten.MatrNr = hören.MatrNr and hören.VorlNr = Vorlesungen.VorlNr; Alternativ: select s.Name, v.Titel from Studenten s, hören h, Vorlesungen v where s. MatrNr = h. MatrNr and h.VorlNr = v.VorlNr Mit Korrelationsvariablen

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Mengenoperationen und geschachtelte Anfragen Mengenoperationen union, intersect, minus (Vereinigung, Schnittmenge, Differenz) ( select Name from Assistenten ) union from Professoren); Was passiert hier? Was würde bei intersect Passieren oder bei minus? Jeder für sich mit Zettel und Stift; 3 min.

Existenzquantor exists select p.Name from Professoren p where not exists ( select * from Vorlesungen v where v.gelesenVon = p.PersNr ); Korrelation Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 7

Existenzquantor exists select p.Name from Professoren p where not exists ( select * from Vorlesungen v where v.gelesenVon = p.PersNr ); Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 7 Professoren PersNr Name Rang Raum 2127 Kopernikus C3 310 2136 Curie C4 36

where PersNr not in ( select gelesenVon from Vorlesungen ); Mengenvergleich Hatten wir das nicht gerade? select Name from Professoren where PersNr not in ( select gelesenVon from Vorlesungen ); Unkorrelierte Unterabfragen sind meist effizienter, da sie nicht pro Zeile ausgewertet werden müssen

"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 Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

"Quantifizierte" Subqueries Anfrage: Studenten im höchsten Semester: SELECT * FROM Studenten WHERE Semester >= ALL (SELECT Semester FROM Studenten) ; Studenten, für die keine Prüfungen erfasst sind: SELECT * FROM Studenten s WHERE NOT EXISTS ( SELECT * FROM Prüfen p WHERE p.MatrNr = s.MatrNr ); Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Aggregatfunktion und Gruppierung Aggregatfunktionen avg, max, min, count, sum select avg (Semester) from Studenten; select gelesenVon, sum (SWS) from Vorlesungen group by gelesenVon; select gelesenVon, Name, sum (SWS) from Vorlesungen, Professoren where gelesenVon = PersNr and Rang = ´C4´ group by gelesenVon, Name having avg (SWS) >= 3;

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

Ausführen der Anfrage mit group by Vorlesung x Professoren VorlNr Titel SWS gelesen Von PersNr Name Rang Raum 5001 Grundzüge 4 2137 2125 Sokrates C4 226 5041 Ethik ... 4630 Die 3 Kritiken Kant 7 where gelesenVon = PersNr and Rang = ´C4´

group by gelesenVon, Name VorlNr Titel SWS gelesen Von PersNr Name Rang Raum 5001 Grundzüge 4 2137 Kant C4 7 5041 Ethik 2125 Sokrates 226 5043 Erkenntnis- theorie 3 2126 Russel 232 5049 Mäeutik 2 4052 Logik 5052 Wissenschafts-theorie 5216 Bioethik 4630 Die 3 Kritiken group by gelesenVon, Name

Aggregation (sum(SWS)) pro Gruppe VorlNr Titel SWS gelesenVon PersNr Name Rang Raum 5041 Ethik 4 2125 2125 Sokrates C4 226 5049 Mäeutik 2 2125 2125 Sokrates C4 226 4052 Logik 4 2125 2125 Sokrates C4 226 5043 Erkenntnistheorie 3 2126 2126 Russel C4 232 5052 Wissenschaftstheo. 3 2126 2126 Russel C4 232 5216 Bioethik 2 2126 2126 Russel C4 232 5001 Grundzüge 4 2137 2137 Kant C4 7 4630 Die 3 Kritiken 4 2137 2137 Kant C4 7 having avg (SWS) >= 3 Raum Rang Name PersNr gelesenVon SWS Titel VorlNr 7 C4 Kant 2137 4 Grundzüge Die 3 Kritiken 5001 4630 226 2 Ethik Mäeutik Logik Sokrates 2125 5041 5049 4052 Aggregation (sum(SWS)) pro Gruppe

gelesenVon Name sum (SWS) 2125 Sokrates 10 2137 Kant 8

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Maximalen Eintrag ausgeben Wie heißt der Student im höchsten Semester? Alternative 1: mit >= ALL also SELECT Name FROM Studenten WHERE Semester >= ALL (SELECT Semester FROM Studenten) ; Alternative 2: mit Maximum SELECT Name FROM Studenten WHERE Semester = ( SELECT MAX(Semester) FROM Studenten);

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

Geschachtelte Anfrage (Forts.) Unteranfrage in der select-Klausel Für jedes Ergebnistupel wird die Unteranfrage ausgeführt Man 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;

Wissenschaftstheorie Professoren PersNr Name Rang Raum 2125 Sokrates C4 226 2126 Russel 232 2127 Kopernikus C3 310 2133 Popper 52 2134 Augustinus 309 2136 Curie 36 2137 Kant 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 Vorlesungen VorlNr Titel SWS gelesenVon 5001 Grundzüge 4 2137 5041 Ethik 2125 5043 Erkenntnistheorie 3 2126 5049 Mäeutik 2 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 2133 5022 Glaube und Wissen 2134 4630 Die 3 Kritiken voraussetzen Vorgänger Nachfolger 5001 5041 5043 5049 5216 5052 5259 hören MatrNr VorlNr 26120 5001 27550 4052 28106 5041 5052 5216 5259 29120 5049 29555 5022 25403 Assistenten PerslNr Name Fachgebiet Boss 3002 Platon Ideenlehre 2125 3003 Aristoteles Syllogistik 3004 Wittgenstein Sprachtheorie 2126 3005 Rhetikus Planetenbewegung 2127 3006 Newton Keplersche Gesetze 3007 Spinoza Gott und Natur prüfen MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 27550 4630 2137

Unkorrelierte versus korrelierte Unteranfragen korrelierte Formulierung select s.* from Studenten s where exists (select p.* from Professoren where p.GebDatum > s.GebDatum);

Ä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

Entschachtelung korrelierter Unteranfragen -- Forts. select a.* from Assistenten a where 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 p where a.Boss=p.PersNr and p.GebDatum > a.GebDatum;

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

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;

Das Ergebnis der Anfrage VorlNr AnzProVorl GesamtAnz Marktanteil 4052 1 8 .125 5001 4 .5 5022 2 .25 ...

Simulation allquantifizierter Suchprädikate  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: Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Umformung der Logik (1/3)  Schritt 1: Elimination  Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Umformung der Logik (2/3)  Schritt 2: Elimination  Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Umformung der Logik (3/3)  Schritt 3: Transformation ergibt schließlich: Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Umsetzung der Logik in SQL Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? SELECT s.MatrNr FROM Studenten s WHERE NOT EXISTS (SELECT * FROM Vorlesungen v WHERE v.SWS = 4 AND NOT EXISTS FROM hören h WHERE h.VorlNr = v.VorlNr AND h.MatrNr=s.MatrNr ) ); Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

FROM Studenten s WHERE NOT EXISTS ( SELECT v.VorlNr FROM Vorlesungen v Simulation allquantifizierter Suchprädikate: alternative Form mit Mengenoperation Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? 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 ) ; Zwischenanfrage: Alle Vorlesungen, die 4 SWS haben MINUS Alle Vorlesungen, die der Student s gehört hat Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

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);

Herausforderung Wie formuliert man die komplexere Anfrage: „Wer hat alle vierstündigen Vorlesungen gehört“ ohne Korrelation nur mit Zählen Grundidee 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

Simulation allquantifizierter Suchprädikate durch count-Aggregation Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? 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); Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Count-Aggregation: Fehlerquellen Anfrage: Namen der Studenten, die alle vierstündigen Vorlesungen gehört haben Vorsicht: so geht das nicht.. 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); Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Count-Aggregation: Fehlerquellen Anfrage: Namen der Studenten, die alle vierstündigen Vorlesungen gehört haben 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 der SELECT-Klausel aufgeführten Attribute - außer den aggregierten – auch in der GROUP BY-Klausel aufgeführt werden! Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

Allquantifizierung - Fazit Es geht zwar nicht direkt, aber indirekt Man kann per deMorgan den Ausdruck auf exists zurückführen Man kann per Mengenoperation minus die Fälle eliminieren, in denen es nicht übereinstimmt Man 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 Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

 Nullwerte unbekannter 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 Studenten where Semester < 13 or Semester > =13 Wenn es Studenten gibt, deren Semester-Attribut den Wert null hat, werden diese nicht mitgezählt Der Grund liegt in folgenden Regeln für den Umgang mit null-Werten begründet:

Auswertung bei Null-Werten  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. 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. Logische Ausdrücke werden nach den folgenden Tabellen berechnet:

 not true false unknown and true unknown false or true unknown false

 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

SELECT * FROM prüfen WHERE Note IS NULL Test auf Nullwert Anfrage: bisher unbenotete Prüfungsleistungen SELECT * FROM prüfen WHERE Note IS NULL Professoren mit eigenem Büro SELECT * FROM Professoren WHERE Raum IS NOT NULL Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen

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);

Das case-Konstrukt 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; Die erste qualifizierende when-Klausel wird ausgeführt

Vergleiche mit like Platzhalter "%" ; "_" bei Vergleichen mit like "%" steht für beliebig viele (auch gar kein) Zeichen "_" steht für genau ein Zeichen Vorsicht: 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%´;

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

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

Sie können nun SQL-Anfragen  Fazit Sie können nun SQL-Anfragen  Datenbanken, WS 12/13 Kapitel 2: SQL Anfragen