Vorlesung #6 SQL (Teil 3).

Slides:



Advertisements
Ähnliche Präsentationen
Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen.
Advertisements

Datenintegrität Integitätsbedingungen Schlüssel
ER-Datenmodell und Abfragen in SQL
© A. Kemper / A. Eickler1 Kapitel 5: Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung.
Bauinformatik II Softwareanwendungen 1
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Kapitel 2 SQL Anfragen.
Kapitel 2 SQL Anfragen.
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)
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
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
Datenbankentwicklung IV-LK
Datenintegrität Integitätsbedingungen Schlüssel
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)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 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 #8 SQL (Teil 3)
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 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Erläuterung der wichtigsten Befehle
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Aggregatsfunktion SQL = Structured Query Language.
Vorlesung #10 Physische Datenorganisation
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Verdichten von Daten mit Gruppenfunktionen
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Structured Query Language
Vorlesung #5 SQL (Teil 2).
1 Differenzierte Verbindungsoperationen (1) Beobachtung: Einfach zu formulierende Verbindungen wie ein Natural Join sind nicht als solche dokumentiert.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
1 Gruppierung, Aggregierung und Sortierung (1) Finde für jeden Flugzeugtyp die Zahl aller von Frankfurt abgehenden Flüge und sortiere Ergebnis nach Flugzeugtyp:
Vorlesung Datenbanksysteme vom Anfragebearbeitung  Logische Optimierung.
Vorlesung Datenbanksysteme vom : Wiederholung Anfragebearbeitung  Logische Optimierung.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken abfragen mit SQL
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
 standardisierte -Datendefinitionssprache (DDL) -Datenmanipulationssprache (DML) -Anfragesprache (Query)  derzeit aktueller Standard ist SQL 3  objektrelationale.
WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R Vorlesung #3 Das relationale Modell (Teil 2)
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.
Übung Datenbanksysteme I SQL
Abfragen Wiederholung Manuel Friedrich Schiller-Gymnasium Hof.
Vorlesung #9 Anfragebearbeitung
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #9 Anfragebearbeitung
SQL Join.
Wirtschaftsinformatik
Vorlesung #7 SQL (Teil 4).
Vorlesung #8 SQL (Teil 5).
Left Join, Right Join, Outer Join
Funktionen, GROUP BY, HAVING Views anlegen und verwenden
Nutzung und Modellierung von Datenbanken
(Structured Query Language)
 Präsentation transkript:

Vorlesung #6 SQL (Teil 3)

Vorlesung #6 - SQL (Teil 4) „Fahrplan“ Wiederholung (NULL, SELECT-Schachtelung) Korrelierte vs. Unkorrelierte Anfragen Entschachtelung der Anfragen Operationen der Mengenlehre Spezielle Sprachkonstrukte (BETWEEN, CASE, LIKE) © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) Nullwerte UPDATE studenten SET semester = '' WHERE matrnr = 24002; select count (*) from Studenten where Semester < 13 or Semester >= 13 Tupel (Zeilen) mit Null-Werten werden einfach nicht mitgezählt !!! © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) Nullwerte (2) NULL + 1 = NULL, NULL * 1 = NULL Beispiele (Oracle) SELECT NULL + 2 FROM Dual; SELECT NULL * 2 Dual ist so etwas wie „Dummy“-Tabelle in Oracle Es gilt die sogenannte 3-wertige Logik in SQL © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Behandlung von NULL Werten (Oracle und SQL-92) In Oracle gibt es eine „null value“ Funktion nvl (if NULL then): SELECT nvl(NULL,5) + 2 AS Result FROM Dual; Result ------ 7 Man kann NULL Werte mit IS NULL oder IS NOT NULL testen (SQL-92) © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Geschachtelte Anfragen (2) ... in WHERE-Klausel Welche Prüfungen sind besser als durchschnittlich verlaufen? SELECT * FROM prüfen WHERE Note < ( select avg (Note) from prüfen ); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Geschachtelte Anfragen (3) ... in SELECT-Klausel Professoren mit deren Lehrbelastung und durchschnittlicher Lehrbelastung SELECT PersNr, Name, sum(SWS) AS Lehrbelastung, ( select avg (sum(SWS)) from Vorlesungen group by gelesenVon) AS Durchschnitt FROM Professoren p, Vorlesungen v WHERE p.PersNr = v.gelesenVon GROUP BY PersNr, Name; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Geschachtelte Anfragen (4) ... in SELECT-Klausel Professoren mit deren Lehrbelastung und durchschnittlicher Lehrbelsatung – korreliert ohne GROUP BY: SELECT PersNr, Name, (select sum (SWS) from Vorlesungen where gelesenVon = p.PersNr) AS Lehrbelastung, (select sum(SWS) / count(DISTINCT gelesenVon) from Vorlesungen) AS Durchschnitt FROM Professoren p © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Geschachtelte Anfragen (5) ... in FROM-Klausel „fleißige“ Studenten – die mehr als 2 Vorlesungen hören: SELECT tmp.MatrNr, tmp.Name, tmp.VorlAnzahl FROM (select s.MatrNr, s.Name, count(*) as VorlAnzahl from Studenten s, hoeren h where s.MatrNr=h.MatrNr group by s.MatrNr, s.Name) tmp WHERE tmp.VorlAnzahl > 2; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Korreliert vs. unkorreliert Achtung: funktioniert in der Original-Beispiel-Datenbank UNI nicht, da GebDatum fehlt! Alle Studenten, die älter als der jüngste Professor sind - korrelierte Formulierung select s.* from Studenten s where exists (select p.* from Professoren p where p.GebDatum > s.GebDatum); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Korreliert vs. Unkorreliert (2) Ä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 © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Entschachtelung korrelierter Unteranfragen Assistenten, die für eine(n) jüngere(n) Professor(in) arbeiten 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 from Assistenten a, Professoren p where a.Boss = p.PersNr and p.GebDatum > a.GebDatum; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre Vereinigung – UNION bzw. UNION ALL Durchschnitt – INTERSECT Differenz – MINUS (auch EXCEPT) UNION, INTERSECT und MINUS setzen Schemagleichheit voraus Der Operator IN bzw. NOT IN testet auf Mengenmitgliedschaft Der Operator ALL testet, ob alle Ergebnisse der Unteranfrage den Vergleich erfüllen © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre (2) UNION – mit Duplikatelimierung, UNION ALL – ohne Duplikateliminierung ( select Name from Assistenten ) union ( select Name from Professoren ); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre (3) Mengendurchschnitt – INTERSECT Alle Professoren, die eine Vorlesung halten SELECT PersNr FROM Professoren INTERSECT SELECT gelesenVon FROM Vorlesungen © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre (4) Gleiche Abfrage, „alle Professoren, die eine Vorlesung halten“ mit IN Operator SELECT PersNr FROM Professoren WHERE PersNr IN (SELECT gelesenVon FROM Vorlesungen); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre (5) Mengendifferenz – MINUS Alle Professoren, die keine Vorlesung halten SELECT PersNr FROM Professoren MINUS SELECT gelesenVon FROM Vorlesungen; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Operationen der Mengenlehre (6) Gleiche Abfrage, „alle Professoren, die keine Vorlesung halten“ mit NOT IN SELECT PersNr FROM Professoren WHERE PersNr NOT IN ( SELECT gelesenVon FROM Vorlesungen); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) ALL Operator Studenten mit der größten Semesterzahl SELECT Name, Semester FROM Studenten WHERE Semester >= ALL (select Semester from Studenten); äquivalent WHERE Semester >= (select max(Semester) from Studenten); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Spezielle Sprachkonstrukte BETWEEN select * from Studenten where Semester > = 1 and Semester < = 4; where Semester between 1 and 4; select * from Studenten where Semester in (1,2,3,4); © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Spezielle Sprachkonstrukte (2) CASE WHEN ... THEN ... ELSE ... END – die erste qualifizierende WHEN Klausel wird ausgeführt select MatrNr, ( case when Note < 1.5 then ´sehr gut´ when Note < 2.5 then ´gut´ when Note < 3.5 then ´befriedigend´ when Note < 4.0 then ´ausreichend´ else ´nicht bestanden´end) from pruefen; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Spezielle Sprachkonstrukte (3) Wiederholung! LIKE Operator – Vergleich von Zeichenketten "%" steht für beliebig viele (auch gar kein) Zeichen "_" steht für genau ein Zeichen 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%´; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) JOINs in SQL-92 cross join: Kreuzprodukt natural join: natürlicher Join join oder inner join: Theta-Join left outer join: linker äußerer Join right outer join: rechter äußerer Join full outer join: äußerer Join © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

CROSS JOIN (Kartesisches Produkt) SELECT * FROM Studenten CROSS JOIN prüfen; ist äquivalent zu FROM Studenten, prüfen; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

NATURAL JOIN (natürlicher Verbund) SELECT * FROM Studenten NATURAL JOIN prüfen; ist äquivalent zu SELECT s.MatrNr, s.Name, s.Semester, /* p.MatrNr ausgelassen */ p.VorlNr, p.PersNr, p.Note FROM Studenten s, prüfen p WHERE s.MatrNr = p.MatrNr; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) JOIN (Theta Verbund) SELECT * FROM Studenten s JOIN prüfen p ON s.MatrNr = p.MatrNr; ist äquivalent zu FROM Studenten s, prüfen p WHERE s.MatrNr = p.MatrNr; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

JOIN (Theta Verbund) (2) Allgemein – setzt die Gleichheit der Join-Spalten nicht voraus: SELECT * FROM Professoren p JOIN Assistenten a ON p.persnr = a.boss; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

* OUTER JOINs (äußerer Vebund) SELECT * FROM Studenten s LEFT OUTER JOIN pruefen p ON s.matrnr = p.matrnr; FROM hoeren h RIGHT OUTER JOIN Vorlesungen v ON h.vorlnr = v.vorlnr; © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

* OUTER JOINs (äußerer Vebund) (2) SELECT * FROM Vorlesungen v FULL OUTER JOIN Assistenten a ON v.gelesenvon = a.Boss © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 - SQL (Teil 4) Ausblick Vorlesung #6 Quantifizierte Anfragen Rekursion Rekursion in SQL-92 Rekursion in DBMS-“Dialekten“ (Oracle und DB2) Views (Sichten) - gespeicherte Abfragen Gewährleistung der logischen Datenunabhängigkeit Modellierung von Generalisierung UPDATE-fähige Sichten Datenintegrität Statische und dynamische Bedingungen Referentielle Integrität (primary key, foreign key) © Bojan Milijaš, 06.11.2015 Vorlesung #6 - SQL (Teil 4)

Vorlesung #6 Ende