dbis Praktikum DBS I SQL Teil 2

dbis Praktikum DBS I SQL – Teil 2 dbis Praktikum DBS I Übersicht • Fortgeschrittene SQL-Konstrukte – – – – – GROUP BY HAVING UNION / INTERSECT ...
Author: Jörn Hase
1 downloads 0 Views 428KB Size
dbis

Praktikum DBS I

SQL – Teil 2

dbis

Praktikum DBS I

Übersicht • Fortgeschrittene SQL-Konstrukte – – – – –

GROUP BY HAVING UNION / INTERSECT / EXCEPT SOME / ALL / ANY IN / EXISTS

• CREATE TABLE

• INSERT / UPDATE / DELETE

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

2

dbis

Praktikum DBS I

SELECT • Syntax SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

expression table-reference search-condition] grouping-expression] search-condition] sort-key]

[…]: optional

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

3

dbis

Praktikum DBS I

GROUP-BY-Klausel – Syntax • Syntax – GROUP BY grouping-expression {, grouping-expression}

• Bedeutung – Tupel mit gleichen Werten in den Gruppierungsausdrücken werden zu Gruppen zusammengefasst – Die SELECT-Klausel referenziert die gruppierten Ausdrücke • Nur Gruppierungsattribute und Aggregatfunktionen dürfen in SELECT-Klausel stehen

GROUP BY Genre

Film Titel

Genre

Mietpreis

Hängt ihn höher

Western

1,50

Hängt ihn höher

Western

1,50

Krieg der Sterne Sci-Fi

2

Django

Western

1

1984

Sci-Fi

4

Krieg der Sterne Sci-Fi

2

Django

Western

1

1984

4

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

Sci-Fi

4

dbis

Praktikum DBS I

GROUP-BY-Klausel – Beispiele Film Titel

Genre

Mietpreis

• Durchschnittspreise für jedes Filmgenre – SELECT genre, AVG(mietpreis) FROM film GROUP BY genre

• Anzahl der Filme je Genre – SELECT genre, COUNT(*) FROM film GROUP BY genre – Hinweis

Genre Western

1,25

Sci-Fi

3,00

Genre Western

2

Sci-Fi

2

• COUNT(*) bezieht sich auf jede Gruppe, jedes Tupel • COUNT(titel) bezieht sich dagegen nur auf Tupel, die einen Wert für das Attribut „titel“ haben Lehr- und Forschungseinheit Datenbanken und Informationssysteme

5

dbis

Praktikum DBS I

HAVING-Klausel • Syntax – HAVING search-condition • Logischer Ausdruck, NOT/AND/OR/Klammern

• Filtert Gruppen, die mit GROUP BY definiert wurden • HAVING ohne GROUP-BY-Klausel – Das Ergebnis des vorherigen SELECT wird als eine Gruppe angesehen – ohne Gruppierungsattribute. –  es dürfen nur Aggregatfunktionen in der SELECTKlausel stehen

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

6

dbis

Praktikum DBS I

HAVING-Klausel – Beispiele (1) • Durchschnittspreise für Western oder teure Filme – SELECT genre, AVG(mietpreis) FROM film GROUP BY genre HAVING genre = 'Western' OR AVG(mietpreis) > 5

• Der (Gesamt-)Durchschnittspreis wird zusammen mit der Anzahl der Filme nur ausgegeben, wenn er größer als 5 ist – SELECT AVG(mietpreis), COUNT(*) FROM film HAVING AVG(mietpreis) > 5

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

7

dbis

Praktikum DBS I

HAVING-Klausel – Beispiele (2) • Preis der billigsten Filme pro Genre für die Genre „Western“ oder „Krimi“, wenn der Durchschnittspreis des jeweiligen Genres größer als 3 ist. Es werden nur Filme nach 2002 berücksichtigt. – SELECT genre, MIN(mietpreis) FROM film WHERE jahr > 2002 GROUP BY genre HAVING (genre = 'Western' OR genre = 'Krimi') AND AVG(mietpreis) > 3 – „genre = 'Western' OR genre = 'Krimi'“ könnte auch in der WHERE-Klausel stehen Lehr- und Forschungseinheit Datenbanken und Informationssysteme

8

dbis

Praktikum DBS I

UNION • Syntax – subselect | (fullselect) UNION [ALL] subselect | (fullselect) – Kammerung bei fullselect (= Kombination von subselect mit Mengenoperatoren)

• UNION – vereinigt das Ergebnis zweier SELECT-Anfragen – führt Duplikatelimination durch, UNION ALL nicht

• Übereinstimmung der Ergebnistypen der Teilanfragen erforderlich • Alle Tabellen im UNION müssen gleiche Spaltenanzahl haben – Gleiches Schema

• Beispiel – SELECT titel, mietpreis, genre FROM film UNION SELECT titel, mietpreis, stil FROM musik Lehr- und Forschungseinheit Datenbanken und Informationssysteme

9

dbis

Praktikum DBS I

INTERSECT • Syntax

– subselect | (fullselect) INTERSECT [ALL] subselect | (fullselect)

• INTERSECT

– bildet den Durchschnitt zweier SELECT-Anfragen, d. h., es gibt die Tupel aus, die in beiden Relationen vorkommen – führt Duplikatelimination durch, INTERSECT ALL nicht

• Übereinstimmung der Ergebnistypen der Teilanfragen erforderlich • Alle Tabellen beim INTERTSECT müssen gleiche Spaltenanzahl haben – Gleiches Schema

• Beispiel

– SELECT titel FROM film INTERSECT SELECT titel FROM musik

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

10

dbis

Praktikum DBS I

EXCEPT • Syntax – subselect | (fullselect) EXCEPT [ALL] subselect | (fullselect)

• EXCEPT – bildet die Differenz zweier SELECT-Anfragen, d. h., alle Tupel der linken Relation werden ausgewählt, es sei denn, sie erscheinen in der rechten Relation – führt Duplikatelimination durch, EXCEPT ALL nicht

• Übereinstimmung der Ergebnistypen der Teilanfragen erforderlich • Alle Tabellen müssen gleiche Spaltenanzahl haben – Gleiches Schema Lehr- und Forschungseinheit Datenbanken und Informationssysteme

11

dbis

Praktikum DBS I

EXCEPT – Beispiele • Beispiel 1 – (SELECT titel FROM film UNION ALL SELECT titel FROM film) EXCEPT ALL SELECT titel FROM film – Ergebnis entspricht: SELECT titel FROM film

• Beispiel 2 – (SELECT titel FROM film UNION ALL SELECT titel FROM film) EXCEPT SELECT titel FROM film – Ergebnis: kein Tupel Lehr- und Forschungseinheit Datenbanken und Informationssysteme

12

dbis

Praktikum DBS I

Quantifizierende Bedingungen SOME / ANY / ALL • Quantifizierende Bedingung besteht aus einem der Vergleichsoperatoren (=, ) und ALL, ANY oder SOME (SOME äquivalent zu ANY) • Syntax – WHERE expression = | | < | > | = SOME | ANY | ALL (fullselect)

• Auswertung – ANY liefert TRUE, wenn es mindestens ein Element im Ergebnis der Unteranfrage gibt, für das der Vergleich erfüllt wird – ALL liefert TRUE, falls alle Ergebnisse der Unteranfrage den Vergleich erfüllen

• Achtung: ALL ≠ Allquantor (in SQL nicht vorhanden) – ALL führt Vergleich eines Wertes mit einer Menge durch Lehr- und Forschungseinheit Datenbanken und Informationssysteme

13

dbis

Praktikum DBS I

Quantifizierende Bedingungen SOME / ANY / ALL – Beispiele • Alle Filme, deren Mietpreis teurer ist als der Mietpreis irgendwelcher Stücke von „Elvis Presley“ – SELECT titel FROM film WHERE mietpreis > SOME (SELECT mietpreis FROM musik WHERE interpret = 'Elvis Presley')

• Alle Filme, die mindestens so teuer sind wie die Musik von „Ludwig van Beethoven“ – SELECT titel FROM film WHERE mietpreis >= ALL (SELECT mietpreis FROM musik WHERE interpret = 'Ludwig van Beethoven')

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

14

dbis

Praktikum DBS I

IN • Testen auf Mitgliedschaft • Äquivalent zu „= ANY“ • Syntax – WHERE expression [NOT] IN (fullselect)

• Beispiele – SELECT titel FROM film • WHERE titel IN (SELECT titel FROM filmstars WHERE name = 'Fonda') • WHERE titel NOT IN ('Lethal Weapon', 'Matrix 3')

– SELECT tiefe FROM see WHERE (name, flaeche) IN (VALUES ('Aralsee', 17160), ('Viktoriasee', 68870)) Lehr- und Forschungseinheit Datenbanken und Informationssysteme

15

dbis

Praktikum DBS I

EXISTS • EXISTS überprüft, ob die Unteranfrage Tupel produziert hat (ohne den Inhalt anzusehen) • Syntax – WHERE EXISTS (fullselect)

• Auswertung – Liefert FALSE, wenn die Menge leer ist, sonst TRUE

• Beispiel – SELECT 1 FROM one_row_table WHERE EXISTS (SELECT titel FROM film WHERE darsteller = 'Lee')

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

16

dbis

Praktikum DBS I

Beispiele (1) Fluss Name

See Länge

Name

fließt_durch Fluss

Stadt

Größe liegt_in

See

Stadt

• Annahme – Namen von Flüssen, Seen und Städten seien jeweils eindeutig

• Aufgabe: Geben Sie SQL-Anfragen an! – Anzahl der Städte, die am „Nil“ liegen. – Alle Flüsse, die nicht durch „Berlin“ fließen und alle Seen, die nicht in „Berlin“ liegen. Der Typ des Gewässers soll mit ausgegeben werden. Lehr- und Forschungseinheit Datenbanken und Informationssysteme

17

dbis

Praktikum DBS I

Beispiele (2) Stadt Name

Land

Bevölkerung

• Aufgabe: Geben Sie SQL-Anfragen an! – Alle Länder, die laut Städte-Statistik mehr als 50 Mio. EW haben. – Alle Städte, die in Ländern liegen, die laut StädteStatistik mehr als 50 Mio. EW haben.

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

18

dbis

Praktikum DBS I

CREATE TABLE (1) • Tabelle anlegen

– CREATE TABLE person( id INTEGER NOT NULL PRIMARY KEY, name VARCHAR(50) NOT NULL UNIQUE, vorname VARCHAR(50), telefon INTEGER REFERENCES telefonbuch(nr), persnr INTEGER DEFAULT 1 ) – CREATE TABLE angestellter( id INTEGER NOT NULL, buero INTEGER NOT NULL, gehalt INTEGER, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES person(id), UNIQUE(buero, gehalt) )

• Tabelle löschen

– DROP TABLE person – DROP TABLE angestellter

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

19

dbis

Praktikum DBS I

CREATE TABLE (2) • NULL-Werte – Default: zugelassen – NOT NULL für Primärschlüssel und UNIQUE muss explizit angegeben werden

• Datentypen – INTEGER, SMALLINT, BIGINT, DECIMAL, REAL, DOUBLE, VARCHAR, CHAR, TIME, TIMESTAMP, DATE, GRAPHIC, DATALINK, …

• Tabellen auflisten (nur Name) – LIST TABLES [FOR SCHEMA ]

• Struktur von Tabellen/Views – DESCRIBE TABLE Lehr- und Forschungseinheit Datenbanken und Informationssysteme

20

dbis

Praktikum DBS I

INSERT • Syntax – INSERT INTO | [ ( { , } ) ] VALUES {, expression} |

• Beispiele – INSERT INTO person VALUES (0, 'Meyer', 'Hans', 1234567, 13), (1, 'Müller', 'Franz', 1234568, DEFAULT) – INSERT INTO person(id, name, vorname) VALUES (1, 'Müller', 'Franz') • Default-Werte: telefon = NULL (implizit), persnr = 1

– INSERT INTO film VALUES SELECT titel, genre FROM angebot WHERE jahr > 2000 Lehr- und Forschungseinheit Datenbanken und Informationssysteme

21

dbis

Praktikum DBS I

UPDATE • Syntax – UPDATE table-name SET attribut1 = wert1 {, attribut2 = wert2} [WHERE where-Klausel]

• Beispiel – UPDATE student SET kontostand=kontostand–500, fachsemester=fachsemester+1 WHERE fachsemester>10

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

22

dbis

Praktikum DBS I

DELETE • Syntax – DELETE FROM table-name [WHERE where-condition]

• Beispiel – DELETE FROM politiker – DELETE FROM unis WHERE stadt='München'

Lehr- und Forschungseinheit Datenbanken und Informationssysteme

23

dbis

Praktikum DBS I

DELETE, UPDATE – Beispiele Professor ID name vorname

geburtsjahr

anz_wimis fakultät familienstand

geschlecht

Vorlesung prof_id

name

zeit

• Aufgabe: Geben Sie SQL-Anfragen an! – Löschen Sie alle Professoren der Landwirtschaftlichen Fakultät. – Wir befinden uns im Jahr 2020. Löschen Sie alle Professoren über 60! – Reduzieren Sie die Anzahl aller WiMis auf die Hälfte. – „Verheiraten“ Sie alle Professoren! Lehr- und Forschungseinheit Datenbanken und Informationssysteme

24