Rückblick: Relationale Normalisierung § „Gute“ Relationenschema vermeiden Redundanz und führen nicht zu Anomalien beim Einfügen, Löschen oder Ändern § Relationale Normalformen (1NF, 2NF, 3NF, BCNF, 4NF) charakterisieren die Güte von Relationenschema § Dritte Normalform (3NF) ist in der Praxis am wichtigsten § Relationenschema lassen sich durch Zerlegung in die dritte Normalform bringen Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 87 2.4 Relationale Algebra § Relationales Modell bietet Formalismus zur Beschreibung zu speichernder Daten und deren Struktur § Wie können wir Daten extrahieren, d.h. Anfragen auf den gespeicherten Daten formulieren? § Beispiele: § Welche Vorlesungen hört der Student Marty McFly? § Welche Professoren halten Vorlesungen, die nur von Studenten im ersten Semester besucht werden? Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 88 Relationale Algebra § Relationale Algebra (auch: Relationenalgebra) bietet eine Anfragesprache auf Relationen § Operatoren bilden Ausdrücke der Relationenalgebra § Ausdrücke beinhalten implizit einen Auswertungsplan § spielt wichtige Rolle bei Implementierung von RDBMSs (zur internen Darstellung und Optimierung von Anfragen) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 89 Selektion § Selektion σ (sigma) wählt Tupel (Zeilen) aus einer Relation R anhand einer Selektionsbedingung P aus ‡[P](R) § Selektionsbedingung kann folgende Bestandteile haben § Attributnamen der Relation R oder Konstanten § Arithmetische Vergleichsoperatoren =, <, ≤, ≥, ≠ § Logische Operatoren ¬, , § Ergebnis der Selektion ist wiederum eine Relation bestehend aus allen Tupeln aus R, die P erfüllen Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 90 Selektion § Beispiel: Erstsemester aus Relation Studenten Studenten MatrNr Vorname Name Semester 13765 18877 18898 18979 18979 Moritz Peter Gordon Marty Benjamin Müller Parker Shumway McFly Berger 1 7 1 3 1 ‡ [ Semester = 1 ] ( Studenten ) ‡ [ Semester = 1 ] ( Studenten ) MatrNr Vorname Name Semester 13765 18898 18979 Moritz Gordon Benjamin Müller Shumway Berger 1 1 1 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 91 Projektion § Projektion π (pi) wählt Attribute (Spalten) einer Relation R anhand einer gegebenen Attributmenge A aus fi[A](R) § Attributmenge A als Liste von Attributnamen angegeben § Ergebnis der Projektion ist eine Relation, die Tupel mit den in A angegebenen Attributen enthält und frei von Duplikaten ist (Relationen sind Mengen) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 92 Projektion § Beispiel: Vorname und Fach von Professoren Professoren PersNr Vorname Name Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik fi [ Vorname, Fach ] ( Professoren ) fi [ Vorname, Fach ] ( Professoren ) Vorname Fach Donald Albert Alfred Carl Informatik Physik Chemie Mathematik Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Duplikate eliminiert 93 Kartesisches Produkt (Kreuzprodukt) § Das Kreuzprodukt zweier Relationen R und S enthält alle |R| * |S| möglichen Paare von Tupeln aus R und S R◊S § Ergebnis des Kreuzprodukts ist eine Relation mit Schema sch(R ◊ S) = sch(R) fi sch(S) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 94 Kartesisches Produkt (Kreuzprodukt) § Beispiel: Kombinationen von Professoren und Vorlesungen Professoren Vorlesungen PersNr Vorname Name Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik ◊ VorlNr Titel SWS 101 110 Informatikgrundlagen Datenbanken 4 4 Professoren ◊ Vorlesungen PersNr Vorname Name 101101 101101 231011 231011 .. . Donald Donald Albert Albert .. . Knuth Knuth Einstein Einstein .. . Fach VorlNr Titel SWS Informatik Informatik Physik Physik .. . 101 110 101 110 .. . Informatikgrundlagen Datenbanken Informatikgrundlagen Datenbanken .. . 4 4 4 4 .. . Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 95 Qualifizierte Attributnamen § Verbundene Relationen R und S können identisch benannte Attribute besitzen (z.B. Vorname und Name in Professoren und Studenten) § Qualifizierte Attributnamen stellen dem Attributnamen den Namen der Ursprungsrelation voran und erlauben so eine Unterscheidung von identisch benannten Attributen § Beispiel: Professoren ◊ Studenten ... Professoren.Vorname ... Studenten.Vorname ... .. . .. . .. . .. . .. . Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 96 Umbenennung von Relationen und Attributen § Qualifizierte Attributnamen reichen zur Unterscheidung nicht aus, wenn eine Ursprungsrelation mehrfach auftaucht § Beispiel: Paare von Artikeln mit gleichen Mengeneinheiten ‡ [ ??? ] ( Artikel ◊ Artikel ) § Umbennungsoperator ρ (rho) erlaubt Umbenennung von § Relationen (z.B. Artikel in ArtikelLinks) fl[ ArtikelLinks ](Artikel) § Attributen (z.B. Fach in Fachgebiet von Professoren) fl[ Fachgebiet Ω Fach ](Professoren) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 97 Mengenoperationen auf Relationen § Zur Erinnerung: Relationen sind Mengen von Tupeln § Für zwei Relationen R und S mit identischem Schema sch(R) = sch(S) sind die bekannten Mengenoperationen (Vereinigung, Schnitt und Differenz) wie bekannt definiert Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 98 Vereinigung § Beispiel: Namen von Studenten oder Professoren fi [ Name ] ( Studenten ) fi fi [ Name ] ( Professoren ) fi [ Name ] ( Studenten ) fi [ Name ] ( Professoren ) Name Name Müller Meier McFly fi Knuth Meier Einstein Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Name = Name Müller Meier McFly Knuth Einstein 99 Schnitt § Beispiel: Namen von Studenten und Professoren fi [ Name ] ( Studenten ) fl fi [ Name ] ( Professoren ) fi [ Name ] ( Studenten ) fi [ Name ] ( Professoren ) Name Name Name Name Müller Meier McFly fl Knuth Meier Einstein Datenbanken & Informationssysteme / Kapitel 2: Datenbanken = Meier 100 Differenz § Beispiel: Namen von Studenten nicht aber Professoren fi [ Name ] ( Studenten ) ≠ fi [ Name ] ( Professoren ) fi [ Name ] ( Studenten ) fi [ Name ] ( Professoren ) Name Name Name Name Müller Meier McFly ≠ Knuth Meier Einstein Datenbanken & Informationssysteme / Kapitel 2: Datenbanken = Müller McFly 101 Natürlicher Join § Natürlicher Join (Verbund) verbindet zwei Relationen R und S anhand ihrer gemeinsamen Attribute R ÛÙ S § Ergebnis des natürlichen Joins ist Relation mit Schema sch(R) fi sch(S) § Hierbei werden Tupel aus R und S verbunden, deren Werte für alle gemeinsamen Attribut übereinstimmen § Attribute gleichen Namens werden zusammengefasst Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 102 Natürlicher Join § Beispiel: Studenten mit ihren gehörten Vorlesungen (Studenten ÛÙ hören) ÛÙ Vorlesungen Studenten hören MatrNr Vorname Name Semester 13765 18877 18898 18976 18979 Moritz Peter Gordon Marty Benjamin Müller Parker Shumway McFly Berger 1 7 1 3 1 ÛÙ MatrNr VorlNr 13765 18979 18979 101 101 110 Vorlesungen ÛÙ VorlNr Titel SWS 101 110 Informatikgrundlagen Datenbanken 4 4 (Studenten ÛÙ hören) ÛÙ Vorlesungen MatrNr Vorname Name Semester VorlNr Titel SWS 13765 18979 18979 Moritz Benjamin Benjamin Müller Berger Berger 1 1 1 101 101 110 Informatikgrundlagen Informatikgrundlagen Datenbanken 4 4 4 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 103 Allgemeiner Join § Allgemeiner Join verbindet zwei Relationen R und S anhand eines beliebigen Joinprädikates θ (theta) R ÛÙ [ ◊ ] S § Ergebnis des allgemeinen Joins ist Relation mit Schema { fl [ R.A Ω A ] ( R ) | A œ sch(R) } fi { fl [ S.A Ω A ] ( S ) | A œ sch(S) } § Attribute gleichen Namens werden umbenannt, d.h. mit dem Namen der Ursprungsrelation qualifiziert Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 104 Allgemeiner Join § Beispiel: Professoren und Studenten mit gleichem Namen Professoren ÛÙ [ Professoren.Name = Studenten.Name ] Studenten (S)tudenten (P)rofessoren PersNr Vorname Name Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik ÛÙ [ P.Name = S.Name ] MatrNr Vorname Name Semester 18979 19880 19882 20020 Gundula Petra Nora Emma Gauss Parker Nobel Ernst 1 1 3 3 P ÛÙ [ P.Name = S.Name ] S P.PersNr P.Vorname P.Name P.Fach S.MatrNr S.Vorname S.Name S.Semester 300128 600321 Alfred Carl Nobel Gauss Chemie Mathematik 19882 18979 Nora Gundula Nobel Gauss 3 1 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 105 Allgemeiner Join § Allgemeiner Join ist letztlich eine Kurzschreibweise für R ÛÙ [ ◊ ] S = ‡ [ ◊ ] ( R ◊ S ) § Verwendet das Joinprädikat θ nur Vergleiche mittels „=“ spricht man auch von einem Equi-Join Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 106 Äußere Joins § Natürlicher und allgemeiner Join erhalten nur solche Tupel aus R und S, die einen „Joinpartner“ finden § Äußere Joins erhalten auch solche Tupeln aus einer oder beiden Relationen, die keinen „Joinpartner“ finden § linker äußerer Join (left outer join) erhält alle Tupel aus R R ÛÙ [ ◊ ] S § rechter äußerer Join (right outer join) erhält alle Tupel aus S R ÛÙ [ ◊ ] S § äußerer Join (full outer join) erhält alle Tupel aus R und S R ÛÙ [ ◊ ] S Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 107 Linker äußerer Join § Beispiel: Professoren und Studenten mit gleichem Namen (S)tudenten (P)rofessoren PersNr Vorname Name Fach MatrNr Vorname Name Semester 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik 18979 19880 19882 20020 Gundula Petra Nora Emma Gauss Parker Nobel Ernst 1 1 3 3 § linker äußerer Join P ÛÙ [ P.Name = S.Name ] S P.PersNr P.Vorname P.Name P.Fach S.MatrNr S.Vorname S.Name S.Semester 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Informatik Chemie Informatik Mathematik 19882 Nora Nobel 3 18979 Gundula Gauss 1 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 108 Rechter äußerer Join § Beispiel: Professoren und Studenten mit gleichem Namen (S)tudenten (P)rofessoren PersNr Vorname Name Fach MatrNr Vorname Name Semester 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik 18979 19880 19882 20020 Gundula Petra Nora Emma Gauss Parker Nobel Ernst 1 1 3 3 § rechter äußerer Join P ÛÙ [ P.Name = S.Name ] S P.PersNr P.Vorname P.Name P.Fach S.MatrNr S.Vorname S.Name S.Semester 600321 Carl Gauss Mathematik 300128 Alfred Nobel Chemie 18979 19880 19882 20020 Gundula Petra Nora Emma Gauss Parker Nobel Ernst 1 1 3 3 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 109 Äußerer Join § Beispiel: Professoren und Studenten mit gleichem Namen (S)tudenten (P)rofessoren PersNr Vorname Name Fach MatrNr Vorname Name Semester 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik 18979 19880 19882 20020 Gundula Petra Nora Emma Gauss Parker Nobel Ernst 1 1 3 3 § äußerer Join P ÛÙ [ P.Name = S.Name ] S P.PersNr P.Vorname P.Name P.Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Informatik Chemie Informatik Mathematik Datenbanken & Informationssysteme / Kapitel 2: Datenbanken S.MatrNr S.Vorname S.Name S.Semester 19880 Petra Parker 1 19882 Nora Nobel 3 18979 20020 Gundula Emma Gauss Ernst 1 3 110 Operatorbaumdarstellung § Ausdrücke der relationalen Algebra lassen sich alternativ auch als sogenannte Operatorbäume darstellen § Beispiel: fi [ S.Vorname, S.Name, V.Titel ] ( (‡ [ Semester > 3 ] ( S ) ÛÙ h) ÛÙ V ) fi[S.Vorname, S.Name, V.Titel] ÛÙ V ÛÙ ‡[ Semester > 3 ] h S Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 111 Grenzen der relationalen Algebra § Können wir mit den Operatoren der relationalen Algebra alle „interessanten“ Anfragen formulieren? § Beispiel: Anzahl von Studenten pro Vorlesung (Studenten ÛÙ hören) ÛÙ Vorlesungen MatrNr Vorname Name Semester VorlNr Titel SWS 13765 18979 18979 Moritz Benjamin Benjamin Müller Berger Berger 1 1 1 101 101 110 Informatikgrundlagen Informatikgrundlagen Datenbanken 4 4 4 Gruppierung nach Vorlesung und „Zählen“ notwendig! § Erweiterungen zum Gruppieren & Aggregieren existieren (vgl. z.B. Kapitel 9 in Saake et al. [3]) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 112 Anfrageübung Versandhandel Ó Ô Bestellungen : [ BestellNr : integer, Bestelldatum : string, . . . , KundenNr : integer, ] Ó Ô Kunden : [ KundenNr : integer, Vorname : string, Name : string, . . . ] Ó Ô Artikel : [ ArtikelNr : integer, Beschreibung : string, . . . , ME : string ] Ó Ô Mengeneinheiten : [ ME : string, Beschreibung : string, . . . ] Ó Ô Bestellpositionen : [ BestellNr : integer, ArtikelNr : integer , Anzahl : integer ] § Welche Kunden heißen Müller oder Meier? § Welche Vornamen haben Kunden aus Mannheim? § Welche Artikel (ArtikelNr) werden im 5er-Pack verkauft? Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 113 Anfrageübung Versandhandel § Welche Kunden heißen Müller oder Meier? ‡ [ Name = “Meier” ‚ Name = “Müller” ] ( Kunden ) § Welche Vornamen haben Kunden aus Mannheim? fi [ Vorname ] ( ‡ [ Wohnort = “Mannheim” ] ( Kunden ) ) § Welche Artikel (ArtikelNr) werden im 5er-Pack verkauft? fi[ Artikel.ArtikelNr ]( ‡[ Artikel.ME = Mengeneinheiten.ME ]( Artikel ◊ ‡[ Beschreibung = “5er-Pack” ](Mengeneinheiten))) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 114 Anfrageübung Versandhandel Ó Ô Bestellungen : [ BestellNr : integer, Bestelldatum : string, . . . , KundenNr : integer, ] Ó Ô Kunden : [ KundenNr : integer, Vorname : string, Name : string, . . . ] Ó Ô Artikel : [ ArtikelNr : integer, Beschreibung : string, . . . , ME : string ] Ó Ô Mengeneinheiten : [ ME : string, Beschreibung : string, . . . ] Ó Ô Bestellpositionen : [ BestellNr : integer, ArtikelNr : integer , Anzahl : integer ] § Welche Artikel (ArtikelNr) werden im 5er-Pack verkauft? § Welche Artikel (ArtikelNr) wurden am gleichen Tag von Kunden aus Worms und Kunden aus Trier bestellt? Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 115 Anfrageübung Versandhandel § Welche Artikel (ArtikelNr) werden im 5er-Pack verkauft? fi [ Artikel.ArtikelNr ] ( Artikel ÛÙ ‡ [ Beschreibung = “5er-Pack” ] ( ME ) ) § Welche Artikel (ArtikelNr) wurden am gleichen Tag von Kunden aus Worms und Kunden aus Trier bestellt? fi[W.ArtikelNr]( fl [ W ] ( ‡ [ Wohnort = “Worms” ] ( (Kunden ÛÙ Bestellungen) ÛÙ Bestellpositionen ) ) ÛÙ [ W.ArtikelNr = T.ArtikelNr · W.Bestelldatum = T.Bestelldatum ] fl [ T ] ( ‡ [ Wohnort = “Trier” ] ( (Kunden ÛÙ Bestellungen) ÛÙ Bestellpositionen ) ) ) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 116 Zusammenfassung § Relationale Algebra als Anfragesprache auf Relationen § Ausdrücke zusammengesetzt aus Operatoren, z.B. § Selektion (σ) zur Auswahl von Tupeln § Projektion (π) zur Auswahl von Attributen § Kreuzprodukt (×) und Joins (⨝, ⟕, ⟖, ⟗) zur Verknüpfung von Relationen § Mengenoperationen (∩, , −) zur Verknüpfung von Relationen mit gleichem Schema § Mehrdeutige Namen von Attributen und Relationen können durch Umbenennung eliminiert werden Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 117 Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme – Eine Einführung, De Gruyter Oldenbourg, 2015 (Kapitel 3) [3] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 4) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 118 Rückblick: Relationale Algebra § Relationale Algebra als Anfragesprache auf Relationen § Ausdrücke zusammengesetzt aus Operatoren, z.B. § Selektion (σ) zur Auswahl von Tupeln § Projektion (π) zur Auswahl von Attributen § Kreuzprodukt (×) und Joins (⨝, ⟕, ⟖, ⟗) zur Verknüpfung von Relationen § Mengenoperationen (∩, , −) zur Verknüpfung von Relationen mit gleichem Schema § Mehrdeutige Namen von Attributen und Relationen können durch Umbenennung eliminiert werden Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 119 2.5 Structured Query Language (SQL) § Structured Query Language (SQL) § geht zurück auf den in IBM Almaden (San Jose) entwickelten Prototypen System R § ursprünglich: Structured English Query Language (SEQUEL) § auf Englisch wird SQL noch immer sequel gesprochen Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 120 SQL als Standard § SQL standardisiert durch American National Standards Institute (ANSI) und International Organization for Standardization (ISO) § SQL-86 / SQL-89 § SQL-92 (z.B. Datentypen für Daten, Mengenoperationen) § SQL-99 (z.B. rekursive Anfragen) § SQL-2003 (z.B. Unterstützung von XML) § SQL-2008 / SQL-2011 § Oracle, IBM DB2 und Microsoft SQL Server unterstützen SQL-92 weitgehend und bieten darüber hinaus proprietäre Funktionalität (z.B. XML-Unterstützung) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 121 SQL Sprachbestandteile § Data Definition Language (DDL) zur Schemadefinition (z.B. Anlegen von Tabellen) § Data Query Language (DQL) zum Anfragen (z.B. Auswahl bestimmer Zeilen) § Data Manipulation Language (DML) zur Datenmanipulation (z.B. Einfügen von Daten in Tabellen) § Data Control Language (DCL) zur Rechteverwaltung (z.B. Sperren des Zugriffs auf Tabelle) § Transaction Control Language (TCL) zur Transaktionsverwaltung (z.B. rückgängig machen) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 122 2.5.1 Anfragen auf einer Tabelle § Anfragen lassen sich mittels des SELECT Kommandos formulieren; dieses hat folgende Form 1 2 3 4 SELECT FROM WHERE ORDER BY < Attribute > < Tabellen > < Bedingungen > < Attribute > § Beispiel: Vorname und Name von Professoren in Informatik 1 2 3 SELECT Vorname , Name FROM Professoren WHERE Fach = ’ Informatik ’ dies entspricht folgendem Ausdruck der Relationenalgebra fi [ Vorname, Name ] ( ‡ [ Fach = “Informatik” ] ( Professoren ) ) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 123 Duplikateneliminierung § Anfrageergebnisse können, im Gegensatz zu Ergebnisrelationen der Relationanalgebra, Duplikate enthalten Professoren PersNr Vorname Name Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik Vorname 1 2 SELECT Vorname FROM Professoren Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Donald Albert Alfred Donald Carl 124 Duplikateneliminierung § Duplikate im Anfrageergebnis können durch Angabe von DISTINCT unterdrückt werden Professoren PersNr Vorname Name Fach 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Physik Chemie Informatik Mathematik Vorname 1 2 SELECT DISTINCT Vorname FROM Professoren Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Donald Albert Alfred Carl 125 Sortierung § Anfrageergebnisse können, im Gegensatz zu Ergebnisrelationen der Relationanalgebra, eine Ordnung haben § Sortierung des Anfrageergebnis nach ein oder mehreren Attributen durch Angabe durch ORDER BY § Natürliche Ordnung der Attribute wird gemäß ihres Datentyps verwendet, d.h. numerische Attribute (z.B. int und float) werden nach numerischem Wert, textuelle Attribute (z.B. char und varchar) lexikografisch sortiert Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 126 Sortierung § Angabe von ASC bzw. DESC bestimmt, ob nach einem Attribut aufsteigend oder absteigend sortiert wird § ASC ist hier Vorgabewert (default) und kann entfallen § Beispiel: Vorname, Name und Fach von Professoren, aufsteigend sortiert nach Nachname und Vorname 1 2 3 4 SELECT FROM WHERE ORDER BY Vorname , Name , Fach Professoren Fach = ’ Mathematik ’ Name , Vorname Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 127 Sortierung § Beispiel: Vorname und Name von Studenten, absteigend sortiert nach ihrer Anzahl von Semestern 1 2 3 SELECT Vorname , Name FROM Studenten ORDER BY Semester DESC Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 128 Formatierung und Namenskonventionen § Ähnlich zu Programmiersprachen, gibt es auch für SQL verschiedene Konvetionen zur Bennenung von Bezeichnern und Formatierung von Kommandos § Schlüsselwörter (CREATE vs. create) § Attributnamen (Bestell_Nr vs. BestellNr) § Tabellennamen (Kunden vs. Kunde) § Formatierung von Kommandos (Klammern und Umbrüche) § Letztlich Geschmacksache, Konsistenz innerhalb eines Projekts ist jedoch wichtig Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 129 Mathematische Funktionen § SQL unterstützt die mathematischen Operatoren (+, *, -, /) und eine Vielzahl mathematischer Funktionen, z.B. § ABS(A): Betrag § SIGN(A): Vorzeichen § SQRT(A): Quadratwurzel § FLOOR(A): Abrunden auf ganze Zahl § CEIL(A): Aufrunden auf ganze Zahl § MAX(A,B): Maximum der Attribute A und B § MIN(A,B): Minimum der Attribute A und B § … Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 130 Sonstige Funktionen § SQL unterstützt zahlreiche Funktionen für nichtnumerische Datentypen, etwa für Zeichenketten § LOWER(A): Zeichenkette in Kleinbuchstaben § UPPER(A): Zeichenkette in Großbuchstaben § LENGTH(A): Länge der Zeichenkette § SUBSTRING(A, start, end): Ausschnitt der Zeichenkette § TRIM(A): Zeichenkette ohne umgebende Leerzeichen Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 131 Aggregatfunktionen § SQL unterstützt eine Vielzahl von Aggregatfunktionen, die auf die Werte eines Attributs in mehreren Tupeln angewendet werden können, z.B.: § MIN(A): minimaler Wert für Attribut A § MAX(A): maximaler Wert für A § AVG(A): durchschnittlicher Wert für A § SUM(A): Summe der Werte für A § COUNT(*): Anzahl Tupel § COUNT(A): Anzahl Tupel mit Wert ungleich NULL für A § COUNT(DISTINCT A): Anzahl Werte ungleich NULL für A Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 132 Aggregatfunktionen § Beispiel: § MIN(A) = 1 § MAX(A) = 3 § AVG(A) = 8 / 4 = 2 § COUNT(*) = 5 § COUNT(A) = 4 A 1 2 NULL 2 3 § COUNT(DISTINCT A) = 3 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 133 Aggregatfunktionen § Beispiel: Maximale, minimale und durchschnittliche Semesteranzahl innerhalb Studenten der Physik 1 2 3 4 5 SELECT MAX ( Semester ) , MIN ( Semester ) , AVG ( Semester ) FROM Studenten WHERE Fach = ’ Physik ’ Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 134 Selektionsbedingungen § Selektionsbedingungen, in WHERE-Klausel, erlauben mehr als Vergleich zwischen Attribut und Konstante § Vergleichsoperatoren (=, <>, >, <, >=, <=) 1 2 3 SELECT Vorname , Name FROM Studenten WHERE Semester > 10 § Vergleiche zwischen Attributen 1 2 3 SELECT * FROM Bestellungen WHERE Bestelldatum = Lieferdatum Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 135 Selektionsbedingungen § Boole‘sche Operatoren (NOT, OR, AND) mit der Rangfolge NOT vor AND vor OR und ggf. Klammerung § Beispiel: Studenten weder von Informatik noch Physik SELECT * FROM Studenten WHERE Fach != ’ Informatik ’ AND Fach != ’ Physik ’ 1 2 3 oder 1 2 3 SELECT * FROM Studenten WHERE NOT ( Fach = ’ Informatik ’ OR Fach = ’ Physik ’) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 136 Mustervergleiche in Zeichenketten § Textuelle Attribute kann man mittels LIKE gegen ein Muster vergleichen; hierbei dient % als Platzhalter (wildcard) und repräsentiert kein oder mehrere Zeichen § Beispiel: Vorlesungen mit „Grundlagen“ im Titel 1 2 3 SELECT * FROM Vorlesungen WHERE Titel LIKE ’% Grundlagen % ’ wenn auch „Informatikgrundlagen“ gefunden werden soll 1 2 3 SELECT * FROM Vorlesungen WHERE LOWER ( Titel ) LIKE ’% grundlagen % ’ Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 137 Wertemengen § Mittels des Kommandos IN kann überprüft werden, ob der Wert eines Attributs in einer gegebenen Wertemenge liegt § Beispiel: Studenten mit Vornamen Max oder Moritz 1 2 3 SELECT * FROM Studenten WHERE Vorname IN ( ’ Max ’ , ’ Moritz ’) § Die Wertemenge darf auch mittels einer SQL-Unteranfrage bestimmt werden, dazu später mehr Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 138 2.5.2 Anfragen über mehrere Tabellen § SQL unterstützt verschiedene Kommandos, um zwei oder mehr Tabellen miteinander zu verknüpfen; hierzu werden mehrere Tabellen in der FROM-Klausel erwähnt und Joinprädikate in der WHERE-Klausel angegeben § SQL kennt zudem eine alternative Syntax, die dazu dient, Joinprädikate von Selektionsprädikaten zu trennen Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 139 Kartesisches Produkt § Kartesisches Produkt zweier Tabellen lässt sich durch deren Nennung in der FROM-Klausel oder durch Verwendung des CROSS JOIN Kommandos ermitteln § Beispiel: Kombinationen von Studenten und Professoren 1 2 SELECT * FROM Studenten , Professoren oder 1 2 SELECT * FROM Studenten CROSS JOIN Professoren Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 140 Natürlicher Join § Natürlicher Join zweier Tabellen lässt sich durch deren Nennung in der FROM-Klausel und Angabe der gemeinsamen Attribute in der WHERE-Klausel oder durch Verwendung des NATURAL JOIN Kommandos ermitteln § Beispiel: Vorlesungen mit zugehörigen Professoren SELECT * FROM Vorlesungen , Professoren WHERE Vorlesungen . PersNr = Professoren . PersNr 1 2 3 oder 1 2 SELECT * FROM Vorlesungen NATURAL JOIN Professoren Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 141 Allgemeiner Join § Allgemeiner Join zweier Tabellen lässt sich durch deren Nennung in der FROM-Klausel und Angabe des Joinprädikats in der WHERE-Klausel oder durch Verwendung des JOIN ON Kommandos ermitteln § Beispiel: Professoren und Studenten gleichen Namens 1 2 3 SELECT * FROM Professoren , Studenten WHERE Professoren . Name = Studenten . Name oder 1 2 3 4 SELECT FROM JOIN ON * Professoren Studenten Professoren . Name = Studenten . Name Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 142 Mengenoperationen § Die Kommandos UNION, INTERSECT und EXCEPT bilden die Mengenoperationen , ∩ und ab und dürfen nur auf Tabellen mit kompatiblen Schemata angewendet werden § Beispiel: Namen, die nur bei Studenten, aber nicht bei Professoren vorkommen 1 2 3 4 5 SELECT FROM EXCEPT SELECT FROM Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Name Studenten Name Professoren 143 Umbenennung § Taucht die gleiche Tabelle mehrfach in einem SQL Kommando auf, können die einzelnen Auftreten benannt werden § Beispiel: Paare von Studenten mit gleichem Fach 1 2 3 SELECT * FROM Studenten s1 , Studenten s2 WHERE s1 . Fach = s2 . Fach Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 144 Unteranfragen § SQL unterstützt Unteranfragen, d.h. eine SELECT Kommando kann häufig anstelle einer Tabelle oder einer Wertemenge verwendet werden § Beispiel: Studenten mit einem Vornamen, den es auch unter den Professoren gibt 1 2 3 SELECT * FROM Studenten WHERE Vorname IN ( SELECT Vorname FROM Professoren ) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 145 Umbenennung § SQL erlaubt die Umbenennung von Tabellen und Attributen; dies ist insbesondere dann nützlich, wenn die gleiche Tabelle mehrfach verwendet werden soll § Beispiel: Studenten, die eine gemeinsame Vorlesung hören 1 2 3 4 5 SELECT FROM WHERE AND AND DISTINCT s1 . Name AS StudentEins , s2 . Name AS StudentZwei Studenten s1 , h ö ren h1 , h ö ren h2 , Studenten s2 s1 . MatrNr = h1 . MatrNr h1 . VorlNr = h2 . VorlNr h2 . MatrNr = s2 . MatrNr Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 146 Äußere Joins § SQL unterstützt äußere Joins mittels der (LEFT|FULL|RIGHT) OUTER JOIN Kommandos § Beispiel: Professoren und Studenten mit gleichem Namen (bei Erhaltung aller Professoren) 1 2 3 SELECT * FROM Professoren LEFT OUTER JOIN Studenten ON Professoren . Name = Studenten . Name P.PersNr P.Vorname P.Name P.Fach S.MatrNr S.Vorname S.Name S.Semester 101101 231011 300128 478122 600321 Donald Albert Alfred Donald Carl Knuth Einstein Nobel Kossmann Gauss Informatik Informatik Chemie Informatik Mathematik 19882 Nora Nobel 3 18979 Gundula Gauss 1 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 147 2.5.3 Gruppierung & Aggregation § Aggregatfunktionen wurde bisher nur auf gesamte Tabellen angewendet; oft möchte man diese jedoch auf Gruppen von Tupeln anwenden § Beispiele: § Durchschnittliche Note je Vorlesung § Semesterwochenstunden je Professor § Anzahl der Studenten pro Fach Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 148 Gruppierung § Aggregatfunktionen lassen sich mittels des GROUP BY Kommandos auf Gruppen von Tupeln anwenden; dieses hat folgende allgemeine Form 1 2 3 4 5 6 SELECT FROM WHERE GROUP BY HAVING ORDER BY < Projektionsattribute > , < Aggregate > < Tabellen > < Bedingungen auf Attributen > < Gruppierattribute > < Bedingungen auf Aggregaten > < Sortierattribute > , < Aggregate > Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 149 Gruppierung § Tupel mit den gleichen Werten für die angegebenen Gruppierattribute bilden eine Gruppe, für die ein Wert der Aggregate berechnet wird § Beispiel: Fächer absteigend sortiert nach Anzahl Studenten 1 2 3 4 SELECT FROM GROUP BY ORDER BY Fach , Count (*) AS Anzahl Studenten Fach Anzahl DESC Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 150 Gruppierung § Beispiel: Anzahl Professoren eines Namens je Fach 1 2 3 SELECT Fach , Name , Count (*) FROM Professoren GROUP BY Fach , Name § Projektionsattribute sind in der Regel identisch mit den Gruppierattributen; sie müssen eine Teilmenge sein § Sortierattribute müssen eine Teilmenge von Gruppierattributen und Aggregaten sein Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 151 Gruppierung mit Selektion auf Attributen § Soll die Gruppierung nur solche Tupel berücksichtigen, deren Attribute eine bestimmte Bedingung erfüllen, so kann dies mittels einer WHERE-Klausel erreicht werden § Beispiel: Anzahl Professoren namens Meier je Fach 1 2 3 4 SELECT FROM WHERE GROUP BY Fach , Count (*) AS Anzahl Professoren Name = ’ Meier ’ Fach Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 152 Gruppierung mit Selektion auf Aggregaten § Soll die Gruppierung nur solche Tupel zurückliefern, deren Aggregate eine bestimmte Bedingung erfüllen, so kann dies mittels einer HAVING-Klausel erreicht werden § Beispiel: Fächer mit mehr als 10 Professoren 1 2 3 4 SELECT FROM GROUP BY HAVING Fach , Count (*) AS Anzahl Professoren Fach Anzahl > 10 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 153 Gruppierung mit Selektion § SQL-Anfrage kann sowohl eine WHERE-Klausel als auch eine HAVING-Klausel besitzen und es kann mehrere Aggregate geben § Beispiel: Anzahl Professoren in Fächern, die auf „ik“ enden und mehr als 5 Professoren haben, alphabetisch sortiert 1 2 3 4 5 6 SELECT FROM WHERE GROUP BY HAVING ORDER BY Datenbanken & Informationssysteme / Kapitel 2: Datenbanken Fach , COUNT (*) Professoren Fach LIKE ’% ik ’ Fach COUNT (*) > 5 Fach 154 Verarbeitung der Gruppierung § WHERE (d.h. betrachte nur Professoren, deren Fach auf „ik“ endet) § GROUP BY (d.h. gruppiere verbleibende Professoren nach Fach) § HAVING (d.h. eliminiere Fächer mit weniger als 5 Professoren) 1 § ORDER BY (d.h. sortiere verbleibende Fächer) 2 3 4 5 6 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken SELECT FROM WHERE GROUP BY HAVING ORDER BY Fach , COUNT (*) Professoren Fach LIKE ’% ik ’ Fach COUNT (*) > 5 Fach 155 Top-k Anfragen § Bei Bildung von Aggregaten sind wir häufig nur an einer bestimmten Anzahl von Tupeln mit höchstem oder niedrigstem Aggregatwert interessiert; dies lässt sich durch Verwendung des TOP (MS SQL Server) oder LIMIT Kommandos (SQLite) erzielen § Beispiel: 5 Fächer mit den meisten Professoren MS SQL Server: 1 2 3 4 SELECT FROM GROUP BY ORDER BY TOP 5 Fach , COUNT (*) AS Anzahl Professoren Fach Anzahl DESC Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 156 Top-k Anfragen § Beispiel: 5 Fächer mit den meisten Professoren SQLite: 1 2 3 4 5 SELECT FROM GROUP BY ORDER BY LIMIT Fach , COUNT (*) AS Anzahl Professoren Fach Anzahl DESC 5 Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 157 2.5.4 Quantifizierung § SQL unterstützt mittels der Kommandos EXISTS und NOT EXISTS den Existenzquantor und den Nichtexistenzquantor § Beispiel: Professoren zu denen es Studenten mit gleichem Vornamen gibt 1 2 3 4 SELECT * FROM Professoren p WHERE EXISTS ( SELECT * FROM Studenten s WHERE p . Vorname = s . Vorname ) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 158 Quantifizierung § Allquantor wird nicht explizit unterstützt; kann aber mittels des Nichtexistenzquantors ausgedrückt werden § Beispiel: Studenten, die alle Vorlesungen hören (d.h. es gibt keine Vorlesung, die der Student nicht hört) 1 2 3 4 5 6 7 8 9 10 SELECT * FROM Studenten s WHERE NOT EXISTS ( SELECT * FROM Vorlesungen v WHERE NOT EXISTS ( SELECT * FROM h ö ren WHERE s . MatrNr = h . MatrNr AND h . VorlNr = v . VorlNr )) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 159 Zusammenfassung § Structured Query Language (SQL) als standardisierte Anfragesprache für relationale Datenbanken § Data Query Language zum Formulieren von Anfragen (SELECT ... FROM ... WHERE ... ORDER BY ...) § mathematische Funktionen (z.B. ABS(A) und SIGN(A)) § Aggregatfunktionen (z.B. MIN(A) und SUM(A)) § Boole‘sche Operatoren (AND, OR, EXCEPT) § Verknüpfungen von mehreren Tabellen (JOINs) § Gruppierung (GROUP BY) § Quantifizierung (EXISTS) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 160 Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme – Eine Einführung, De Gruyter Oldenbourg, 2015 (Kapitel 4) [2] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 7 & 10) Datenbanken & Informationssysteme / Kapitel 2: Datenbanken 161