Datenbanksprache (SQL) Pierre Fierz Chapter 5 Datenbanksprache (SQL) SQL Standard SQL-Query Syntax Relationale Operatoren Lecture Datenbanken 18.03.2014 Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Pierre Fierz Berner Fachhochschule Technik und Informatik 5.1 Contents Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.2 Die Lernziele dieses Kapitels. Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax Relationale Operatoren 1 Codd-Vollständigkeit von SQL 2 Syntax der Data Manipulation Language (DML) von SQL 3 Formulieren von korrekten SQL-Queries Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.3 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.4 Datenbanksprache (SQL) SQL Standards Pierre Fierz Jahr Name Kommentar SQL Standard 1986 1989 SQL-86 SQL-89 SQL-Query Syntax 1992 SQL-92 1999 SQL:1999 Erster ANSI Standard minor Revision herausgegeben als FIPS 127-1 (Federal Information Processing Standards) Major revision (ISO 9075). SQL-92 ist auch als SQL2 bekannt. Neu sind: rekursive Queries, objektorientierte Konzepte, reguläre Ausdücke, Triggers, prozedurale Elemente, nicht skalare Typen. SQL:1999 ist auch als SQL3 bekannt. Neu sind: XML Support, Sequenz Generatoren, Identity Felder XML Erweiterungen insbesondere die Möglichkeit XQuery im SQL-Code zu verwenden. INSTEAD OF Triggers, TRUNCATE Statement 2003 SQL:2003 2006 SQL:2006 2008 SQL:2008 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.5 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.6 SELECT Statement Datenbanksprache (SQL) Pierre Fierz SQL Syntax (SELECT) SQL Standard SQL-Query Syntax <selection> ::= <query> [UNION|INTERSECT|EXCEPT <query>]... [ORDER BY <attribut-list>] <query> ::= SELECT [ALL|DISTINCT] <sel-item> [,<sel-item>]... FROM <tableExpr> [[AS] <alias>] [,<tableExpr> [[AS] <alias>]]... [WHERE <conditional-expression>] [GROUP BY <attribut-list> [HAVING <conditional-expression>]] Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.7 SELECT Statement (2) Datenbanksprache (SQL) Pierre Fierz SQL Syntax (SELECT cont.) SQL Standard SQL-Query Syntax <sel-item> ::= [<table-name>|<alias>].<attribut-name> [[AS] <alias>] | {<table-name>|<alias>}.* |* | <sql-expression> <tableExpr>::= <joinExpr> | <nonjoinExpr> <nonjoinExpr> ::= <table-name> | (<selection>) [AS] <alias> Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.8 SELECT Statement (3) Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax • Die SELECT-Klausel bestimmt das Relationenschema des Resultats. Die einzelnen Felder sind entweder: • Attribute aus den Tabellen in der FROM-Klausel • Berechnungen mit Attributen und Konstanten. • Die FROM-Klausel definiert die Inputtabelle. • Es wird das Kartesische Produkt der einelnen “tableExpr” gebildet. • Die WHERE-Klausel ist ein Filter, der die gwünschten Tupel aus der Inputtabelle selektiert. Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.9 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.10 Realtionale Operatoren Datenbanksprache (SQL) Pierre Fierz SQL Standard • SQL ist eine Codd vollständige Sprache • Wir müssen zeigen, dass alle Operationen der Relationenalgebra in SQL existieren also • • • • • Selektion Projektion Natürlicher Verbund Mengenoperationen Umbennenung • SQL erlaubt aber noch mehr Operationen unter anderem SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen auch Rechenoperationen. 5.11 Datenbanksprache (SQL) Die Selektion Pierre Fierz • Für die Selektion wird die WHERE-Klausel verwendet. Alle geforderten Vergleichoperationen sind vorhanden SQL Standard SQL-Query Syntax Relationale Operatoren Selektion von Mitarbeitern • Wir wollen alle Mitarbeiter selektieren, die Meier oder Verbundoperationen in SQL-89 Schmid heissen und in Bern wohnen Verbundoperationen ab SQL-92 SELECT * FROM Mitarbeiter WHERE (Name = ’Meier’ OR Ort = ’Bern’ Operatoren und Funktionen Name = ’Schmid’) AND Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen mNr 4 5 6 9 Name Schmid Meier Meier Meier AhvNr 37828 61526 97923 82828 Plz 3006 3006 3006 3012 Ort Bern Bern Bern Bern Geschlecht M M W M Geburtsdatum 1949-02-24 1920-12-22 1924-03-11 1950-04-29 aNr 1 1 1 1 5.12 Datenbanksprache (SQL) Die Projektion Pierre Fierz • Für die (reine) Projektion wird die SELECT-Klausel verwendet • Damit es eine richtige Projektion ergibt muss das Keywort DISTINCT verwendet werden. • Die WHERE-Klausel kann weggelassen werden. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Beispiel Projektion Verbundoperationen ab SQL-92 • Wir wollen alle Paare von Postleitzahlen und Orte der Mitarbeiter bestimmen. Operatoren und Funktionen Subqueries SELECT DISTINCT FROM Plz, Ort Mitarbeiter Plz 4007 3006 3012 3210 1012 1210 3601 8403 8012 Weitere Klauseln Insert-, Update- und Delete-Operationen Ort Basel Bern Bern Biel Genf Lausanne Thun Winterthur Zuerich 5.13 Datenbanksprache (SQL) Der natürliche Verbund Pierre Fierz • Der Natürliche Verbund kann mit dem Befehl NATURAL JOIN in der FROM-Klausel realisiert werden. SQL Standard Mitarbeiter einer Abteilung SQL-Query Syntax • Wir möchten die Namen aller Mitarbeiter der Abteilung "A" bestimmen. • In diesem Beispiel wird der natürliche Verbund mit einer Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Selektion und einer Projektion verbunden. Operatoren und Funktionen SELECT aNr, AName, mNr, Name FROM Mitarbeiter NATURAL JOIN Abteilung WHERE aName = ’A’ Subqueries aNr 1 1 1 1 1 1 1 AName A A A A A A A mNr 1 5 9 13 14 15 22 Weitere Klauseln Insert-, Update- und Delete-Operationen Name Müller Meier Dittrich Rohner Glauser Jost Bieri 5.14 Die Mengenoperationen Datenbanksprache (SQL) Pierre Fierz • Im Standard sind die folgenden Mengenoperationen vorgesehen • UNION: Vereinigung zweier Mengen • INTERSECT: Durchschnitt zweier Mengen • EXCEPT: Mengendifferenz • Die Operationen sind nur auf kompatiblen Tabellen erlaubt SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen • Die Operationen INTERSECT und EXCEPT sind nicht immer Implementiert. • INTERSECT kann mit dem JOIN . . . USING Konstrukt Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen simmuliert werden. • EXCEPT kann mit Subqueries in der WHERE-Klausel simmuliert werden. 5.15 Datenbanksprache (SQL) Beispiel Mengenoperationen Pierre Fierz Vereinigung von Mengen SQL Standard • Die folgende Abfrage vereinigt alle Mitarbeiter die in Thun wohnen mit den Mitarbeitern die nach dem 1.1.1995 geboren wurden. SELECT FROM WHERE UNION SELECT FROM WHERE mNr, Name, Ort, Geburtsdatum Mitarbeiter Ort = ’Thun’ mNr, Name, Ort, Geburtsdatum Mitarbeiter Geburtsdatum >= DATE’1995-01-01’ mNr 11 20 7 10 Name Eicher Bauer Glauser Glauser Ort Lausanne Winterthur Thun Thun SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Geburtsdatum 1998-04-11 1997-01-01 1969-06-05 1962-05-11 5.16 Beispiel Mengenoperationen (2) Datenbanksprache (SQL) Pierre Fierz Durchschnitt von Mengen SQL Standard • Wir suchen alle Abteilungen, die Sowohl Standort Bern SQL-Query Syntax wie auch Standort Berlin haben. Relationale Operatoren SELECT FROM Verbundoperationen in SQL-89 * Abteilung NATURAL JOIN (SELECT aNr FROM Standort WHERE Standort = ’Bern’ INTERSECT SELECT aNr FROM Standort WHERE Standort = ’Berlin’) A aNr 1 3 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen AName A C 5.17 Datenbanksprache (SQL) Umbennenung Pierre Fierz • Die Umbennenung ist notwendig, wenn in der FROM-Klausel dieselbe Tabelle mehrmals vorkommt. • In SQL kann dies mit einem Alias geschehen • Mit einem Alias werden alle Attribute einer Tabelle Verbundoperationen in SQL-89 Mitarbeiter und Vorgesetzter Verbundoperationen ab SQL-92 • Wir wollen die Nummer und die Namen der Mitarbeiter mit dem Namen ihres Vorgesetzten ausgeben FROM WHERE SQL-Query Syntax Relationale Operatoren umbenannt. SELECT SQL Standard M.mNr, M.Name, M.Vorgesetzer, V.Name AS VName Mitarbeiter M, Mitarbeiter V M.Vorgesetzter = V.mNr mNr 23 6 20 22 Name Ackermann Albrecht Bauer Bieri Vorgesetzter 15 2 8 9 ... Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen VName Jost Meyer Meier Dittrich 5.18 Datenbanksprache (SQL) Umbennenung (2) Pierre Fierz • Wir können einzelne Attribute mit Hilfe der SELECT-Klausel umbennenen. SQL Standard SQL-Query Syntax Mitarbeiter und Vorgesetzter Relationale Operatoren • Wir wollen die Nummer und die Namen der Mitarbeiter mit dem Namen ihres Vorgesetzten ausgeben SELECT mNr, Name, Vorgesetzer, VName FROM Mitarbeiter NATURAL JOIN (SELECT mNr AS Vorgesetzter, Name AS VName FROM Mitarbeiter) M mNr 23 6 20 22 Name Ackermann Albrecht Bauer Bieri Vorgesetzter 15 2 8 9 ... Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen VName Jost Meyer Meier Dittrich 5.19 SQL ist Codd-Vollständig Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax • Wir haben gezeigt, dass alle Operationen der Relationenalgebra in SQL existieren. • In der FROM-Klausel kann ein SELECT-Statement Relationale Operatoren Verbundoperationen in SQL-89 angegeben werden. • Also können die Operationen beliebig verschachtelt werden. Verbundoperationen ab SQL-92 • Wir haben gezeigt: Weitere Klauseln Die Sprache SQL ist Codd-Vollständig. Operatoren und Funktionen Subqueries Insert-, Update- und Delete-Operationen 5.20 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.21 Datenbanksprache (SQL) Verbund SQL-89 Pierre Fierz • Die einzige Verbundoperation bis SQL-89 ist das kartesische Produkt. • Die Join-Operationen werden alle mit dem kartesischen Produkt gefolgt von einer Selektion realisiert. SQL Standard SQL-Query Syntax Relationale Operatoren Der natürliche Verbund Verbundoperationen in SQL-89 • Wir wollen den natürlichen Verbund von Abteilung und Standort realisieren. Verbundoperationen ab SQL-92 Operatoren und Funktionen SELECT * FROM Abteilung A, Standort S WHERE A.aNr = S.aNr Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen aNr 1 1 1 1 2 2 3 3 AName A A A A B B C C aNr 1 1 1 1 2 2 3 3 Standort Berlin Bern Genf Thun Bern Thun Berlin Bern ... 5.22 Datenbanksprache (SQL) Verbund SQL-89 (2) • Man kann natürlich die Operation über beliebig viele Pierre Fierz Tabellen bilden SQL Standard Verbund über mehrere Tabellen SQL-Query Syntax • Alle Mitarbeiter mit mNr, Name, Abteilung, pNr, PName, Abteilung des Projekts Verbundoperationen in SQL-89 SELECT M.mNr, Name, A.AName, P.pNr, PName, PA.AName FROM Mitarbeiter M, Abteilung A, MitProj MP, Projekt P, Abteilung PA WHERE M.aNr = A.aNr AND M.mNr = MP.mNr AND MP.pNr = P.pNr AND P.paNr = PA.aNr mNr 5 12 23 3 9 13 Name Meier Iselin Ackermann Ernst Dittrich Rohner AName A D A C A A Relationale Operatoren pNr 1 1 1 2 2 2 ... PName D-Be-700011 D-Be-700011 D-Be-700011 CH-Ge-90122 CH-Ge-90122 CH-Ge-90122 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen AName A A A A A A 5.23 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.24 Verbund SQL-92 Datenbanksprache (SQL) Pierre Fierz • Der Kommaoperator (kartesisches Produkt) existiert immer noch SQL Standard • Weitere Verbundoperationen können direkt in der Fromklausel angegeben werden. SQL Syntax (JOIN) SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 <joinExpr> ::= <tableExpr> [NATURAL] [<jointype>] JOIN <tableExpr> [ON <conditional-expression> | USING (<attribut-list>)] <jointype> ::= INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.25 Verbund SQL-92 (2) Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax • Hier noch einige Einschränkungen: • Falls NATURAL angegeben ist, so kann weder eine ONnoch eine USING-Klausel angegeben werden. • Falls kein NATURAL angegeben ist, so muss entweder eine ON-Klausel oder eine USING-Klausel angegeben werden. • Falls kein <jointype> angegeben ist, wird defaultmässig INNER angenommen. Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.26 Datenbanksprache (SQL) Verbund SQL-92 (3) • Der Opearator NATURAL JOIN entspricht genau dem ./ Operator in der relationalen Algebra. • Der Join wird über alle Attribute mit gleichem Namen durchgeführt. • Im Gegensatz zum kartesischen Produkt kommen die gemeinsamen Attribute im Resultat nur einmal vor. Pierre Fierz SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 NATURAL JOIN Verbundoperationen ab SQL-92 • Wir wollen den natürlichen Verbund von Abteilung und Standort realisieren. Subqueries SELECT * FROM Abteilung NATURAL JOIN Standort aNr 1 1 1 1 2 2 3 3 Operatoren und Funktionen AName A A A A B B C C ... Weitere Klauseln Insert-, Update- und Delete-Operationen Standort Berlin Bern Genf Thun Bern Thun Berlin Bern 5.27 Datenbanksprache (SQL) Verbund SQL-92 (4) • Mit der USING-Klausel kann angegeben werden, über Pierre Fierz welche Attribute der Join ausgeführt werden soll. • Die in der USING-Klausel angegebenen Felder müssen in beiden Tabellen vorkommen. • Mit Hilfe der USING-Klausel können Umbennenungen vermieden werden. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 JOIN USING • Wir suchen alle Paare von Mitarbeitern, die gemeinsam an einem Projekt mitarbeiten Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries SELECT m1.mNr, m2.mNr, pNr FROM MitProj m1 JOIN MitProj m2 USING(pNr) WHERE m1.mNr < m2.mNr mNr 5 5 12 3 3 9 13 mNr 12 23 23 9 13 23 23 ... Weitere Klauseln Insert-, Update- und Delete-Operationen pNr 1 1 1 2 2 2 2 5.28 Datenbanksprache (SQL) Verbund SQL-92 (5) Pierre Fierz • Mit der ON-Klausel kann eine beliebige Bedingung für den Verbund angegeben werden. • Logisch wird das kartesische Produkt der Tabellen gebildet und mit der Bedingung “gefiltert”. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 JOIN ON • Wir wollen die Projekte am Standort ’Bern’ mit dem Verbundoperationen ab SQL-92 Namen der führenden Abteilung ausgeben Operatoren und Funktionen SELECT p.pNr, PName, AName FROM Projekt JOIN Abteilung a ON paNr = a.aNr AND PStandort = ’Bern’ Subqueries pNr 3 11 13 16 7 9 PName CH-BE-10110 CH-Be-80073 CH-Be-11028 BE-771820 CH-Be-89011 CH-Be-41065 Weitere Klauseln Insert-, Update- und Delete-Operationen AName A B B B C D 5.29 Verbund SQL-92 (6) Datenbanksprache (SQL) Pierre Fierz • Beim Verbund erscheinen die Tupel, die keine Entsprechung in der anderen Tabelle besitzen nicht im Resultat. • Will man diese trotzdem im Resultat kann ein OUTER JOIN verwendet werden. • Im Resultat werden die nicht vorhandenen Attribute einfach auf NULL gesetzt. • LEFT OUTER JOIN ergänzt das Resultat mit allen Tupel aus der linken Tabelle, die in der rechten Tabelle keine Entsprechung besitzen. • RIGHT OUTER JOIN ergänzt das Resultat mit allen Tupel SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen aus der rechten Tabelle, die in der linken Tabelle keine Entsprechung besitzen. • Will man beide Seiten ergänzen kann dies mit FULL OUTER JOIN erreicht werden. 5.30 Datenbanksprache (SQL) Verbund SQL-92 (7) Pierre Fierz • Hier ein Beispiel für LEFT JOIN SQL Standard LEFT JOIN SQL-Query Syntax • Wir wollen alle Mitarbeiter aus Biel mit ihren Projekten ausgeben. Mitarbeiter ohne Projekte sollen auch in der Tabelle erscheinen. SELECT mNr, Name, pNr, PName FROM Mitarbeiter NATURAL LEFT JOIN MitProj NATURAL LEFT JOIN Projekt WHERE Ort = ’Biel’ Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen mNr 13 13 15 15 15 21 22 Name Rohner Rohner Jost Jost Jost Kromer Bieri pNr 2 3 3 5 9 NULL NULL PName CH-Ge-90122 CH-BE-10110 CH-BE-10110 D-Be-55023 CH-Be-41065 NULL NULL 5.31 Datenbanksprache (SQL) Verbund SQL-92 (8) Pierre Fierz • Hier ein Beispiel für RIGHT JOIN SQL Standard SQL-Query Syntax LEFT JOIN • Wir möchten die Projekte der Abteilung 5 mit den Mitarbeitern. Projekte ohne Mitarbeiter sollen auch in der Tabelle erscheinen. SELECT mNr, Name, pNr, PName FROM Mitarbeiter NATURAL RIGHT JOIN MitProj NATURAL RIGHT JOIN Projekt WHERE paNr = 5 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen mNr 3 11 24 18 NULL Name Ernst Eicher Bodenmann Wittwer NULL pNr 14 14 14 15 18 PName CH-Ge-76095 CH-Ge-76095 CH-Ge-76095 CH-Bs-16028 CH-Ge-68120 5.32 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.33 Datenbanksprache (SQL) Ausdrücke • In SQL können in der SELECT- und in der WHERE-Klausel Pierre Fierz auch Ausdrücke verwendet werden. • Standard SQL stellt eine Reihe von Arithmetischen-, String- und Datums-Funktionen zur Verfügung. • Die einzelnen Implementationen bieten oft noch weitere Funktionalität an. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Rechnen in SQL • Wir möchten die Wochenstunden des Mitarbeiters Operatoren und Funktionen Nummer 1 in Prozente ausgedrückt haben Subqueries SELECT mNr, Name, ROUND(100.0 / AS ’Anteil in FROM Mitarbeiter NATURAL JOIN NATURAL JOIN WHERE mNr = 1 Insert-, Update- und Delete-Operationen mNr 1 1 Name Mueller Mueller Anteil in % 11.90 4.76 42.0 * Wochenstunden) \%’, PName MitProj Projekt Weitere Klauseln PName D-Be-55023 CH-Be-41065 5.34 Datenbanksprache (SQL) Ausdrücke (2) Pierre Fierz • Hier ein Beispiel für Stringfunktionen SQL Standard SQL-Query Syntax Relationale Operatoren Stringfunktionen in SQL • Wir möchten alle Mitarbeiter deren Name mit ’mann’ Verbundoperationen in SQL-89 endet. Verbundoperationen ab SQL-92 SELECT mNr, Name FROM Mitarbeiter WHERE SUBSTRING(Name, CHAR_LENGHT(Name)-3, 4) = ’mann’ Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen mNr 23 24 Name Ackermann Bodenmann 5.35 SIMILAR TO-Prädikat Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax • In der Relationenalgebra basiert die Selektion nur auf einfache Vergleiche • SQL erlaubt weitergehende Prädikate • Insbesondere können mit dem SIMILAR TO Prädikat reguläre Ausdrücke verwendet werden. • Leider ist der sql Standard verschieden vom POSIX Standard. • Mysql unterstützt den vollen POSIX-Standard. Das Prädikat heisst aber RLIKE. Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.36 Datenbanksprache (SQL) SIMILAR TO-Prädikat (2) Pierre Fierz Platzhalter für das Prädikat SIMILAR TO Platzhalter % _ [] [^ ] | * + () \ Bedeutung Beliebige Zeichenkette, auch die leere Einzelzeichen Alternativen oder Bereich Negation Oder Wiederholung, auch 0 mal Wiederholung, mindestens 1 mal Gruppierung Escape Zeichen Beispiel ’M%’ SQL Standard ’M_tter’ ’[CK]’, ’[A-Z]’ ’[^A-Z]’, ’[^M]%’ ’a|b’ ’[a-z]*’ ’[a-z]+’ Verbundoperationen in SQL-89 SQL-Query Syntax Relationale Operatoren Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen ’(a|bc)*’ ’[0-9]*\%’ 5.37 Datenbanksprache (SQL) SIMILAR TO-Prädikat (2) Pierre Fierz SQL Standard Suchen mit regulären Ausdrücken • Suchen von Mitarbeiter mit einem regulären Ausdruck SELECT mNr, Name FROM Mitarbeiter WHERE Name SIMILAR TO ’_*(s|ei|h)er’ mNr 5 7 8 10 11 14 Name Meier Glauser Meier Glauser Eicher Glauser SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.38 SQL Built-In Funktionen Datenbanksprache (SQL) Pierre Fierz • SQL kennt eine Reihe von Built-in Funktionen, die auf ein Attribut einer Relation wirken. COUNT(*)|COUNT(<attribut-name>) Gibt die Anzahl Tupel in einer Relation zurück. Falls ein Attributname angegeben ist, so werden nur die Tupel gezählt, für die der entsprechende Attributwert nicht NULL ist. SUM(<attribut-name>) Berechnet die Summe des Attributs über alle Tupel. AVG(<attribut-name>) Berechnet den Durchschnitt des Attributs über alle Tupel. MAX(<attribut-name>) Bestimmt den maximalen Wert des Attributs über alle Tupel. MIN(<attribut-name>) Bestimmt den minimalen Wert des Attributs über alle Tupel. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.39 Datenbanksprache (SQL) SQL Built-In Funktionen (2) • Bei den Funktionen SUM und AVG muss der Datentyp des Pierre Fierz Attributs numerisch sein. • Bei der Berechnung werden Tupel mit einem NULL-Wert im entsprechenden Attribut nicht berücksichtigt. • Das heisst, AVG ist der Durchschnitt über alle Tupel die keinen NULL-Wert im Attribut enthalten. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Zählen von Tuple • Wir wollen die Anzahl Mitarbeiter und die Anzahl Mitarbeiter, die einen Vorgesetzten haben bestimmen. Falls der Mitarbeiter keinen Vorgesetzten hat, so ist das Feld “Vorgesetzter” NULL. Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen SELECT COUNT(*) AS Mitarbeiter, COUNT(Vorgesetzter) AS ’mit Chef’ FROM Mitarbeiter Mitarbeiter 24 mit Chef 23 5.40 Datenbanksprache (SQL) SQL Built-In Funktionen (3) Pierre Fierz SQL Standard Summieren von Werten SQL-Query Syntax • Wir wollen Zusammenzählen wie viel Prozent alle Mitarbeiter zusammen am Projekt 5 arbeiten und wie viele Mitarbeiter daran arbeiten SELECT COUNT(*) AS Mitarbeiter, SUM(42.0 / 100.0 * Wochenstunden) AS ’Total %’ FROM MitProj WHERE pNr = 5 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Mitarbeiter 6 Total % 102.38 5.41 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.42 Datenbanksprache (SQL) Subqueries Pierre Fierz • In der WHERE-Klausel können Subqueries verwendet werden • Subqueries werden dazu verwendet, einen Wert oder eine Menge von Werten aufzubauen und zu fragen, ob ein gegebenes Feld dem Wert entspricht oder in der Menge vorhanden ist. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Verwendung von Subqueries • Wir wollen die Abteilungen ausgeben, die mehr als 5 Operatoren und Funktionen Subqueries Mitarbeiter haben. Weitere Klauseln SELECT aNr, AName FROM Abteilung A WHERE (SELECT COUNT(*) FROM Mitarbeiter M WHERE M.aNr = A.aNr) > 5 aNr 1 2 Insert-, Update- und Delete-Operationen AName A B 5.43 Das Prädikat IN Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL Syntax (IN) SQL-Query Syntax Relationale Operatoren ::= <row value> [NOT] IN <list> ::= (<row value> [,<row value>]...) | (<subquery>) <row value> ::= <row element> | (<row element> [,<row element>]...) <row element> ::= <literal> | <attribut-name> <in-predikat> <list> Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.44 Datenbanksprache (SQL) Das Prädikat IN (2) Pierre Fierz Verwendung von IN SQL Standard SQL-Query Syntax • Suchen nach mehreren Plz, Ort Kombinationen SELECT mNr, Name, Plz, Ort FROM Mitarbeiter WHERE (Plz, Ort) IN ((’3006’,’Bern’),(’3601’,’Thun’),(’1012’,’Genf’)) Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen mNr 2 4 5 6 7 10 16 17 23 Name Meyer Schmid Meier Albrecht Glauser Glauser Grossnicklaus Zehnder Ackermann Plz 3006 3006 3006 3006 3601 3601 1012 1012 1012 Ort Bern Bern Bern Bern Thun Thun Genf Genf Genf Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.45 Datenbanksprache (SQL) Das Prädikat IN (3) Pierre Fierz Verwendung von IN mit Subqueries SQL Standard SQL-Query Syntax • Suchen aller Abteilungen die keinen Standort in ’Zuerich’ haben Relationale Operatoren Verbundoperationen in SQL-89 SELECT aNr, AName FROM Abteilung A WHERE ’Zuerich’ NOT IN Verbundoperationen ab SQL-92 ( SELECT Standort FROM Standort S WHERE A.aNr = S.aNr) Operatoren und Funktionen Subqueries Weitere Klauseln aNr 1 2 5 AName A B E Insert-, Update- und Delete-Operationen 5.46 Datenbanksprache (SQL) Das Prädikat EXISTS Pierre Fierz • Das Prädikat EXISTS testet, ob in einer Tabelle mindestens ein Tupel vorhanden ist. • Die werte innerhalb des Tupels spielen dabei keine Rolle. SQL Standard SQL-Query Syntax Relationale Operatoren Verwendung von EXITS • Wir Suchen die Mitarbeiter, die an keinem Projekt der Abteilung 2 arbeiten SELECT mNr, Name FROM Mitarbeiter M WHERE NOT EXISTS (SELECT * FROM MitProj MP NATURAL JOIN Projekt P WHERE M.mNr = MP.mNr AND paNr = 2) mNr 1 3 4 5 Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Name Mueller Ernst Schmid Meier ... 5.47 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.48 Die ORDER BY-Klausel Datenbanksprache (SQL) Pierre Fierz SQL Standard • In einer Relation ist für die Tupel keine Ordnung vorgegeben. • Mit Hilfe der ORDER BY Klausel kann eine gewünschte Reihenfolge erzwungen werden. SQL Syntax (ORDER BY) SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries <orderby-klausel> ::= ORDER BY <attribut> [ASC|DESC], [<attribut> [ASC|DESC]]. . . Weitere Klauseln Insert-, Update- und Delete-Operationen 5.49 Datenbanksprache (SQL) Die ORDER BY-Klausel (2) Pierre Fierz Mitarbeiter nach Name und Geburtsdatum • Wir möchten Mitarbeiter sortiert nach Name und absteigend nach Geburtsdatum auslisten. SELECT FROM WHERE ORDER BY mNr, Name, Geburtsdatum Mitarbeiter NAME SIMILAR TO ’(M|G)%’ Name, Geburtsdatum DESC SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries mNr 14 7 10 16 5 8 2 1 Name Glauser Glauser Glauser Grossnicklaus Meier Meier Meyer Mueller Geburtsdatum 1973-07-01 1969-06-05 1962-05-11 1972-03-07 1980-12-22 1978-08-15 1971-02-28 1965-07-11 Weitere Klauseln Insert-, Update- und Delete-Operationen 5.50 Die GROUP BY-Klausel Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax • Die GROUP BY Klausel fasst Tupel, die in den angegebenen Attributen übereinstimmen zu einem einzigen Tupel zusammen. • In der SELECT Klausel dürfen dann nur Felder angegeben werden, die für die ganze Gruppe denselben Wert haben. • Dies sind die Felder, die in der GROUP BY Klausel angegeben sind und • Resultate der SQL Built-in Funktionen COUNT, SUM, usw. Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.51 Datenbanksprache (SQL) Die GROUP BY-Klausel (2) Pierre Fierz Wochenstunden pro Abteilung SQL Standard • Wir möchten pro Abteilung die geammten Arbeitsstunden, die an Projekten geleistet werden. Die Zeilen sollen absteigend nach Wochenstunden sortiert werden. SELECT FROM GROUP BY ORDER BY aNr, AName, SUM(Wochenstunden) AS STD MitProj NATURAL JOIN Projekt JOIN Abteilung A ON paNr = A.aNr aNr, AName STD DESC aNr 1 4 2 3 5 AName A D B C E STD 181 130 122 97 29 SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.52 Datenbanksprache (SQL) Die HAVING-Klausel Pierre Fierz • Die HAVING Klausel ist die Selektionsklausel für Gruppen. • Sie kann nur in Verbindung mit einer GROUP BY Klausel SQL Standard angegeben werden. SQL-Query Syntax Relationale Operatoren Wochenstunden pro Projekt • Wir möchten alle Projekte an denen mehr als 30 Stunden pro Woche gearbeitet wird. SELECT FROM GROUP BY HAVING pNr, PName, SUM(Wochenstunden) AS STD MitProj NATURAL JOIN Projekt pNr, PName STD >= 30 pNr 2 3 5 7 9 11 12 Pname CH-Ge-90122 CH-BE-10110 D-Be-55023 CH-Be-89011 CH-Be-41065 CH-Be-80073 CH-Th-99045 Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen STD 51 102 43 31 117 69 38 5.53 Nullwerte Datenbanksprache (SQL) Pierre Fierz SQL Standard • Null-Werte repräsentieren undefinierte oder unbekannte Werte. • Der Vergleich von NULL mit einem anderen Wert ist immer falsch. • Auch der Vergleich von zwei Null-Werten ist immer falsch. • Ausnahmen von dieser Regel sind der INTERSECT und der EXCEPT Befehl. Dort werden zwei Null-Werte als gleich betrachtet. • Mit dem Prädikat IS [NOT] NULL ist es hingegen möglich, abzufragen, ob der Wert eines Attributes NULL ist oder SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen nicht. 5.54 Datenbanksprache (SQL) Nullwerte (2) Pierre Fierz SQL Standard Wochenstunden pro Projekt SQL-Query Syntax • Wir möchten alle Projekte an denen keine Mitarbeiter arbeiten. SELECT pNr, PName FROM MitProj NATURAL RIGHT JOIN Projekt WHERE mNr IS NULL Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln pNr 17 16 18 Pname CH-Be-44901 CH-Bs-30126 CH-Ge-68120 Insert-, Update- und Delete-Operationen 5.55 Outline Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 2 SQL-Query Syntax 3 Relationale Operatoren SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries 6 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.56 Datenbanksprache (SQL) INSERT Pierre Fierz SQL Syntax (INSERT) <insert> ::= INSERT INTO <table> [(<attribut-list>)] <source> <source>::= VALUES (<literal-list>) | SELECT <attribut-list> FROM . . . [WHERE . . . ] usw. SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Neues Projekt einfügen Weitere Klauseln Insert-, Update- und Delete-Operationen • Der nächste Befehl fügt ein neues Projekt in die Datenbank ein. INSERT INTO VALUES Projekt (pNr, PName, paNr, Standort) (’20’, ’CH-Bs998181’, 2, ’Basel’) 5.57 INSERT 2 Datenbanksprache (SQL) Pierre Fierz Neue Tabelle abfüllen SQL Standard • Wir kreieren eine neue Tabelle Stunden. CREATE TABLE Stunden ( aNr INTEGER, AName VARCHAR(30), Wochenstunden DOUBLE ) • Der nächste Befehl füllt nun die neue Tabelle. INSERT INTO Stunden (aNr, AName, Wochenstunden) SELECT paNr, AName, SUM(Wochenstunden) FROM MitProj NATURAL JOIN Projekt JOIN Abteilung A ON paNr = A.aNr GROUP BY paNr SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.58 UPDATE SQL Syntax (UPDATE) ::= UPTATE <table-name> SET <assignment-list> [WHERE <conditional-expression>] <assignment-list> ::= <attribut> = <value> [,<attribut> = <value>]. . . <value> ::= literal | <expression> | (<subselect>) <update> Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Mitarbeiter ändern • Der nächste Befehl ändert das Geburtsdatum des Mitarbeiters mit Nummer 5 UPDATE Mitarbeiter SET Geburtsdatum = Geburtsdatum + INTERVAL 1 DAY WHERE mNr = 5 5.59 UPDATE (2) Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL-Query Syntax Tabelle Stunden nachführen • Der nächste Befehl führt die neue Tabelle ’Stunden’ nach. UPDATE Stunden S SET Wochenstunden = (SELECT SUM(Wochenstunden) FROM MitProj NATURAL JOIN Projekt JOIN Abteilung ON paNr = aNr WHERE aNr = S.aNr) Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.60 DELETE Datenbanksprache (SQL) Pierre Fierz SQL Syntax (DELETE) SQL Standard <delete> ::= DELETE FROM <tablename> [WHERE <conditional-expression>] SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Abteilung löschen • Der nächste Befehl löscht die Abteilung mit Nummer 5 aus der Datenbank. • Der Befehl wird nur durchgeführt, wenn keine Projekte und Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen keine Mitarbeiter zu dieser Abteilung gehören. DELETE FROM Abteilung WHERE aNr = 5 5.61