Sie sind auf Seite 1von 37

Relationale Datenbanksprache SQL

Relationale Datenbanksprachen
Datenbanksprachen, die direkt auf der relationalen Algebra oder dem
Relationenkalkl aufbauen, z.B. ISBL von IBM, oder ALPHA von Codd, fanden bei
Datenbank-Benutzern keine breite Akzeptanz und sind damit nie ber eine
Prototypversion hinausgelangt.

Wir behandeln in dieser Vorlesung SQL (Structured Query Language).

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

SQL
SQL (Structured Query Language), frher auch unter dem Namen SEQUEL
bekannt, wurde 1974 im IBM Almaden Research Laboratory in San Jose
California, von D.D. Chamberlin et al. als DDL und DML des DBMS System R
entwickelt.
SQL ist heute der Industriestandard fr relationale Datenbanksprachen.
Dieser Standard wurde 1985 vom American National Standards Institute (ANSI)
festgelegt.
Standardisiert seit 1986, aktuell SQL:2011
SQL ist weder eine konkrete Umsetzung der relationalen Algebra noch des
relationalen Kalkls, sondern besteht aus einer Mischung von beiden, ergnzt um
einige Zustze (z.B. arithmetische Operatoren oder Aggregatfunktionen).
Teilsprachen, die wir behandeln werden:
-Data Definition Language (DDL): Schema
-Data Manipulation Language (DML): Einfgen, ndern, Lschen und Anfragen von Daten

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

SQL
Die von SQL untersttzten Wertebereiche sind endliche Unterbereiche der ganzen
und der reellen Zahlen
(NUMBER, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLE PRECISION),

sowie Zeichenketten mit einer festen bzw. whlbaren, maximalen Lnge


(CHAR(n) bzw. VARCHAR(n)), DATE, BOOLEAN, CURRENCY,

Fr die Beispiele zu SQL wird das folgende Datenbankschema benutzt (Schlssel


gekennzeichnet durch Unterstreichen):
Kunde (KName, KAdr, Saldo)
Lieferant (LName, Ware, LAdr, Preis)
Auftrag (KName, LName, Ware, Menge)

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Die DDL von SQL: CREATE TABLE


Das konzeptionelle Schema eines DBMS wird durch die Data Definition Language
(DDL) spezifiziert.
Relation anlegen
CREATE TABLE <Relationenname> (<Spaltendefinition>{, <Spaltendefinition>})
mit <Spaltendefinition> ::= <Attributname> <Typ> {<Option>}
und <Option> ::= DEFAULT <Ausdruck> | NOT NULL | UNIQUE | PRIMARY KEY |

Beispiel: Kunde (KName, KAdr, Saldo)


CREATE TABLE Kunde
( KName CHAR (20) NOT NULL
, KAdresse VARCHAR (50)
, Saldo DECIMAL (7) )

Keine NULLWerte erlaubt

NOT NULL besagt, dass ein Attribut belegt sein muss; es darf keine Null-Werte enthalten.

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

PRIMARY KEY
Verschiedene Mglichkeiten zur Festlegung eines Primary Keys
CREATE TABLE Kunde
( KName CHAR (20) NOT NULL UNIQUE, KAdr VARCHAR (50) , Saldo DECIMAL (7) ,
PRIMARY KEY (KName) )
oder
CREATE TABLE Kunde
(KName CHAR (20) NOT NULL UNIQUE PRIMARY KEY, KAdr VARCHAR (50) ,
Saldo DECIMAL (7) )
oder
CREATE TABLE Kunde
( KName CHAR (20) NOT NULL UNIQUE, KAdr VARCHAR (50), Saldo DECIMAL (7) ,
CONSTRAINT pk_kunde PRIMARY KEY (KName) )

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

FOREIGN KEY
Kunde (KName, KAdr, Saldo)
Lieferant (LName, Ware, LAdr, Preis)
Auftrag (KName, LName, Ware, Menge)

Lieferant-Tabelle:
CREATE TABLE Lieferant
( LName CHAR (20) NOT NULL, Ware VARCHAR (20) NOT NULL, LAdr VARCHAR (50),
Preis DECIMAL (7) , PRIMARY KEY (LName, Ware) )
Auftrag-Tabelle:
CREATE TABLE Auftrag
( KName CHAR (20) NOT NULL REFERENCES Kunde(KName),
Lname CHAR(20) NOT NULL,
Ware VARCHAR (20) NOT NULL,
Menge INTEGER,
PRIMARY KEY (KName, Lname, Ware),
FOREIGN KEY (Lname,Ware) REFERENCES Lieferant(Lname,Ware) )

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

ALTER TABLE und DROP TABLE


Relation ndern
Spalte hinzufgen, wobei NOT NULL nicht erlaubt ist
Neues Attribut wird mit Nullwerten belegt.
ALTER TABLE <Relationenname>
ADD <Attributname> <Typ> [DEFAULT <Ausdruck>]
Spalte entfernen
ALTER TABLE <Relationen-Name>
DROP COLUMN <Attributname>
Relation lschen
DROP TABLE <Relationenname>

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Index anlegen
Index anlegen
Indexe werden verwendet, um den Zugriff auf eine Relation zu beschleunigen.
Dabei wird ein schneller Direktzugriff auf Tupel ber indizierte Feldwerte
ermglicht.
In kommerziellen DBMS ist dies meist durch B+ Bume realisiert
CREATE [UNIQUE] INDEX <Indexname>
ON <Relationenname> (<Attributname> [<Ordnung>]{, <Attributname> [<Ordnung>]})

wobei <Ordnung> ::= ASC | DESC

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Index anlegen und lschen


Beispiel:
CREATE UNIQUE INDEX Kundenindex
ON Kunde (KName) [CLUSTER]
UNIQUE: Fr alle Attributsnamen keine zwei
Tupel mit gleichen Werten erlaubt
erfllt Schlsselbedingung.

KName

KAdr

Saldo

Mller

Melatenerstr. 32 Aachen

120.52

Russel

Jlicherstr. 61 Aachen

259.50

Kant

Aachenerstr. 5 Kln

651.14

Huber

Klnerstr. 124 Dsseldorf

525.01

CLUSTER: Die Tupel der Relation werden tatschlich in die Indexstruktur eingefgt
und nicht nur Verweise
nur ein Clusterindex pro Relation.
Index lschen
DROP INDEX <Indexname>

10

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Sichten anlegen und lschen


Sichten anlegen
Sichten entsprechen externen DB-Schemata. In relationalen Systemen werden
Sichten als abgeleitete Relationen aufgefasst, die ber Anfragen definiert sind.
CREATE VIEW <Sichtname> [(<Attributname>{, <Attributname>})] AS <Subquery>

Beispiel:
CREATE VIEW Gute_Kunden AS
SELECT * FROM Kunde WHERE Saldo > 100

Das SQL Schlsselwort `* stellt eine Kurzschreibweise fr die gesamte,


konkatenierte Attributsliste der hinter dem FROM angegebenen Relationen dar.
Sichten lschen
DROP VIEW <Sicht-Name>

11

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Die DML von SQL


Anfragen an die Datenbank und Operationen auf der Datenbank werden in der
Data Manipulation Language (DML) formuliert.
Grundform:
SELECT <Liste von Attributsnamen>
FROM <ein oder mehrere Relationennamen>
[WHERE <Bedingung>]

Projektion!
Kreuzprodukt!
Selektion!

Beispiel:
SELECT KName
FROM Kunde
WHERE Saldo < 0

Die SELECT-Klausel entspricht der Projektion der relationen Algebra.


Die FROM-Klausel beschreibt das Kreuzprodukt der beteiligten Relationen.
Die WHERE-Klausel enthlt die Bedingung zur Selektion.
12

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispielschema
Kunde
KName

KAdr

Saldo

Mller

Melatenerstr. 32 Aachen

120.52

Russel

Jlicherstr. 61 Aachen

259.50

LName

Ware

LAdr

Preis

Kant

Aachenerstr. 5 Kln

651.14

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Huber

Klnerstr. 124 Dsseldorf

525.01

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

Milan AG

Mehl

Grner Weg 5 Kln

0.93

Milan AG

Zucker

Grner Weg 5 Kln

0.69

Lieferant

Auftrag

13

KName

LName

Ware

Menge

Russel

Mertens AG

Mehl

10

Huber

Glaser AG

Milch

Kant

Milan AG

Mehl

22

Mller

Milan AG

Milch

30

Russel

Trieste AG

Salz

15

Huber

Mertens AG

Mehl

Mller

Milan AG

Zucker

12

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Die DML von SQL


Die Bedingung nach dem WHERE kann Vergleichsoperatoren

{<, >, =, BETWEEN, LIKE, }, IS NULL,

logische Verknpfungen (AND, OR, NOT),


Mengenoperatoren (IN, NOT IN, ANY, ALL, EXISTS)

Siehe spter

arithmetische Operatoren (+, , *, /) enthalten.


Durch die Punktnotation <Relation>.<Attribut> knnen Mehrdeutigkeiten vermieden
werden.

14

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiele
Arithmetische Ausdrcke in der SELECT-Klausel
Beispiel: Gib die Preise der Waren der einzelnen Lieferanten inkl. Mwst an.
SELECT LName, Ware, Preis * 1.19 FROM Lieferant

Suche nach Teilstrings


Das SQL-Schlsselzeichen % reprsentiert einen beliebigen String.
Beispiel: Gibt es Kunden in Aachen?
SELECT * FROM Kunde WHERE KAdr LIKE %Aachen%

Test auf Null-Wert: <Attributname> IS [NOT] NULL


Beispiel: Gib alle Kundennamen aus, deren Adresse nicht vorhanden ist.
SELECT KName FROM Kunde WHERE KAdr IS NULL

Die Bedingung kann nicht als KAdr = NULL geschrieben werden.

15

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

SELECT FROM Klausel


SELECT DISTINCT A, B, C,
FROM R, S, T,
WHERE Bedingung
Relationale Algebra: $,&,', (&+,-./0./ ( RST... ))
Tupelkalkl: 9 . , ; . , = . , ? B D . . . }
Die Tupelvariablen t - , t N , t O , sind passend aus t ? , t B , t D , gewhlt, sie sind
nicht notwendig verschieden.
Wenn ein Attribut (z.B. A) in zwei Relationen vorkommt (z.B. in R und S), dann
muss man in SQL den Relationsnamen als Tupelvariable angeben:
SELECT DISTINCT R.A, S.A, C, FROM R, S, T,
WHERE Bedingung

16

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Basisoperationen der relationalen Algebra

Im folgenden gelte R(A, B, C, D), S(E, F, G) und T(A, B, C, D)


Vereinigung R T

SELECT * FROM R UNION SELECT * FROM T

Differenz R T

SELECT * FROM R MINUS SELECT * FROM T

Kreuzprodukt R T

SELECT * FROM R, T

Selektion RST (R)

SELECT * FROM R WHERE B = b

Projektion V,W (R)

SELECT DISTINCT A, C FROM R

Umbenennung Y

SELECT V.A FROM R AS V

Umbenennung ZW ()

SELECT A, B, C AS K, D FROM R

17

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Weitere Operationen der relationalen Algebra


Im folgenden gelte R(A, B, C, D), S(E, F, G) und T(A, B, C, D), U (A, E)
Relation R
SELECT * FROM R
Wenn keine Duplikate auftreten, gilt auch:
V,W (R) = SELECT A, C FROM R
Theta-Join
R]^ = SELECT * FROM R, S WHERE B F
Natrlichlicher Verbund (Natural Join)
= SELECT * FROM R, U WHERE R.A = U.A

18

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel: Selektion
LName

Ware

LAdr

Preis

Beispiel:

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Welche Lieferanten liefern Milch

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

SELECT DISTINCT LName

Milan AG

Mehl

Grner Weg 5 Kln

0.93

FROM Lieferant

Milan AG

Zucker

Grner Weg 5 Kln

0.69

oder Mehl?
SQL:

WHERE Ware = Mehl OR Ware = Milch


Relationale Algebra:
`abc+ (defgSh igjkh defgSh i9kmjh (Lieferant ))
Tupelkalkl:
. . = . = }

19

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel mit natrlichem Join


Beispiel:
Welche Lieferanten liefern irgendetwas,
das der Kunde Huber bestellt hat?
SQL:
SELECT DISTINCT Lieferant.LName
FROM Lieferant, Auftrag
WHERE Lieferant.Ware = Auftrag.Ware
AND KName = Huber

Kunde (KName, KAdr, Saldo)


Lieferant (LName, Ware, LAdr, Preis)
Auftrag (KName, LName, Ware, Menge)

Bedingung fr
natrlichen Join

Relationale Algebra:
`abc+ (Zeg Sh Tgfh (Lieferant Auftrag ))
Tupelkalkl:
l. LName l Lieferant a Auftrag: l. Ware = a. Ware a. KName = Huber}

20

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Geschachtelte Anfragen
In WHERE-Klausel, unterschiedliche Arten von Unterabfragen (Subqueries)
mglich:
-EXISTS (<Subquery>): Wahr, wenn Subquery mindestens ein Ergebnis liefert
-X IN (<Subquery>): Wahr, wenn X in der Ergebnismenge der Subquery ist
-X <op> ALL (<Subquery>): Wahr, wenn der Vergleichsoperator <op> fr alle
Resultate der Subquery erfllt ist
-X <op> ANY (<Subquery>): Wahr, wenn der Vergleichsoperator <op> fr
irgendein Resultat der Subquery erfllt ist

21

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel: Geschachtelte Anfrage


Beispiel: Welche Lieferanten liefern irgendetwas, das Huber bestellt hat?
LName
SELECT DISTINCT LName
Mertens AG
FROM Lieferant
Glaser AG
WHERE Ware IN
Mller AG
(SELECT Ware
Milan AG
FROM Auftrag
Trieste AG
WHERE KName = Huber)
Milan AG
Milan AG
oder:
KName
KAdr
Saldo
SELECT DISTINCT LName
Mller
Melatenerstr. 32 Aachen
120.52
FROM Lieferant L
Russel
Jlicherstr. 61 Aachen
259.50
WHERE EXISTS
Kant
Aachenerstr. 5 Kln
651.14
(SELECT *
Huber
Klnerstr. 124 Dsseldorf
525.01
FROM Auftrag
WHERE Ware = L.Ware AND KName = Huber)

Ware

LAdr

Preis

Mehl

Saagengasse 13 Kln

1.97

Milch

Kalossenweg 8 Kln

1.49

Salz

Hinterhausen 12 Kln

0.99

Milch

Grner Weg 5 Kln

1.19

Salz

Kirchenstrasse 7 Kln

0.53

Mehl

Grner Weg 5 Kln

0.93

Zucker

Grner Weg 5 Kln

0.69

KName

LName

Ware

Russel

Mertens AG

Mehl

10

Huber

Glaser AG

Milch

Kant

Milan AG

Mehl

22

Mller

Milan AG

Milch

30

Russel

Trieste AG

Salz

15

Huber

Mertens AG

Mehl

Mller

Milan AG

Zucker

Beispiel:
SELECT * FROM Kunde WHERE Saldo >= ALL ( SELECT Saldo FROM Kunde )
22

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Menge

12

Beispiel: Tupelkalkl fr geschachtelte Anfrage


Beispiel: Welche Lieferanten liefern alles, was Huber bestellt hat ?
Tupelkalkl: . Name Lieferant Auftrag ( . KName =
Lieferant ( . = . . = . )) }
Aber: Allquantor kann man in SQL so nicht verwenden!
Also brauchen wir die Transformation durchfhren:
Tupelkalkl: . Name Lieferant Auftrag ( . KName =
Lieferant ( . = . . = . )) }
Nach der Ersetzung der Implikation erhalten wir:
Tupelkalkl: . Name Lieferant Auftrag ( . KName =
Lieferant ( . = . . = . )) }
Kunde (KName, KAdr, Saldo)
Lieferant (LName, Ware, LAdr, Preis)
Auftrag (KName, LName, Ware, Menge)

23

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel: SQL fr geschachtelte Anfrage


(Beispiel weitergefhrt)
Welche Lieferanten liefern alles, was Huber bestellt hat ?
Tupelkalkl: . Name Lieferant Auftrag ( . KName =
Lieferant ( . = . . = . )) }

In SQL:
SELECT DISTINCT LName
FROM Lieferant L
WHERE NOT EXISTS
(SELECT *
FROM Auftrag
WHERE KName = Huber AND NOT Ware IN
(SELECT Ware
FROM Lieferant
WHERE LName = L.LName))

24

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

KName

LName

Ware

Menge

Russel

Mertens AG

Mehl

10

Huber

Glaser AG

Milch

Kant

Milan AG

Mehl

22

Mller

Milan AG

Milch

30

Russel

Trieste AG

Salz

15

Huber

Mertens AG

Mehl

Mller

Milan AG

Zucker

12

LName

Ware

LAdr

Preis

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

Milan AG

Mehl

Grner Weg 5 Kln

0.93

Milan AG

Zucker

Grner Weg 5 Kln

0.69

Aggregatfunktionen
Die Funktionen COUNT, MIN, MAX, SUM, und AVG knnen auf eine Menge von
Werten, die als Spalte einer Relation gegeben ist, angewandt werden.
Zustzlich werden STDDEV (standard deviation) und VARIANCE angeboten.
Beispiel:
SELECT SUM ([DISTINCT] <Attributname>)
FROM WHERE
Beachte:
COUNT(*) oder COUNT(<Attributname>) liefert die Anzahl der Tupel in einer
Relation.
Nur bei Verwendung von DISTINCT werden vorher Duplikate eliminiert.

25

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Aggregatfunktionen
Um die Anzahl verschiedener Attributwerte in einer Spalte zu bestimmen, muss
DISTINCT verwendet werden
NULL-Werte werden stets vorher aus der Argumentmenge eliminiert.
Falls die Argumentmenge leer ist, liefert COUNT den Wert 0, die anderen
LName
Ware
LAdr
Preis
Funktionen NULL.
Mertens AG
Mehl
Saagengasse 13 Kln
1.97
Glaser AG
Milch
Kalossenweg 8 Kln
1.49
Beispiele:
Mller AG
Salz
Hinterhausen 12 Kln
0.99
Wie viele Lieferanten gibt es?
Milan AG
Milch
Grner Weg 5 Kln
1.19
Trieste AG
Salz
Kirchenstrasse 7 Kln
0.53
SELECT COUNT (DISTINCT LName)
Milan AG
Mehl
Grner Weg 5 Kln
0.93
FROM Lieferant
Milan AG
Zucker
Grner Weg 5 Kln
0.69
Wie viele Liter Milch sind insgesamt bestellt ?
SELECT SUM (Menge)
FROM Auftrag
WHERE Ware = Milch

26

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

KName

LName

Ware

Menge

Russel

Mertens AG

Mehl

10

Huber

Glaser AG

Milch

Kant

Milan AG

Mehl

22

Mller

Milan AG

Milch

30

Russel

Trieste AG

Salz

15

Huber

Mertens AG

Mehl

Mller

Milan AG

Zucker

12

Gruppieren und Sortieren


Allgemeinere Form der SELECT FROM WHERE-Klausel:
SELECT FROM [WHERE ]
[GROUP BY <Liste von Attributsnamen>]
[HAVING <Bedingung>]
[ORDER BY <Liste von Attributsnamen>]
GROUP BY:
Mengen von Tupeln mit gleichen Werten der angegebenen Attribute werden zu
Gruppen zusammengefasst.
Die Ergebnisrelation enthlt ein Tupel fr jede Gruppe.
Hinter SELECT nur Ausdrcke, die einen Wert pro Gruppe annehmen
(Aggregatfunktionen oder Gruppenattribute).
Die nach GROUP BY angegebenen Attribute mssen auch nach SELECT
auftreten.

27

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Gruppieren und Sortieren


HAVING:
Gruppen werden anhand der <Bedingung> ausgewhlt.
In der Bedingung drfen nur Argumente mit einem Wert pro Gruppe auftreten.
Unterschied WHERE/HAVING:
-WHERE filtert auf Tupelebene
-HAVING filtert auf Gruppenebene
nur Gruppierungsattribute oder aggregierte Attribute erlaubt!
ORDER BY:
Die Ergebnisrelation wird nach einem oder mehreren Attributen sortiert
(DESC | ASC).

28

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel: GROUP BY und HAVING


Beispiel:
Gib die Namen aller Lieferanten aus, die mehr als zwei Teile liefern.
SELECT LName
FROM Lieferant
GROUP BY LName
HAVING COUNT (*) > 2

LName

Ware

LAdr

Preis

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

Milan AG

Mehl

Grner Weg 5 Kln

0.93

Milan AG

Zucker

Grner Weg 5 Kln

0.69

* steht fr alle Attribute einer Relation, auf die Bezug genommen wird.
Im Beispiel bezieht es sich auf LName in Lieferant.
COUNT(*) zhlt die verschiedenen Tupel.
In der HAVING-Klausel wird die Bedingung fr jede Gruppe unabhngig
ausgewertet.

29

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiele: GROUP BY, ORDER BY, und HAVING


Beispiele:
Erstelle eine alphabetisch sortierte Liste aller Waren, in der fr jede Ware der
minimale, maximale und der Durchschnittspreis angegeben ist:
SELECT Ware, MIN (Preis), MAX (Preis), AVG (Preis) FROM Lieferant
GROUP BY Ware
ORDER BY Ware
Welche Waren werden nur von einem Lieferanten geliefert?
SELECT Ware FROM Lieferant
GROUP BY Ware
HAVING COUNT(*) = 1

30

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

LName

Ware

LAdr

Preis

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

Milan AG

Mehl

Grner Weg 5 Kln

0.93

Milan AG

Zucker

Grner Weg 5 Kln

0.69

Beispiel: ORDER BY
Beispiel:
Sortiere die Bestellungen nach Waren, fr jede Ware die Kunden absteigend nach
der Gre der Bestellung:
SELECT * FROM Auftrag
ORDER BY Ware ASC, Menge DESC

31

KName

LName

Ware

Menge

Russel

Mertens AG

Mehl

10

Huber

Glaser AG

Milch

Kant

Milan AG

Mehl

22

Mller

Milan AG

Milch

30

Russel

Trieste AG

Salz

15

Huber

Mertens AG

Mehl

Mller

Milan AG

Zucker

12

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Selfjoin
Tupelvariablen:
Anfragen knnen sich auch auf zwei oder mehrere Tupel in einer Relation beziehen.
Das entspricht eine Selfjoin, d.h. einem Join der Relation mit sich selbst.
Um Selfjoins in SQL formulieren zu knnen, werden die Relationen in der FROMKlausel benannt.
Formal entspricht dies der Einfhrung von (mehreren) Tupelvariablen fr eine Relation.

Beispiel:
Gib Namen und Adressen aller Kunden, deren Kontostand kleiner als der von
Huber ist, aus.
SELECT K1.KName, K1.KAdr
FROM Kunde K1, Kunde K2
WHERE K1.Saldo < K2.Saldo AND K2.KName = Huber

32

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiel: Selfjoin
Beispiel:
Finde alle Paare von Lieferanten, die eine gleiche Ware liefern.
SELECT DISTINCT L1.LName, L2.LName
FROM Lieferant L1, Lieferant L2
WHERE L1.Ware = L2.Ware
AND L1.LName < L2.LName
LName
Ware
LAdr

33

Preis

Mertens AG

Mehl

Saagengasse 13 Kln

1.97

Glaser AG

Milch

Kalossenweg 8 Kln

1.49

Mller AG

Salz

Hinterhausen 12 Kln

0.99

Milan AG

Milch

Grner Weg 5 Kln

1.19

Trieste AG

Salz

Kirchenstrasse 7 Kln

0.53

Milan AG

Mehl

Grner Weg 5 Kln

0.93

Milan AG

Zucker

Grner Weg 5 Kln

0.69

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Joins
Klassischer Stil:
SELECT K.KName, Ware
FROM Kunde K, Auftrag
WHERE K.KName = Auftrag.KName

Kunde (KName, KAdr, Saldo)


Lieferant (LName, Ware, LAdr, Preis)
Auftrag (KName, LName, Ware, Menge)

Seit SQL92 ("ANSI-Stil"): Natrlicher Verbund (implizit ber gleiche Attribute)


SELECT KName, Ware
FROM Kunde NATURAL JOIN Auftrag

Theta-Join mit expliziter Join-Bedingung: ON-Klausel


SELECT Kunde.KName, Ware
FROM Kunde JOIN Auftrag
ON Kunde.KName = Auftrag.KName

Analog auch andere Join-Arten


LEFT (OUTER) JOIN
RIGHT (OUTER) JOIN
FULL (OUTER) JOIN

34

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

bersicht: Anatomie von SQL-Anfragen

Klausel

Reihenfolge

SELECT

(DISTINCT)

35

Semantik (was passiert?)


Projektion: bernehme nur die genannten Spalten, streiche die restlichen;
wende Funktionen (sum, avg, ...) an
Streiche Duplikate aus Ergebnis-Tabelle

FROM

Bilde das kartesische Produkt (... , ...) oder


den Join (... JOIN ... ON ...) ber die angegebenen Tabellen

WHERE

Selektion: streiche alle Tupel des Joins/kart. Produkts, die die WHEREBedingung nicht erfllen

GROUP BY

Gruppiere Tupel

HAVING

Streiche alle Tupel der Gruppierung, die die HAVING-Bedingung nicht erfllen

ORDER BY

Sortiere das Ergebnis

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Weitere Konzepte: nderungen der Datenbank


Einfgen
INSERT INTO <Relationen-Name> [(<Attributname>{, <Attributname>})]
VALUES (<Konstante>{, <Konstante>})

oder
INSERT INTO <Relationen-Name> [(<Attributname>{, <Attributname>})]
SELECT FROM WHERE

Lschen
DELETE FROM <Relationen-Name> [WHERE <Bedingung>]

Verndern
UPDATE <Relationen-Name>
SET <Attributname> = <Ausdruck>{,<Attributname> = <Ausdruck>}
[WHERE <Bedingung>]

Beispiel: Fge den Kunden Schmidt mit dem Kontostand 0 EURO ein.
INSERT INTO Kunde (KName, Saldo)
VALUES (Schmidt, 0)

36

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5

Beispiele fr nderungen
Beispiel: Huber bestellt von allem, was auch Mller bestellt hat, die doppelte Menge.
INSERT INTO Auftrag
SELECT Huber, Lname, Ware, Menge*2
FROM Auftrag
WHERE KName = Mller

Beispiel: Lsche alle Auftrge fr Mehl.


DELETE FROM Auftrag
WHERE Ware = Mehl

Beispiel: Erhhe den Kontostand von Kant um 200.


UPDATE Kunde
SET Saldo = Saldo + 200
WHERE KName = Kant

37

Datenbanken und Informationssysteme 2016


Prof. Dr. Matthias Jarke | Prof. Dr. Stefan Decker
Lehrstuhl Informatik 5