Datenbanksprache (SQL) Contents Pierre Fierz Datenbanksprache (SQL) Pierre Fierz Chapter 5 1 SQL Standard Datenbanksprache (SQL) SQL Standard 2 SQL-Query Syntax SQL-Query Syntax Relationale Operatoren Lecture Datenbanken 18.03.2014 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln Pierre Fierz 9 Insert-, Update- und Delete-Operationen Berner Fachhochschule Technik und Informatik 5.1 Die Lernziele dieses Kapitels. Datenbanksprache (SQL) 5.2 Outline Pierre Fierz Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard SQL Standard 2 SQL-Query Syntax 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 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.3 5.4 Datenbanksprache (SQL) SQL Standards Outline Pierre Fierz Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 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 2 SQL-Query Syntax Relationale Operatoren 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.5 SELECT Statement Datenbanksprache (SQL) 5.6 SELECT Statement (2) Pierre Fierz SQL Syntax (SELECT) Pierre Fierz SQL Syntax (SELECT cont.) 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>]] Datenbanksprache (SQL) 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.7 <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) Datenbanksprache (SQL) Outline Pierre Fierz Pierre Fierz 1 SQL Standard SQL Standard • 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. SQL Standard 2 SQL-Query Syntax SQL-Query Syntax Relationale Operatoren SQL-Query Syntax Relationale Operatoren 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen 5 Verbundoperationen ab SQL-92 Subqueries Subqueries Weitere Klauseln Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.9 Realtionale Operatoren Datenbanksprache (SQL) 5.10 Datenbanksprache (SQL) Die Selektion Pierre Fierz Pierre Fierz • Für die Selektion wird die WHERE-Klausel verwendet. 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 Alle geforderten Vergleichoperationen sind vorhanden SQL-Query Syntax Relationale Operatoren Selektion von Mitarbeitern Verbundoperationen in SQL-89 SQL Standard • Wir wollen alle Mitarbeiter selektieren, die Meier oder Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Schmid heissen und in Bern wohnen Verbundoperationen ab SQL-92 Operatoren und Funktionen SELECT * FROM Mitarbeiter WHERE (Name = ’Meier’ OR Ort = ’Bern’ Operatoren und Funktionen Subqueries Weitere Klauseln Name = ’Schmid’) AND Weitere Klauseln Insert-, Update- und Delete-Operationen Insert-, Update- und Delete-Operationen mNr 4 5 6 9 auch Rechenoperationen. 5.11 Subqueries 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 Datenbanksprache (SQL) Der natürliche Verbund Pierre Fierz Pierre Fierz • Für die (reine) Projektion wird die SELECT-Klausel • Der Natürliche Verbund kann mit dem Befehl NATURAL JOIN in der FROM-Klausel realisiert werden. 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. SELECT DISTINCT FROM SQL Standard Plz, Ort Mitarbeiter Plz 4007 3006 3012 3210 1012 1210 3601 8403 8012 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 Operatoren und Funktionen Selektion und einer Projektion verbunden. Operatoren und Funktionen Subqueries SELECT aNr, AName, mNr, Name FROM Mitarbeiter NATURAL JOIN Abteilung WHERE aName = ’A’ Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Ort Basel Bern Bern Biel Genf Lausanne Thun Winterthur Zuerich 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.13 Die Mengenoperationen Datenbanksprache (SQL) 5.14 Datenbanksprache (SQL) Beispiel Mengenoperationen Pierre Fierz Pierre Fierz Vereinigung von Mengen • 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 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 • 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’ SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen simmuliert werden. mNr 11 20 7 10 • EXCEPT kann mit Subqueries in der WHERE-Klausel simmuliert werden. 5.15 Name Eicher Bauer Glauser Glauser Ort Lausanne Winterthur Thun Thun Geburtsdatum 1998-04-11 1997-01-01 1969-06-05 1962-05-11 5.16 Datenbanksprache (SQL) Beispiel Mengenoperationen (2) Datenbanksprache (SQL) Umbennenung Pierre Fierz Pierre Fierz • Die Umbennenung ist notwendig, wenn in der FROM-Klausel dieselbe Tabelle mehrmals vorkommt. Durchschnitt von Mengen • In SQL kann dies mit einem Alias geschehen 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 • 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 Operatoren und Funktionen dem Namen ihres Vorgesetzten ausgeben Subqueries SELECT Weitere Klauseln Insert-, Update- und Delete-Operationen AName A C FROM WHERE SQL-Query Syntax Relationale Operatoren umbenannt. Verbundoperationen ab SQL-92 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.17 Datenbanksprache (SQL) Umbennenung (2) 5.18 SQL ist Codd-Vollständig Pierre Fierz Datenbanksprache (SQL) Pierre Fierz • Wir können einzelne Attribute mit Hilfe der SELECT-Klausel umbennenen. SQL Standard SQL Standard SQL-Query Syntax Mitarbeiter und Vorgesetzter • 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 ... SQL-Query Syntax • Wir haben gezeigt, dass alle Operationen der Relationale Operatoren Relationenalgebra in SQL existieren. Verbundoperationen in SQL-89 • In der FROM-Klausel kann ein SELECT-Statement Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Subqueries angegeben werden. • Also können die Operationen beliebig verschachtelt werden. Weitere Klauseln • Wir haben gezeigt: Weitere Klauseln Verbundoperationen ab SQL-92 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Die Sprache SQL ist Codd-Vollständig. Operatoren und Funktionen Subqueries Insert-, Update- und Delete-Operationen VName Jost Meyer Meier Dittrich 5.19 5.20 Datenbanksprache (SQL) Outline Datenbanksprache (SQL) Verbund SQL-89 Pierre Fierz Pierre Fierz • Die einzige Verbundoperation bis SQL-89 ist das 1 SQL Standard kartesische Produkt. • Die Join-Operationen werden alle mit dem kartesischen SQL Standard 2 SQL-Query Syntax SQL-Query Syntax Produkt gefolgt von einer Selektion realisiert. Relationale Operatoren 3 Relationale Operatoren Verbundoperationen ab SQL-92 Verbundoperationen in SQL-89 • Wir wollen den natürlichen Verbund von Abteilung und Weitere Klauseln Verbundoperationen ab SQL-92 Operatoren und Funktionen SELECT * FROM Abteilung A, Standort S WHERE A.aNr = S.aNr Subqueries 6 Operatoren und Funktionen Der natürliche Verbund Standort realisieren. Operatoren und Funktionen 5 Verbundoperationen ab SQL-92 SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 SQL Standard Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Insert-, Update- und Delete-Operationen 7 Subqueries aNr 1 1 1 1 2 2 3 3 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 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.21 Datenbanksprache (SQL) Verbund SQL-89 (2) • Man kann natürlich die Operation über beliebig viele Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard SQL Standard Verbund über mehrere Tabellen SQL-Query Syntax • Alle Mitarbeiter mit mNr, Name, Abteilung, pNr, PName, Abteilung des Projekts AName A D A C A A Relationale Operatoren 2 SQL-Query Syntax 3 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 SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 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 Name Meier Iselin Ackermann Ernst Dittrich Rohner Outline Pierre Fierz Tabellen bilden mNr 5 12 23 3 9 13 5.22 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries AName A A A A A A 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.23 5.24 Datenbanksprache (SQL) Verbund SQL-92 Datenbanksprache (SQL) Verbund SQL-92 (2) Pierre Fierz Pierre Fierz • Der Kommaoperator (kartesisches Produkt) existiert immer noch • Weitere Verbundoperationen können direkt in der Fromklausel angegeben werden. SQL Standard SQL Standard SQL-Query Syntax SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 SQL Syntax (JOIN) 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 • 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. Insert-, Update- und Delete-Operationen Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen 5.25 Datenbanksprache (SQL) Verbund SQL-92 (3) • Der Opearator NATURAL JOIN entspricht genau dem ./ • Die in der USING-Klausel angegebenen Felder müssen in SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 • Wir wollen den natürlichen Verbund von Abteilung und Standort realisieren. aNr 1 1 1 1 2 2 3 3 Operatoren und Funktionen beiden Tabellen vorkommen. • Mit Hilfe der USING-Klausel können Umbennenungen vermieden werden. AName A A A A B B C C ... 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 Subqueries SELECT * FROM Abteilung NATURAL JOIN Standort Pierre Fierz welche Attribute der Join ausgeführt werden soll. Operator in der relationalen Algebra. NATURAL JOIN Datenbanksprache (SQL) Verbund SQL-92 (4) • Mit der USING-Klausel kann angegeben werden, über Pierre Fierz • 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. 5.26 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen Standort Berlin Bern Genf Thun Bern Thun Berlin Bern 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 5.27 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) Datenbanksprache (SQL) Verbund SQL-92 (6) Pierre Fierz Pierre Fierz • Mit der ON-Klausel kann eine beliebige Bedingung für den • Beim Verbund erscheinen die Tupel, die keine Verbund angegeben werden. • Logisch wird das kartesische Produkt der Tabellen gebildet und mit der Bedingung “gefiltert”. SQL Standard SQL-Query Syntax Relationale Operatoren • Will man diese trotzdem im Resultat kann ein OUTER JOIN 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 Entsprechung in der anderen Tabelle besitzen nicht im Resultat. verwendet werden. Insert-, Update- und Delete-Operationen SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 • Im Resultat werden die nicht vorhandenen Attribute einfach auf NULL gesetzt. • LEFT OUTER JOIN ergänzt das Resultat mit allen Tupel Weitere Klauseln SQL Standard aus der linken Tabelle, die in der rechten Tabelle keine Entsprechung besitzen. • RIGHT OUTER JOIN ergänzt das Resultat mit allen Tupel 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. AName A B B B C D • Will man beide Seiten ergänzen kann dies mit FULL OUTER JOIN erreicht werden. 5.29 Datenbanksprache (SQL) Verbund SQL-92 (7) 5.30 Datenbanksprache (SQL) Verbund SQL-92 (8) Pierre Fierz Pierre Fierz • Hier ein Beispiel für LEFT JOIN • Hier ein Beispiel für RIGHT JOIN SQL Standard LEFT JOIN SQL Standard 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 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 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 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 5.31 Relationale Operatoren 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 Datenbanksprache (SQL) Outline Pierre Fierz Datenbanksprache (SQL) Ausdrücke • In SQL können in der SELECT- und in der WHERE-Klausel 1 SQL Standard Pierre Fierz auch Ausdrücke verwendet werden. • Standard SQL stellt eine Reihe von Arithmetischen-, SQL Standard 2 SQL-Query Syntax SQL-Query Syntax Relationale Operatoren 3 Relationale Operatoren • Die einzelnen Implementationen bieten oft noch weitere Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Verbundoperationen ab SQL-92 Operatoren und Funktionen Funktionalität an. Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 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 Subqueries 6 Operatoren und Funktionen String- und Datums-Funktionen zur Verfügung. 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 9 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.33 Datenbanksprache (SQL) Ausdrücke (2) 5.34 SIMILAR TO-Prädikat Pierre Fierz • Hier ein Beispiel für Stringfunktionen Pierre Fierz SQL Standard SQL Standard SQL-Query Syntax • Wir möchten alle Mitarbeiter deren Name mit ’mann’ einfache Vergleiche 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 • 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 Subqueries Standard. Weitere Klauseln Insert-, Update- und Delete-Operationen mNr 23 24 SQL-Query Syntax • In der Relationenalgebra basiert die Selektion nur auf Relationale Operatoren Stringfunktionen in SQL Datenbanksprache (SQL) Name Ackermann Bodenmann 5.35 • 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) Datenbanksprache (SQL) SIMILAR TO-Prädikat (2) Pierre Fierz 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%’ ’M_tter’ ’[CK]’, ’[A-Z]’ ’[^A-Z]’, ’[^M]%’ ’a|b’ ’[a-z]*’ ’[a-z]+’ SQL Standard SQL Standard SQL-Query Syntax Relationale Operatoren Suchen mit regulären Ausdrücken SQL-Query Syntax • Suchen von Mitarbeiter mit einem regulären Ausdruck Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SELECT mNr, Name FROM Mitarbeiter WHERE Name SIMILAR TO ’_*(s|ei|h)er’ Subqueries mNr 5 7 8 10 11 14 Weitere Klauseln Insert-, Update- und Delete-Operationen Name Meier Glauser Meier Glauser Eicher Glauser Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen ’(a|bc)*’ ’[0-9]*\%’ 5.37 SQL Built-In Funktionen Datenbanksprache (SQL) Pierre Fierz 5.38 Datenbanksprache (SQL) SQL Built-In Funktionen (2) • Bei den Funktionen SUM und AVG muss der Datentyp des Pierre Fierz Attributs numerisch sein. • 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. • Bei der Berechnung werden Tupel mit einem NULL-Wert SQL Standard SQL-Query Syntax Relationale Operatoren im entsprechenden Attribut nicht berücksichtigt. • Das heisst, AVG ist der Durchschnitt über alle Tupel die Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen keinen NULL-Wert im Attribut enthalten. Weitere Klauseln Insert-, Update- und Delete-Operationen 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 Subqueries SQL Standard 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 5.39 mit Chef 23 5.40 Datenbanksprache (SQL) SQL Built-In Funktionen (3) Outline Pierre Fierz Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 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 2 SQL-Query Syntax 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Mitarbeiter 6 SQL Standard Total % 102.38 Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.41 Datenbanksprache (SQL) Subqueries 5.42 Das Prädikat IN Pierre Fierz Datenbanksprache (SQL) 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 Standard SQL-Query Syntax Relationale Operatoren • Wir wollen die Abteilungen ausgeben, die mehr als 5 Verbundoperationen in SQL-89 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 SQL-Query Syntax Relationale Operatoren Verbundoperationen ab SQL-92 Verwendung von Subqueries SQL Syntax (IN) Insert-, Update- und Delete-Operationen ::= <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 AName A B 5.43 5.44 Datenbanksprache (SQL) Das Prädikat IN (2) Datenbanksprache (SQL) Das Prädikat IN (3) Pierre Fierz Verwendung von IN Pierre Fierz SQL Standard Verwendung von IN mit Subqueries 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 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 SQL-Query Syntax • Suchen aller Abteilungen die keinen Standort in ’Zuerich’ Verbundoperationen in SQL-89 SQL Standard haben Relationale Operatoren Verbundoperationen in SQL-89 SELECT aNr, AName FROM Abteilung A WHERE ’Zuerich’ NOT IN Subqueries Verbundoperationen ab SQL-92 ( SELECT Standort FROM Standort S WHERE A.aNr = S.aNr) Weitere Klauseln Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen aNr 1 2 5 AName A B E Insert-, Update- und Delete-Operationen 5.45 Datenbanksprache (SQL) Das Prädikat EXISTS 5.46 Outline Pierre Fierz Pierre Fierz • Das Prädikat EXISTS testet, ob in einer Tabelle 1 SQL Standard 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 Datenbanksprache (SQL) 2 SQL-Query Syntax 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Subqueries Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln Name Mueller Ernst Schmid Meier ... 9 Insert-, Update- und Delete-Operationen 5.47 5.48 Die ORDER BY-Klausel Datenbanksprache (SQL) Datenbanksprache (SQL) Die ORDER BY-Klausel (2) Pierre Fierz Pierre Fierz Mitarbeiter nach Name und Geburtsdatum 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 • Wir möchten Mitarbeiter sortiert nach Name und absteigend nach Geburtsdatum auslisten. Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen SELECT FROM WHERE ORDER BY mNr, Name, Geburtsdatum Mitarbeiter NAME SIMILAR TO ’(M|G)%’ Name, Geburtsdatum DESC Subqueries <orderby-klausel> ::= ORDER BY <attribut> [ASC|DESC], [<attribut> [ASC|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 Weitere Klauseln Insert-, Update- und Delete-Operationen 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.49 Die GROUP BY-Klausel Datenbanksprache (SQL) 5.50 Datenbanksprache (SQL) Die GROUP BY-Klausel (2) Pierre Fierz Pierre Fierz Wochenstunden pro Abteilung 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. Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 • Wir möchten pro Abteilung die geammten Arbeitsstunden, die an Projekten geleistet werden. Die Zeilen sollen absteigend nach Wochenstunden sortiert werden. SELECT FROM Operatoren und Funktionen • Dies sind die Felder, die in der GROUP BY Klausel Subqueries angegeben sind und • Resultate der SQL Built-in Funktionen COUNT, SUM, usw. Weitere Klauseln GROUP BY ORDER BY Insert-, Update- und Delete-Operationen 5.51 SQL Standard 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 Nullwerte Pierre Fierz Datenbanksprache (SQL) 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. • Wir möchten alle Projekte an denen mehr als 30 Stunden pro Woche gearbeitet wird. 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 • Null-Werte repräsentieren undefinierte oder unbekannte Werte. Relationale Operatoren Wochenstunden pro Projekt SELECT FROM GROUP BY HAVING SQL Standard SQL-Query Syntax Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen • 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 Subqueries Weitere Klauseln betrachtet. Insert-, Update- und Delete-Operationen STD 51 102 43 31 117 69 38 • 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.53 Datenbanksprache (SQL) Nullwerte (2) 5.54 Outline Pierre Fierz Datenbanksprache (SQL) Pierre Fierz 1 SQL Standard 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 2 SQL-Query Syntax 3 Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen 4 Verbundoperationen in SQL-89 5 Verbundoperationen ab SQL-92 Relationale Operatoren Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Pname CH-Be-44901 CH-Bs-30126 CH-Ge-68120 SQL-Query Syntax Verbundoperationen in SQL-89 Subqueries pNr 17 16 18 SQL Standard 6 Operatoren und Funktionen Insert-, Update- und Delete-Operationen Weitere Klauseln Insert-, Update- und Delete-Operationen 7 Subqueries 8 Weitere Klauseln 9 Insert-, Update- und Delete-Operationen 5.55 5.56 Datenbanksprache (SQL) INSERT INSERT 2 Pierre Fierz Datenbanksprache (SQL) Pierre Fierz SQL Syntax (INSERT) Neue Tabelle abfüllen <insert> ::= INSERT INTO <table> [(<attribut-list>)] <source> <source>::= VALUES (<literal-list>) | SELECT <attribut-list> FROM . . . [WHERE . . . ] usw. SQL Standard SQL Standard SQL-Query Syntax Relationale Operatoren Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Weitere Klauseln Insert-, Update- und Delete-Operationen • Der nächste Befehl fügt ein neues Projekt in die Datenbank ein. INSERT INTO VALUES CREATE TABLE Stunden ( aNr INTEGER, AName VARCHAR(30), Wochenstunden DOUBLE ) • Der nächste Befehl füllt nun die neue Tabelle. Subqueries Neues Projekt einfügen • Wir kreieren eine neue Tabelle Stunden. Projekt (pNr, PName, paNr, Standort) (’20’, ’CH-Bs998181’, 2, ’Basel’) 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.57 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) 5.58 UPDATE (2) Pierre Fierz Datenbanksprache (SQL) Pierre Fierz SQL Standard SQL Standard SQL-Query Syntax SQL-Query Syntax Relationale Operatoren Tabelle Stunden nachführen Verbundoperationen in SQL-89 Verbundoperationen ab SQL-92 Operatoren und Funktionen Subqueries Weitere Klauseln Insert-, Update- und Delete-Operationen • 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 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 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