Web Science & Technologies University of Koblenz Landau, Germany. Grundlagen der Datenbanken. SQL Teil 2. Dr. Jérôme Kunegis Wintersemester 2013/14

Ähnliche Dokumente
Kapitel 8 Dr. Jérôme Kunegis. SQL Continued. WeST Institute for Web Science & Technologies

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)

Web Science & Technologies University of Koblenz Landau, Germany. Grundlagen der Datenbanken SQL. Dr. Gerd Gröner Wintersemester 2013/14

Fortsetzung: Projektion Selektion. NULL Werte

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Kapitel 5 Dr. Jérôme Kunegis. SQL: Grundlagen. WeST Institut für Web Science & Technologien

Datenbanksysteme Vorlesung vom noch Kapitel 7: SQL. Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Es wird empfohlen folgendes Material anzusehen:

Datenbanksysteme SS 2007

Relationale Abfragesprachen

Rückblick. SQL bietet viele Möglichkeiten zur Anfrageformulierung

Datenmodellierung. VU , SS 2016 Relationale Abfragesprachen SQL. Nysret Musliu, Sebastian Skritek

Aufgabensammlung SQL SW4 1. Einfache Anfragen

Datenbanksysteme 2013

Informatik für Ökonomen II: Datenintegrität. Prof. Dr. Carl-Christian Kanne

Vorlesung Datenbanksysteme vom

SQL als Zugriffssprache

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

Seminar 1 SQL Abfragen DML. MatrNr Name Vorname Age Gruppe Schmidt Hans Meisel Amelie

SQL 2. Ziele. Fortgeschrittene SQL-Konstrukte. Aggregatfunktionen revisited. Subqueries. Korrelierte Subqueries

Grundlagen des relationalen Modells

Wiederholung VU Datenmodellierung

Das relationale Modell

dbis Praktikum DBS I SQL Teil 2

Grundlagen des relationalen Modells

Datenbanken. Datenintegrität + Datenschutz. Tobias Galliat. Sommersemester 2012

Microsoft SQL-Server Enterprise-Manager

Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.

Grundlagen des relationalen l Modells

Kapitel 5: Der SQL-Standard

Relationale Kalküle. Grundlagen der Datenbanken. Dr. Jérôme Kunegis Wintersemester 2013/14

Wiederholung: Relationale Algebra

Übungen zu Datenbanksysteme

Referentielle Integrität

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenbanksysteme SS 2007

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbanksysteme Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Architektur eines DBMS Logische Optimierung

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Kapitel 7: Die Datenbanksprache SQL

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Referentielle Integrität

insert, update, delete Definition des Datenbankschemas select, from, where Rechteverwaltung, Transaktionskontrolle

Datenbanksysteme 1 Herbst-/Wintersemester Oktober Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort)

Das Relationale Modell

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbanksysteme Kapitel 7: SQL. Oliver Vornberger. Institut für Informatik Universität Osnabrück

SQL Wiederholung. Datenbanktechnologien. Verbunde. Aggregation und Gruppierung. Unterabfragen. Hochschule für Technik und Wirtschaft Berlin

SELECT dient dazu, aus einer vorhandenen Datenbank bestimmte Spalten und Zeilen auszugeben es handelt sich also um eine Auswahlabfrage.

Relationales Datenmodell Relationale Algebra

Welche Kunden haben die gleiche Ware bestellt? select distinct a1.name, a2.name from Auftrag a1, Auftrag a2 where a1.ware = a2.ware.

Kapitel 7 Dr. Jérôme Kunegis. Logische Kalküle. WeST Web Science & Technologies

Datenbanksysteme Kapitel 7: SQL. Oliver Vornberger. Institut für Informatik Universität Osnabrück

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

Kapitel 3: Datenbanksysteme

Grundlagen des relationalen Modells

Termin 12: Datenbanksysteme (2) - Einführung in SQL

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

SQL. Abfragesprache Datenmanipulation - DML

Übersicht der wichtigsten MySQL-Befehle

Tabellenausdrücke. Bedingungen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Anfragebearbeitung 2. Vorlesung Datenbanksysteme vom

Datenbanken und SQL. Kapitel 4. Die Datenbankzugriffssprache SQL. Edwin Schicker: Datenbanken und SQL (4)

SQL Intensivpraktikum SS 2008

Das relationale Modell

gibt es kein Bundesland, en?"

Rückblick: Relationale Normalisierung

Objektorientierte Datenbanken

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

8. Relationale Datenbanksprachen

Daniel Warner SQL. Das Praxisbuch. Mit 119 Abbildungen. Franzis

Abfragen (Queries, Subqueries)

SWE4 Slide 1. Software-Engineering. Vorlesung 4 vom Sebastian Iwanowski FH Wedel

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

Datenmanipulation in SQL (1): Subselect:

Vorlesung Datenbankmanagementsysteme

Kapitel 6. Datenmalipulation (DML) d. h. insert, update, delete, select im Relationenmodell (in Oracle)

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Datenintegrität. Bisherige Integritätsbedingungen

ACCESS SQL ACCESS SQL

4.5 Anfragen mit Mengenoperatoren

Datenmodellierung. VU , WS 2016 Das relationale Modell. Nysret Musliu, Sebastian Skritek


Das Relationale Modell

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #5. SQL (Teil 3)

Aggregatfunktionen in SQL

Relationale Anfragesprachen

Herbstsemester Datenbanken mit Übungen Kapitel 4: SQL. H. Schuldt. Inhalt

Query Languages (QL) Relationale Abfragesprachen/Relational

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Transkript:

Web Science & Technologies University of Koblenz Landau, Germany Grundlagen der Datenbanken SQL Teil 2 Dr. Jérôme Kunegis Wintersemester 2013/14

Bereichsanfragen und Mitgliedschaft in der Menge Anfrage: Studenten der ersten vier Semester SELECT * FROM Studenten WHERE Semester >= 1 AND Semester <= 4; SELECT * FROM Studenten WHERE Semester BETWEEN 1 and 4; SELECT * FROM Studenten WHERE Semester IN (1,2,3,4); 2

String-Pattern-Matching Anfrage: Studenten, deren Name 'Schulz' ist: SELECT * FROM Studenten WHERE Name = 'Schulz'; Anfrage: Studenten, deren Name mit 'A' beginnt: SELECT * FROM Studenten WHERE Name LIKE 'A%'; Anfrage: Studenten mit Namen Mayer, Meyer, Mayor, : SELECT * FROM Studenten WHERE Name LIKE 'M_y_r'; 3

Subanfragen und IN-Operator IN-Operator testet auf Mengenmitgliedschaft Erinnerung: Mengenoperatoren UNION UNION ALL INTERSECT MINUS Vereinigung von Mengen (mit Duplikateliminierung) Vereinigung von Multimengen Schnittmenge Set-Minus (auch EXCEPT) z.b. SELECT Name FROM Assistenten UNION SELECT Name FROM Professoren; SQL Teil 2 J. Kunegis GLDB 2013/14 4

Quantifizierende Bedingungen IN und ALL SELECT Name FROM Professoren WHERE PersNr NOT IN ( SELECT gelesenvon FROM Vorlesungen ); IN ist äquivalent zur quantifizierenden Bedingung = ANY. Quantifizierende Bedingungen haben einen Vergleichsoperator (=, <, >, ) und den Operator IN oder ANY (alternativ auch SOME). IN testet ob es mindestens ein Element im Ergebnis einer Subanfrage gibt ALL überprüft, ob alle Ergebnisse der Subanfrage einen Vergleich erfüllen. SQL Teil 2 J. Kunegis GLDB 2013/14 5

Quantifizierende Bedingungen IN und ALL (2) Anfrage: Studenten im höchsten Semester. SELECT * FROM Studenten WHERE Semester >= ALL (SELECT Semester FROM Studenten); Alternativ: Verwendung von = und Subanfrage mit MAX-Aggregator Hinweis: ALL vergleicht nur einen Wert mit einer Menge Kein Allquantor: Nicht möglich sind Anfragen wie finde alle Studenten mit... SQL Teil 2 J. Kunegis GLDB 2013/14 6

Alternative zu ALL SELECT * FROM Studenten WHERE Semester >= ALL (SELECT Semester FROM Studenten); SELECT * FROM Studenten WHERE Semester = (SELECT MAX(Semester) FROM Studenten); SQL Teil 2 J. Kunegis GLDB 2013/14 7

Quantifizierte Anfragen Existenzquantor wird durch EXISTS umgesetzt. Teste ob Menge von Tupeln leer ist oder nicht (gibt TRUE oder FALSE zurück) NOT EXISTS ist umgekehrt, z.b. Professoren, die keine Vorlesung halten SELECT Name FROM Professoren WHERE NOT EXISTS ( SELECT * FROM Vorlesungen WHERE gelesenvon = PersNr ); SQL Teil 2 J. Kunegis GLDB 2013/14 8

Allquantifizierte Prädikate durch COUNT Allquantifizierung kann auch durch eine COUNT-Aggregation ausgedrückt werden Nochmal eine etwas einfachere Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? SELECT h.matrnr FROM hören h, Vorlesungen v WHERE v.sws = 4 AND h.vorlnr = v.vorlnr GROUP BY h.matrnr HAVING COUNT (*) = (SELECT COUNT (*) FROM Vorlesungen v1 WHERE v1.sws = 4); hier wird zunächst gezählt, wie viele Vorlesungen die einzelnen Studenten hören und dann überprüft, ob diese Anzahl gleich ist mit der Anzahl der Tupel in Relation Vorlesungen (mit 4 SWS) SQL Teil 2 J. Kunegis GLDB 2013/14 9

Hinweis: Fehlerquellen bei COUNT-Aggregation Anfrage: Namen der Studenten, die alle vierstündigen Vorlesungen gehört haben Vorsicht: so geht das nicht SELECT h.matrnr, s.name FROM hören h, Vorlesungen v, Studenten s WHERE v.sws = 4 AND h.vorlnr = v.vorlnr AND h.matrnr = s.matrnr GROUP BY h.matrnr HAVING COUNT (*) = (SELECT COUNT (*) FROM Vorlesungen v1 WHERE v1.sws = 4); Erinnerung: SELECT-Klausel darf nur aggregierte Werte oder Attribute nach denen gruppiert wurde enthalten. SQL Teil 2 J. Kunegis GLDB 2013/14 10

Hinweis: Fehlerquellen bei COUNT-Aggregation (2) deshalb so: SELECT h.matrnr, s.name FROM hören h, Vorlesungen v, Studenten s WHERE v.sws = 4 AND h.vorlnr = v.vorlnr AND h.matrnr = s.matrnr GROUP BY h.matrnr, s.name HAVING COUNT (*) = ( SELECT COUNT (*) FROM Vorlesungen v1 WHERE v1.sws = 4 ); SQL erzeugt pro Gruppe ein Ergebnistupel. Deshalb müssen alle in der SELECT-Klausel aufgeführten Attribute - außer den aggregierten auch in der GROUP BYKlausel aufgeführt werden! SQL Teil 2 J. Kunegis GLDB 2013/14 11

Subqueries unkorellierte Subqueries: Anfrage: Professoren, die keine Vorlesungen anbieten SELECT Name FROM Professoren WHERE PersNr NOT IN ( SELECT gelesenvon FROM Vorlesungen ); korrelierte Subqueries: Anfrage: Professoren, die keine Vorlesungen anbieten SELECT p.name FROM Professoren p WHERE NOT EXISTS ( SELECT v.gelesenvon FROM Vorlesungen v WHERE v.gelesenvon = p.persnr ); 12

Quantifizierte Subqueries Die Bedingung Wert θ ANY Menge mit θ {=,, <, >,, } ist erfüllt, wenn es in der Menge ein Element gibt, für das Wert θ Element gilt. (= ANY ist äquivalent zu IN) (SOME ist äquivalent zu ANY) Die Bedingung Wert θ ALL Menge mit θ {=,, <, >,, } ist erfüllt, wenn für alle Elemente der Menge gilt: Wert θ Element. (<> ALL ist äquivalent zu NOT IN) Die Bedingung EXISTS Menge ist erfüllt, wenn die Menge nicht leer ist (dies ist äquivalent zur Bedingung 0 < SELECT COUNT(*) FROM...) Achtung: Wert θ ALL (query_returns_no_rows) = TRUE Wert θ ANY (query_returns_no_rows) = FALSE 13

Quantifizierte Subqueries Anfrage: Studenten im höchsten Semester: SELECT * FROM Studenten WHERE Semester >= ALL (SELECT Semester FROM Studenten); Anfrage: Studenten, für die keine Prüfungen erfasst sind: SELECT * FROM Studenten s WHERE NOT EXISTS (SELECT * FROM Prüfen p WHERE p.matrnr = s.matrnr); 14

Simulation allquantifizierter Suchprädikate SQL hat keinen Allquantor. Formulierungen der Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? x. P(x) x. P(x) 15

Umsetzung des Allquantors in SQL Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? SELECT s.matrnr FROM Studenten s WHERE NOT EXISTS (SELECT * FROM Vorlesungen v WHERE v.sws = 4 AND NOT EXISTS (SELECT * FROM hören h WHERE h.vorlnr = v.vorlnr AND h.matrnr=s.matrnr)); 16

Umsetzung des Allquantors in SQL: alternative Form Anfrage: Wer hat alle vierstündigen Vorlesungen gehört? SELECT s.matrnr FROM Studenten s WHERE NOT EXISTS ( SELECT v.vorlnr FROM Vorlesungen v WHERE v.sws = 4 MINUS SELECT h.vorlnr FROM hören h WHERE h.matrnr = s.matrnr ); 17

Aggregationsfunktionen "Grobsyntax": { MAX MIN AVG SUM COUNT } ( { ALL DISTINCT } {column expression *} ) "Grobsemantik": Abbildung einer Menge skalarer Werte auf einen skalaren Wert 18

Aggregationsfunktionen: Beispiele (1) 1) Das höchste Semester unter allen Studenten: SELECT MAX (Semester) FROM Studenten; 2) Notendurchschnitt aller Prüfungsergebnisse: SELECT AVG (Note) FROM prüfen; 19

Aggregationsfunktionen: Beispiele (2) 3) Welche Studenten haben bereits einige Prüfungen hinter sich? SELECT DISTINCT MatrNr FROM prüfen; 4) Wieviele Studenten haben bereits Prüfungen hinter sich? SELECT COUNT (DISTINCT MatrNr) FROM prüfen ; 5) Wieviele Studenten sind im 15. Semester? SELECT COUNT (*) FROM Studenten WHERE Semester = 15; 6) Prüfungsleistungen, die über dem globalen Durchschnitt liegen: SELECT p.note FROM prüfen p WHERE p.note < (SELECT AVG (p1.note) FROM prüfen p1); 20

Gruppierung Lehrpensum (Summe der Semesterwochenstunden) pro Professor: SELECT gelesenvon, SUM (SWS) FROM Vorlesungen GROUP BY gelesenvon; Lehrpensum der -Professoren, die überwiegend umfangreiche Lehrveranstaltungen anbieten (mit durchschnittlichem Umfang 3 SWS und mehr) SELECT gelesenvon, Name, SUM (SWS) FROM Vorlesungen, Professoren WHERE gelesenvon = PersNr AND Rang = '' GROUP BY gelesenvon, Name HAVING AVG (SWS) >= 3; 21

Ausführen einer Anfrage mit GROUP BY SELECT gelesenvon, Name, SUM (SWS) FROM Vorlesungen, Professoren WHERE gelesenvon = PersNr AND Rang = '' GROUP BY gelesenvon, Name HAVING AVG (SWS) >= 3; FROM Vorlesungen, Professoren VorlNr Titel SWS gelesen Von PersNr Name Rang Raum 5001 5041... 4630 4 4... 4... Grundzüge Ethik... Die 3 Kritiken 2137... 2137... 2137 Sokrates Sokrates... Kant 226 226... 7 WHERE gelesenvon = PersNr AND Rang = '' 22

Ausführen einer Anfrage mit GROUP BY (2) WHERE gelesenvon = PersNr AND Rang = '' VorlNr Titel SWS gelesen Von PersNr Name Rang Raum 5001 5041 5043 5049 4052 5052 Grundzüge Ethik Erkenntnistheorie Mäeutik Logik Wissenschaftstheorie 4 4 3 2 4 3 2137 2126 2126 2137 2126 2126 Kant Sokrates Russel Sokrates Sokrates Russel 7 226 232 226 226 232 5216 4630 Bioethik Die 3 Kritiken 2 4 2126 2137 2126 2137 Russel Kant 232 7 GROUP BY gelesenvon, Name 23

VorlNr 5041 5049 4052 5043 5052 5216 5001 4630 SWS Titel Ethik Mäeutik Logik Erkenntnistheorie Wissenschaftstheo. Bioethik Grundzüge Die 3 Kritiken 4 2 4 3 3 2 4 4 gelesenvon PersNr Name Sokrates Sokrates Sokrates 2126 2126 Russel 2126 2126 Russel 2126 2126 Russel 2137 2137 Kant 2137 2137 Kant Rang Raum 226 226 226 232 232 232 7 7 HAVING AVG (SWS) >= 3 VorlNr Titel 5041 Ethik 5049 Mäeutik 4052 Logik SWS 4 2 4 gelesenvon PersNr Name Sokrates Sokrates Sokrates Rang Raum 226 226 226 5001 Grundzüge 4630 Die 3 Kritiken 4 4 2137 2137 2137 2137 Kant Kant 7 7 24

Ausführen einer Anfrage mit GROUP BY (4) HAVING AVG (SWS) >= 3 VorlNr Titel 5041 Ethik 5049 Mäeutik 4052 Logik SWS 4 2 4 gelesenvon PersNr Name Sokrates Sokrates Sokrates Rang Raum 226 226 226 5001 Grundzüge 4630 Die 3 Kritiken 4 4 2137 2137 2137 2137 Kant Kant 7 7 SELECT gelesenvon, Name, SUM (SWS) gelesenvon Name sum (SWS) Sokrates 10 2137 Kant 8 25

Behandlung von Nullwerten "Grobsemantik": Unbekannter Wert. Nullwerte können auch im Zuge der Anfrageauswertung entstehen (z.b. Outer Joins) manchmal überraschende Anfrageergebnisse, wenn Nullwerte vorkommen: SELECT COUNT(*) FROM prüfen WHERE Note > 2.0 OR Note <= 2.0 ; ist NICHT immer identisch mit SELECT COUNT(*) FROM prüfen ; Grund: wenn es Prüfungen gibt, deren Note-Attribut (noch) den Wert NULL hat, werden diese nicht mitgezählt! 26

Auswertung bei Null-Werten In arithmetischen Ausdrücken werden Nullwerte propagiert: NULL + 1 = NULL NULL * 0 = NULL Die Behandlung von Strings + CLOBs ist systemspezifisch: Oracle: NULL 'string' = 'string' MS SQL Server: NULL + 'string' = null MySQL: concat(null, 'string') = NULL (btw, equivalent zu OR) SQL hat eine dreiwertige Logik mit TRUE, FALSE, UNKNOWN. Diesen Wert liefern Vergleichsoperationen zurück, wenn mindestens eines ihrer Argumente NULL ist. z.b. (Note <= 2.0) liefert UNKNOWN falls Note NULL ist 27

Gruppierung bei Null-Werten Bei einer Gruppierung wird null als ein eigenständiger Wert aufgefasst und in eine eigene Gruppe eingeordnet: SELECT Note, count(*) FROM prüfen GROUP BY Note Note 1.0 count(*) 25 1.3 94 NULL 248 28

Test auf Nullwert Anfrage: bisher unbenotete Prüfungsleistungen SELECT * FROM prüfen WHERE Note IS NULL; Anfrage: Professoren mit eigenem Büro SELECT * FROM Professoren WHERE Raum IS NOT NULL; 29

Built-in-Funktionen auf skalaren Werten Häufig produktspezifisch, z.b. Stringmanipulation in Oracle: SELECT SUBSTR (Name, INSTR(Name, ' ')+1) FROM Studenten Umwandlung eines Datums (Datentyp DATE) in einen String: SELECT TO_CHAR(SYSDATE, 'DY DD MONTH YYYY, HH24:MI:SS') FROM DUAL; etc. 30

Anhang Kapitel 8 Präzise Semantik von SQL-Anfragen 31

Abbildung SQL auf TRK und RA "Grobsemantik": SELECT A, B,... FROM R, S,..., T,... WHERE F (so dass A, B,... zu R, S,... gehören, nicht aber zu T,..., und F über R, S,..., T,... definiert ist) RA: TRK: 32

1. Abbildung SQL auf RA 33

Präzise Semantik einfacher SQL-Anfragen: Abbildung auf RA Voraussetzungen: 1) Vernachlässigung von Multimengen, Nullwerten u.ä. 2) Eindeutige Benennung von Tupelvariablen und Zuordnung von Attributen Vorgehensweise: Definition einer Abbildungsfunktion sql2ra: sql query ra query von select_block-konstrukten auf RA-Anfragen unter Verwendung der Funktion sql2ra : sql where clause ra query ra query von search_condition-konstrukten auf RA-Ausdrücke sowie der Hilfsfunktion sql2ra-: sql where clause ra query ra query mit sql2ra- [F](E) = E - π[sch(e)] (sql2ra [F](E) ).. Erweiterung auf Multirelationen relativ leicht möglich. 34

Abbildung SQL auf RA (1) sql2ra [ SELECT A1, A2, FROM REL1 R1, REL2 R2,, RELm Rm, TAB1 T1, TAB2 T2,, TABk Tk WHERE F ] (so dass A1, A2,..., An zu REL1, REL2,, RELm gehören, nicht aber zu TAB1,, TABk und F über REL1,..., RELm, TAB1,, TABk definiert ist ) 35

Abbildung SQL auf RA (2) sql2ra [ select-block1 UNION select-block2 ] mit select-block1: SELECT A1, A2, FROM REL1 R1,, RELm Rm, TAB1 T1,, TABk Tk WHERE F und select-block2: SELECT B1, B2,... FROM SET1 S1,..., SETm Sm, PAR1 P1,..., PARk Pk WHERE G.. mit ggf. notwendigen Umbenennungen von Attributen 36

Abbildung SQL auf RA (2) 37

Abbildung SQL auf RA (4) sql2trc [Ri.Aj IN subquery] (so dass subquery die Form SELECT Qk.C FROM QUELL1 Q1,..., QUELLm Qm WHERE H hat) 38

Abbildung SQL auf RA (5) sql2trc [Ri.Aj θ ANY subquery] = (so dass subquery die Form SELECT Qk.C FROM QUELL1 Q1,..., QUELLm Qm WHERE H hat) 39

Abbildung SQL auf RA (6) sql2trc [Ri.Aj θ ALL subquery] = (so dass subquery die Form SELECT Qk.C FROM QUELL1 Q1,..., QUELLm Qm WHERE H hat) 40

Abbildung SQL auf RA (7) sql2trc [EXISTS subquery] = (so dass subquery die Form SELECT C1, C2,... FROM QUELL1 Q1,..., QUELLm Qm WHERE H hat) 41

Abbildung SQL auf RA: Beispiel query = SELECT s.matrnr, s.name FROM Studenten s WHERE s.semester > 5 AND NOT EXISTS (SELECT * FROM hören h, Vorlesungen v WHERE v.sws = 4 AND v.vorlnr = h.vorlnr AND s.matrnr = h.matrnr) 42

3. Semantik der Gruppierung 43

Abbildung SQL auf RA (1) sql2ra [ SELECT A', f(b) FROM WHERE GROUP BY A ] (wobei A' A gelten muss) 44

Abbildung SQL auf RA (1) sql2ra [ SELECT A', f(b) FROM WHERE GROUP BY A HAVING cond(a,g(c))] (wobei A' A gelten muss) MRA-Programm 45

Fragen? kunegis@uni-koblenz.de http://west.uni-koblenz.de/teaching/ws1314/gddb SQL Teil 2 J. Kunegis GLDB 2013/14 46