1 rückblick create table statement prof. dr. fabian glasen, datenbanken, februar 2002
TRANSCRIPT
![Page 1: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/1.jpg)
1
Rückblick
CREATE TABLE
Statement
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 2: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/2.jpg)
2
CREATE TABLE
Allgemein:
CREATE TABLE table_name(spaltendefinitionsliste[,tabellenintegritätsregelliste]);
spaltendefinition ::=spaltenname typangabe [default-Klausel]
[spaltenintegritätsregelliste]
tabellenintegritätsregel ::=
check-klausel | primary_key-klausel |
unique-klausel | foreign-key-klausel
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 3: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/3.jpg)
3
CREATE TABLE Beispiel
CREATE TABLE bestellung (bestellnr INTEGER NOT NULL,kundennr INTEGER NOT NULL,bestelldatum DATE NOT NULL,lieferdatum DATE,rechnungsbetrag DECIMAL(8,2),CHECK(bestelldatum < lieferdatum),PRIMARY KEY (bestellnr),FOREIGN KEY (kundennr) REFERENCES KundeON UPDATE CASCADEON DELETE CASCADE);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 4: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/4.jpg)
4
SQL-DatentypenINTEGER (4 Byte) 123456, -653437, +12SMALLINT (2 Byte) 1234. –6354NUMERIC(p,q) (Dezimalzahl genau p Stellen, q hinter „.“)DECIMAL(p,q) (Dezimalzahl mind. p Stellen, q hinter „.“) FLOAT(p) (Gleitpunktzahlen mindestens p Stellen)
2.96E+8CHARACTER(n) Zeichenketten mit genau n ZeichenCHARACTER VARYING(n) (Zeichenketten mit höchstens n)DATE DATE'1995-06-22'TIME(p) TIME'09:18:05.23,
(p: Nachkommastellen für Sekunden) TIMESTAMP(p) Datum + Uhrzeit
TIMESTAMP'1995-06-06 10:00'BOOLEAN TRUE, FALSE, UNKNOWNBIT(n) Bitketten mit genau n Bits
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 5: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/5.jpg)
5
Übungsaufgabe
Schemadefinition
Vertriebsdatenbank
(Web-Shop)
in SQL
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 6: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/6.jpg)
6
Produkt Bestellung Kunde
Lieferant
Spediteur Mitarbeiter
Kategorie
Offerte
liefert beschreibt
liefertaus
Posten bestellt
bearbeitetofferiert
PNr BNr KuNr
LNr KaNr
SNr MNr ONrbearbeitet
Offerte
n m n 1
n
1
n
1
n
1
n
1
1 n
1
n
Anzahl BDatumPreis
LPreisLDATUM
OPosten
n
mAnzahlPreis
![Page 7: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/7.jpg)
7
Tabellen Vertriebsdatenbank
Kunde(KuNr, Name, Adresse, Rabatt)
Produkt(PNr, P-Name, KaNr, LNr, Preis, LPreis)
Bestellung(BNr,KuNr,MNr,SNr,Bestelldatum, Lieferdatum)
Lieferant(LNr,Name, Adresse)
Kategorie(KaNr,Name)
Spediteur(SNr, Name, Adresse)
Mitarbeiter(MNr,Name, Adresse)
Offerte(Onr, KuNr, MNr)
Posten(PNr,BNr,Anzahl)
Oposten(PNr,ONr,Anzahl,Preis)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 8: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/8.jpg)
8
Lösungsbeispiel 1
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Kunde (
KuNr integer PRIMARY KEY,
Name char(20) NOT NULL,
Adresse char(50),
Rabatt Decimal(3,1)
);
![Page 9: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/9.jpg)
9
Lösungsbeispiel 2
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Bestellung (BNr integer PRIMARY KEY,KuNr integer NOT NULL,MNr integer,SNr integer,Bestelldatum Date DEFAULT CURRENT_DATE,Lieferdatum Date,FOREIGN KEY (KuNr) REFERENCES Kunde
ON DELETE NO ACTION ON UPDATE CASCADE,FOREIGN KEY (MNr) REFERENCES Mitarbeiter
ON DELETE SET NULL ON UPDATE CASCADE,FOREIGN KEY (SNr) REFERENCES Spediteur
ON DELETE SET NULL ON UPDATE CASCADE);
![Page 10: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/10.jpg)
10
Lösungsbeispiel 3
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Posten (
BNr integer,
PNr integer,
Anzahl integer NOT NULL,
PRIMARY KEY (BNr, PNr),
FOREIGN KEY (BNr) REFERENCES Bestellung ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (PNr) REFERENCES Produkt ON DELETE NO ACTION ON UPDATE CASCADE
);
![Page 11: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/11.jpg)
11
Aufgabe Bibliothek
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
• Modellieren Sie eine Bibliothek (Bücher/ Ausleihe / Autoren / Benutzer (Ausleihende) / Vormerkungen) im E/R-Modell (möglichst redundanzfrei).Folgendes sollte dabei berücksichtigt werden:
• Ein Buch kann mehrere Autoren haben.• Ein Buch kann in verschiedenen Auflagen vorliegen.• Jede Auflage eines Buches kann in mehreren Exemplaren in
der Bibliothek vorhanden sein.• Bücher sollten nach explizit zugeordneten Schlagworten
gesucht werden können.• Übersetzen Sie das E/R-Modell möglichst redundanzfrei ins
relationale Modell (Datenbankschema in Tabellenform) • Geben Sie alle SQL-Kommandos an, die zur Anlage der
Tabellen notwendig sind (inklusive aller sinnvollen Integritätsregeln).
![Page 12: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/12.jpg)
Bibliotheks-anwendung
![Page 13: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/13.jpg)
13
Buch Autor
Buch-auflage
Buch-exemplar
Benutzer
hatvorgemerkt
leihtaus
Autorvon
Schlagwortvon
ISBN Titel
Verlag
ANr Name
Vorname
SNr
Wort
BNr Name
Adresse
VornameBibNr
Auflage
Preis
hatAufl
hatExemp
n m
n
m
1
n
1
n m 1
n mStandort
Ort
Jahr
Datum
?
Datum
![Page 14: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/14.jpg)
14
Bibliothek - Tabellenmodell
Autor(Anr, Name, Vorname)Buch(ISBN, Titel, Verlag, Ort)Autor-von(Anr,ISBN)Schlagwort(SNr, Wort)Schlagwort-von(SNr,ISBN)Buchauflage(Auflage, Preis, Jahr, ISBN)Buchexemplar(BibNr, Standort, ISBN, Auflage)Benutzer(BNr, Name, Vorname, Adresse)Leiht-aus(BibNr,BNr,Datum)Hat-vorgemerkt(BNr,BibNr, Datum)
![Page 15: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/15.jpg)
BibliothekDatenbankschema
CREATE TABLE
Statements
![Page 16: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/16.jpg)
16
Autor
CREATE TABLE Autor (
ANr INTEGER PRIMARY KEY,
Name CHAR(30) NOT NULL,
Vorname CHAR(30)
);
![Page 17: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/17.jpg)
17
Buch
CREATE TABLE Buch (
ISBN INTEGER PRIMARY KEY,
Verlag CHAR(30) NOT NULL,
Titel CHAR(30) NOT NULL,
Ort CHAR(30)
);
![Page 18: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/18.jpg)
18
Autor-von
CREATE TABLE Autor-von (
ISBN INTEGER,
ANr INTEGER,
PRIMARY KEY ( ISBN, ANr),
FOREIGN KEY ISBN REFERENCES Buch ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ANr REFERENCES Autor ON DELETE CASCADE ON UPDATE CASCADE
);
![Page 19: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/19.jpg)
19
Schlagwort
CREATE TABLE Schlagwort (
SNr INTEGER PRIMARY KEY,
Wort CHAR(30) NOT NULL
);
![Page 20: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/20.jpg)
20
Schlagwort von
CREATE TABLE Schlagwort-von (ISBN INTEGER
FOREIGN KEY REFERENCES Buch,SNr INTEGER
FOREIGN KEY REFERENCES Schlagwort,
PRIMARY KEY ( ISBN, SNr));
![Page 21: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/21.jpg)
21
Buchauflage
CREATE TABLE Buchauflage (ISBN INTEGER,Auflage INTEGER,Preis NUMERIC(8,2),Jahr CHAR(4),PRIMARY KEY(ISBN, Auflage),FOREIGN KEY ISBN REFERENCES Buch ON
DELETE CASCADE ON UPDATE CASCADE);
![Page 22: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/22.jpg)
22
Buchexemplar
CREATE TABLE Buchexemplar (BibNR INTEGER PRIMARY KEY,Standort CHAR(10),ISBN INTEGER NOT NULL,Auflage INTEGER NOT NULL,FOREIGN KEY ISBN REFERENCES Buchauflage
ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY Auflage REFERENCES Buchauflage
ON DELETE CASCADE ON UPDATE CASCADE);
![Page 23: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/23.jpg)
23
Benutzer
CREATE TABLE Benutzer (
BNr INTEGER PRIMARY KEY,
Name CHAR(30) NOT NULL,
Vorname CHAR(30) NOT NULL,
Adresse CHAR(60) NOT NULL
);
![Page 24: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/24.jpg)
24
Leiht-aus
CREATE TABLE leiht-aus (
BibNr INTEGER FOREIGN KEY REFERENCES Buchexemplar,
BNr INTEGER FOREIGN KEY REFERENCES Benutzer,
PRIMARY KEY (BNr, BibNr)
);
![Page 25: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/25.jpg)
25
Hat-vorgemerkt
CREATE TABLE hat-vorgemerkt (BibNr INTEGER FOREIGN KEY
REFERENCES Buchexemplar,BNr INTEGER FOREIGN KEY
REFERENCES Benutzer,Datum DATE,PRIMARY KEY (BNr, BibNr));
![Page 26: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/26.jpg)
SELECTAnweisung
![Page 27: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/27.jpg)
SELECTmit einer Tabelle
![Page 28: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/28.jpg)
28
SELECT - Anweisung
• Die SELECT-Anweisung dient der Definition und Ausgabe einer virtuellen Tabelle auf der Basis vorhandener Tabellen und Abfragen
• Die SELECT-Klausel realisiert die Projektion
• Die Selektion erfolgt in den WHERE- und HAVING-Klauseln
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 29: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/29.jpg)
29
SELECT - Anweisung
Unterscheidung:
• SELECT-Anweisung
• Abfrage-Anweisung ist eine SELECT-Anweisung ohne ORDER BY-Klausel
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 30: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/30.jpg)
30
SELECT - Anweisung
allgemeinste Form:
SELECT [DISTINCT | ALL] A1, ..., Ak, <AGG>(Ak+1), ..., <AGG>(Ak+n)FROM R1, ..., Rm[WHERE <condition1>][GROUP BY Ai1, ..., Ail][HAVING <condition2>][ORDER BY Ap1, ..., Apm ]
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 31: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/31.jpg)
31
SELECT -Reihenfolge
Syntaktische Reihenfolge der Klauseln
SELECT [DISTINCT | ALL] A1, ..., Ak, <AGG>(Ak+1), ..., <AGG>(Ak+n)FROM R1, ..., Rm[WHERE <condition1>][GROUP BY Ai1, ..., Ail][HAVING <condition2>][ORDER BY Ap1, ... Apm ]
Die angegebene Reihenfolge der Klauseln ist zwingend!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 32: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/32.jpg)
32
SELECT -Reihenfolge
„Zeitliche“ Abarbeitung der Klauseln
1. FROM-Klausel
2. [WHERE-Klausel]
3. [GROUP BY - Klausel]
4. [HAVING -Klausel]
5. SELECT -Klausel
6. [ORDER BY ... ]
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 33: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/33.jpg)
33
SELECT - [DISTINCT | ALL]
SELECT-Kommando ([DISTINCT | ALL]):
SELECT [DISTINCT | ALL] A1, ..., Ak, FROM R1, ..., Rm
DISTINCT : alle identische Zeilen in der Ergebnistabelle werden zusammengefasst.
ALL : alle auftretenden Tupel werden angezeigt (Voreinstellung)
Die Angabe ist optional.Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 34: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/34.jpg)
34
SELECT - Klauseln
SELECT-Klausel
leistet die Projektion auf die gewünschten Attribute. Es werden die Attribute aufgelistet, die die Ergebnisliste enthalten soll.
• „*“ listet alle Attribute der Tabelle auf.
• Integriert auch arithmetische Operationen und Aggregatfunktionen
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 35: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/35.jpg)
35
SELECT - Klauseln
FROM-Klausel
hier werden die Tabellen aufgelistet, aus denen die Daten entnommen werden sollen.
ermöglicht Umbenennungen durch „Tupelvariablen“ bzw. ALIAS-Namen
die verwendeten Relationen werden mittels des kartesischen Produktes verknüpft
Verbünde (JOINS) können direkt definiert werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 36: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/36.jpg)
36
SELECT - Klauseln
WHERE-Klausel• leistet die Selektion der gewünschten Tupel aus den
betrachteten Tabellen, durch Angabe einer Bedingung.
• Geschachtelte Unterabfragen sind in der WHERE-Klausel möglich.
• Erlaubt die Formulierung von Verbundbedingungen um z.B. aus einem kartesischen Produkt einen Gleichverbund (EQUI-JOIN) zu machen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 37: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/37.jpg)
37
SELECT - Klauseln
GROUP BY-Klausel
• fasst alle Tupel gemäss Gleichheit bezüglich der Werte der angegebenen Attribute jeweils in einer Gruppe zusammen und erzeugt eine Tabelle, in der Attribute auftreten, die für jede Gruppe einen Wert haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 38: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/38.jpg)
38
SELECT - Klauseln
HAVING-Klauselleistet die Selektion der gewünschten Tupel aus
der Ergebnistabelle, die durch die GROUP BY Klausel erzeugt wurde.
ORDER BY-Klausel
sorgt für eine sortierte Ausgabe der Ergebnistabelle
gehört nicht zur Abfrage-Anweisung
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 39: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/39.jpg)
39
SELECT - WHERE-Klausel
[WHERE <condition1>]
condition 1 ist dabei logischer Ausdruck
logischer Ausdruck
• atomarer logischer Ausdruck
• (a AND b), (a OR b), NOT b
wobei a und b logische Ausdrücke sind.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 40: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/40.jpg)
40
SELECT - WHERE-Klausel
Alle Tupel, für die der Vergleich das Resultat FALSE oder UNKNOWN (NULL) ergibt, erscheinen nicht im Ergebnis.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 41: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/41.jpg)
41
SELECT - WHERE-Klausel
[WHERE <condition1>]
atomarer logischer Ausdruck• Term1 Vergleichsoperator Term 2
Vergleichsoperatoren: {=, <, >, <>,<=, >=}
Beispiel: kundennr*24 = 19+7
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 42: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/42.jpg)
42
SELECT - WHERE-Klausel
[WHERE <condition1>]
Term• Spaltenname (z.B.: „name“, „kundennr“) • Vergleichswert ( 24, NULL, Peter)• Funktion auf Termen (kundennr*24 / 19+7)
Numerische Operatoren: {+. -, *, /}
viele zusätzliche Funktionen
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 43: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/43.jpg)
43
SELECT - WHERE-Klausel
Zusätzliche Funktionen• Aggregatfunktionen
(COUNT, SUM, AVG, MAX, MIN etc.)• Datums- und Zeitfunktionen
(LAST_DAY, NEXT_DAY, etc.)• Arithmetische Funktionen
(ABS, LN, LOG, COS SIN etc)• Zeichenfunktionen (LENGTH, CONCAT, etc.)• Umwandlungsfunktionen
(TO-CHAR, TO-NUMBER)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 44: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/44.jpg)
44
SELECT - WHERE-Klausel
Atomarer logischer Ausdruck (Beispiel):
kundennr = 103
ort <> ‘Basel‘
lieferdatum IS NULL
lieferdatum IS NOT NULL
mindestbestand = 400
mindestbestand / 2 = 12*24
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 45: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/45.jpg)
45
SELECT - WHERE-Klausel
logischer Ausdruck (Beispiel):
kundennr = 103 AND ort <> ‘Basel‘
lieferdatum IS NULL OR mindestbestand = 400
lieferdatum IS NOT NULL AND kundennr > 100
NOT mindestbestand / 2 = 12*24
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 46: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/46.jpg)
46
SELECT - NULL-Werte
NULL-Werte in Vergleichen
liefermenge = NULL
hat als Ergebnis „unknown“ (NULL)
Deshalb muss die Abfrage anders aussehen:
liefermenge IS NULL
bzw.
liefermenge IS NOT NULL
Diese Abfragen sind wahr oder falsch!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 47: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/47.jpg)
47
SELECT
Beispiel Null-Werte:
SELECT bestellnr, artikelnr, bestellmenge, liefermenge
FROM position
WHERE liefermenge IS NULL;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 48: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/48.jpg)
48
SELECT - Projektion und Selektion
Beispiel 1:
SELECT kundennr, name, status
FROM kunde
WHERE status = ‘S‘;
Gibt alle Kundeneinträge mit status =„S“ aus, projiziert auf die Attribute „kundennr, name, status“, der Tabelle kunde.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 49: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/49.jpg)
49
SELECT - Projektion und Selektion
Beispiel 2:
SELECT *
FROM kunde
WHERE status = ‘S‘;
Gibt alle Kundeneinträge mit status =„S“ aus, projiziert auf alle Attribute der Tabelle kunde.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 50: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/50.jpg)
50
SELECT
Beispiel 3:
SELECT bestellnr, artikelnr, bestellmenge, liefermenge
FROM position
WHERE liefermenge <= bestellmenge * 0.9;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 51: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/51.jpg)
51
SELECT WHERE-Klausel
BETWEEN (allgemein)BETWEEN Wert1 AND Wert2Es muss gelten: Wert 1 <= Wert 2Beispiel:SELECT bestellnr, kundennr, bestelldatum,
FROM bestellungWHERE bestelldatum BETWEEN DATE‘2000-04-01‘ AND DATE‘2000-04-30‘;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 52: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/52.jpg)
52
SELECT WHERE-Klausel
SELECT bestellnr, kundennr, bestelldatum, FROM bestellung
WHERE bestelldatum BETWEEN DATE'2000-04-01' AND DATE'2000-04-30';
ist gleichbedeutend mit:
SELECT bestellnr, kundennr, bestelldatum, FROM bestellung
WHERE bestelldatum >= DATE'2000-04-01' AND bestelldatum <= DATE'2000-04-30';
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 53: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/53.jpg)
53
SELECT WHERE-Klausel
IN / IN VALUES (allgemein):
Attribut IN (werteliste)
Attributliste IN VALUES (tupel-werteliste)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 54: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/54.jpg)
54
SELECT WHERE-Klausel
Beispiel (IN) :
SELECT bestellnr, kundennr, bestelldatum, FROM bestellung
WHERE kundennr IN ( 2, 5, 38, 44, 76, 109);
Beispiel (IN VALUES) :
...
WHERE (plz, ort) IN VALUES ('78462', 'Konstanz'),('12345', 'Xydorf');
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 55: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/55.jpg)
55
SELECT WHERE-Klausel
SELECT bestellnr, kundennr, bestelldatum, FROM bestellung
WHERE kundennr IN (44, 76, 109);
ist abkürzende Schreibweise für:
SELECT bestellnr, kundennr, bestelldatum, FROM bestellung
WHERE kundennr = 44OR kundennr = 76
OR kundennr = 109;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 56: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/56.jpg)
56
SELECT WHERE-Klausel
LIKE (allgemein):
LIKE musterPattern Matching-Operation / Suchen nach
einem Textmuster, statt einem eindeutig vorgegebenen Attributwert
Platzhaltersymbole:% (Prozentzeichen) (vertritt kein, ein, oder
beliebig viele Zeichen
_ (Unterstrich) (vertritt genau ein beliebiges Zeichen)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 57: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/57.jpg)
57
SELECT WHERE-Klausel
LIKE (Beispiel):SELECT artikelnr, bezeichnung, bestandFROM artikelWHERE bezeichnung LIKE ‘%Tee%‘;liefert als Ergebnisse z.B.
– Ceylon-Tee– China Tee– grüner Tee
„Eistee“ würde nicht gefunden, weil Gross/Kleinschreibung strikt beachtet wird.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 58: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/58.jpg)
58
SELECT WHERE-Klausel
Negationen der Operationen sind auch möglich:
spalte NOT BETWEEN Wert1 AND WERT2
Spalte NOT IN (werteliste)
spalte NOT LIKE Wert
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 59: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/59.jpg)
59
SELECT mit virtuellen Spalten
Beispiel:SELECT bestellnr, artikelnr, bestellmenge,
liefermenge, bestellmenge - liefermenge AS fehlmenge
FROM position
Ergebnis (z.B.):bestellnr artikelnr bestellmenge liefermenge fehlmenge
151 G002 4 4 0
152 K004 10 5 5
152 K006 16 3 13
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 60: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/60.jpg)
60
SELECT - ORDER BY
Die Reihenfolge der Anzeige der Datentupel kann auch gemäss mehreren Attributen erfolgen:
Beispiel:
SELECT zahlungsart, plz, nameFROM kundeORDER BY zahlungsart, plz;
Im Beispiel nach „zahlungsart“ und „plz“Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 61: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/61.jpg)
61
SELECT – GROUP BY
GROUP BY ermöglicht Gruppierungen innerhalb der Relationen.
Es werden jeweils spezielle Tupel zu einer Gruppe zusammen gefasst.
Die Aggregatfunktionen werden dann pro Gruppe und nicht global auf die gesamte Relation angewendet.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 62: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/62.jpg)
62
SELECT – GROUP BY
GROUP BY wird verwendet wenn man Teilmengen von Tupeln einer Relation zusammen fassen will, z.B. um die Aggregatfunktionen auf die so gebildeten Teilmengen anwenden zu können.
Entscheidend für die Gruppenbildung sind gleiche Werte in einer bestimmten Spalte bzw. in einer Spaltenliste.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 63: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/63.jpg)
63
SELECT – GROUP BY
Mögliche sinnvolle Gruppenbildungen mit anschliessender Aggregation:
• Alle Bestellungen eines Kunden
• alle Positionen einer Bestellung
• alle Positionen, in denen ein bestimmter Artikel auftaucht
• alle Kunden einer Stadt
• alle Mitarbeiter einer Abteilung
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 64: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/64.jpg)
64
SELECT – GROUP BY
GROUP BY (allgemein):
SELECT gruppenausdrucksliste
FROM tabelle
GROUP BY spaltenliste
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 65: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/65.jpg)
65
SELECT – GROUP BY
GROUP BY (allgemein):gruppenausdruck ::=
MIN (ausdruck1) | MAX (ausdruck1) |
AVG (ausdruck1) | SUM (ausdruck1) |
COUNT (ausdruck1) |
COUNT ( DISTINCT ausdruck1) | COUNT (*) |
gruppenspalte |
ausdruck2
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 66: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/66.jpg)
66
SELECT – GROUP BY
GROUP BY (allgemein) / Erläuterung:Ausdruck1: beliebiger Ausdruck
Gruppenspalte: Spalte, die in der GROUP BY-Klausel auftritt
Ausdruck2: Ausdruck, der nur Aggregatfunktionen oder Gruppenspalten verwenden darf.
D.h.: in der Gruppenausdrucksliste dürfen nur Aggregatfunktionen oder Attribute vorkommen, die auch in der GROUP BY-Klausel vorkommen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 67: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/67.jpg)
67
SELECT – GROUP BY
Beispiel für Ausdrucksliste:SELECT
KaNr AS Kategorienummer
COUNT(artikelnr) AS Bestellmenge,
SUM(Listenpreis) AS PREISSUMME,
AVG(Listenpreis) AS DURSCHSCHNITTSPREIS
MIN(Listenpreis) AS KLEINSTER_PREIS
MAX(Listenpreis) AS GRÖSSTER-PREIS
FROM Artikel
GROUP BY KaNr;Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 68: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/68.jpg)
68
SELECT – GROUP BY
Beispiel 1 für GROUP BY:
Wie oft hat jeder Kunde bestellt?
SELECT Kundennr, COUNT(*) AS BESTELL-Anzahl
FROM bestellung
GROUP BY Kundennr;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 69: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/69.jpg)
69
SELECT – GROUP BY
Beispiel 1 für GROUP BY:Wie oft hat jeder Kunde bestellt?Ergebnis:
Kundennr BESTELL-ANZAHL
103 4
110 7
181 9
201 6
400 5
471 5
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 70: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/70.jpg)
70
SELECT – GROUP BY
Beispiel 2 für GROUP BY:Für jeden Artikel (jedes Produkt) ist die Summe der Bestellmengen (Anzahl) gesucht:
SELECT artikelnr, SUM(Bestellmenge)
FROM position
GROUP BY artikelnr;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 71: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/71.jpg)
71
SELECT – GROUP BY
Beispiel 2 für GROUP BY:Anzahl der Bestellungen pro ArtikelErgebnis:
artikelnr sum(Bestellmenge)
G003 49
K110 78
G281 95
K501 62
S300 51
K331 52
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 72: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/72.jpg)
72
SELECT – GROUP BY
Beispiel 3 für GROUP BY:Durchschnittliche Differenz zwischen Lagerbestand und Mindestbestand aller Artikel für alle Lagerplätze gesucht:
SELECT lagerplatz, AVG(bestand - mindestbestand)
FROM artikel
GROUP BY lagerplatz;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 73: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/73.jpg)
73
SELECT – GROUP BY
Gruppierungsfunktionen können auch auf virtuelle Spalten angewendet werden.
Die Ergebnistabellen sind echte Relationen, die nur verschiedene Tupel enthalten, keine Tupel treten mehrfach auf.
Die Gruppierungsattribute sollten in der SELECT-Klausel angegeben werden. Ansonsten ist keine vernünftige Zuordnung möglich.
Es gibt pro Gruppe und pro Attribut nur noch einen Wert, der durch die Aggregatfunktion berechnet wird.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 74: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/74.jpg)
74
SELECT – GROUP BY/ HAVING
Will man den Output bezüglich der zugehörigen Summenfunktion (oder bezüglich einer anderen Aggregatsfunktion) limitieren, (z.B. wenn man nur die Läden mit aggregierten Verkaufswerten über 1,500 DM erhalten will), muss man statt der WHERE Klausel, die HAVING Klausel verwenden, die speziell für Aggregatfunktionen vorgesehen ist.
Die HAVING Klausel steht immer unmittelbar hinter der GROUP BY Klausel.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 75: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/75.jpg)
75
SELECT – GROUP BY
HAVING-Klausel:Mit der HAVING-Klausel kann eine Selektion nach der
Gruppenbildung erfolgen. Sie enthält selbst meist eine Aggregatfunktion:
Allgemein:GROUP BY spaltenliste
HAVING bedingung
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 76: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/76.jpg)
76
SELECT – GROUP BY
HAVING-Klausel:Mit der HAVING-Klausel kann eine Selektion nach der
Gruppenbildung erfolgen:
Beispiel 1:SELECT artikelnr, SUM(Bestellmenge)
FROM position
GROUP BY artikelnr
HAVING SUM(Bestellmenge) > 60 ;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 77: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/77.jpg)
77
SELECT – GROUP BY
Beispiel 1 für GROUP BY / HAVING:Anzahl der Bestellungen pro Artikel grösser als 60
Ergebnis:
artikelnr sum(bestellmenge)
K110 78
G281 95
K501 62
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 78: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/78.jpg)
78
SELECT – GROUP BY
Beispiel 2:Alle Artikel, für die noch offene Bestellposten existieren.
SELECT artikelnr, SUM(liefermenge), SUM(bestellmenge)
FROM position
GROUP BY artikelnr
HAVING SUM(liefermenge) < SUM(bestellmenge);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 79: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/79.jpg)
79
SELECT – Aggregat-Funktionen
NULL-Marken
Nullmarken werden durch Aggregatfunktionen nicht berücksichtigt!!!
Bei SUM gilt: (NULL = 0)
MIN, MAX, AVG, COUNT: keine Berücksichtigung von NULL-Werten!
COUNT(*) zählt alle Datensätze.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 80: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/80.jpg)
80
Beispieltabelle
Ladenname Verkauf Datum
Lörrach 1500 Jan-05-2001
Konstanz 250 Jan-07-2001
Lörrach 300 Jan-08-2001
Freiburg 700 Jan-08-2001
Ladeninfo
![Page 81: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/81.jpg)
81
SELECT – GROUP BY
Beispiel:
SELECT Ladenname, SUM(Verkauf) FROM Ladeninfo GROUP BY Ladenname
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 82: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/82.jpg)
82
SELECT – GROUP BY
Resultat:
Ladenname SUM(Verkauf)
Lörrach 1800
Konstanz 250
Freiburg 700
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 83: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/83.jpg)
83
SELECT – GROUP BY/ HAVING
Beispiel:
SELECT Ladenname, SUM(Verkauf) FROM Ladeninfo GROUP BY LadennameHAVING SUM(Verkauf) > 1500
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 84: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/84.jpg)
84
SELECT – GROUP BY/ HAVING
Resultat:
Ladenname SUM(Verkauf)
Lörrach 1800
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 85: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/85.jpg)
85
SELECT – WHERE + GROUP BY
Treten WHERE-Klausel und GROUP BY-Klausel und HAVING-Klausel gemeinsam in einem SELECT-Statement auf, werden sie in folgender Reihenfolge bearbeitet:
1. WHERE-Klausel selektiert auf der Ausgangstabelle
2. Die verbleibenden Tupel werden gemäss GROUP BY gruppiert
3. Zuletzt werden die Gruppen wieder selektiert (gemäss der HAVING-Bedingung)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 86: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/86.jpg)
ALIASEs
![Page 87: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/87.jpg)
87
SELECT – ALIAS
Zwei Typen von ALIASEs werden häufig verwendet:
• Spalten Alias• Tabellen Alias
Falls kein Tabellen-ALIAS definiert ist, kann der Tabellenname zur Unterscheidung gleicher Attributnamen verschiedener Tabellen verwendet werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 88: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/88.jpg)
88
SELECT – ALIAS
Spalten Aliases
werden verwendet, um den Output besser lesbar zu machen.
Sie dienen u.a. der Verbesserung der Lesbarkeit von Spaltenüberschriften wie z.B. bei SUM(Verkauf) AS Verkaufssumme.
Dies ist besonders sinnvoll, wenn komplexe arithmetische Operationen als Spaltenüberschriften auftauchen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 89: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/89.jpg)
89
SELECT – ALIAS
Tabellen Aliases
• werden direkt hinter dem Tabellen-Namen in der FROM Klausel definiert (FROM KUNDE AS K).
• Sind unverzichtbar, wenn in den verwendeten Tabellen Attribute mit gleichen Namen vorkommen
• Sie sind sinnvoll, wenn in einer Abfrage mehrere Tabellen auftreten und unverzichtbar, wenn eine Tabelle mehrfach in der Anfrage verwendet wird.
• insbesondere wenn man Informationen aus zwei Tabellen miteinander verknüpfen will, d.h. Vorteile ergeben sich vor allem im Zusammenhang mit joins.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 90: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/90.jpg)
90
SELECT – ALIAS
Tabellen ALIAS
tabellenreferenz ::=
tabellenname [ [AS] aliasname]
Der Zugriff auf ein Attribut „spaltenname“ der Tabelle erfolgt dann durch
[aliasname.]spaltenname
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 91: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/91.jpg)
91
SELECT – ALIAS
Tabellen ALIAS
tabellenreferenz ::=
tabellenname [ [AS] aliasname]
Beispiele:• kunde• kunde AS k• kunde k
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 92: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/92.jpg)
92
SELECT – ALIAS
Beispiel:
SELECT A1.Ladenname Laden , SUM(A1.Verkauf) Total-Verkauf FROM Ladeninfo A1GROUP BY A1.Ladenname ;
Beide Alias-Typen werden direkt hinter den Bezeichner, den sie als Alias vertreten sollen, geschrieben (getrennt durch ein Leerzeichen).
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 93: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/93.jpg)
93
SELECT – ALIAS
Resultat:
Laden Total-Verkauf
Lörrach 1800
Konstanz 250
Freiburg 700
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 94: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/94.jpg)
94
SELECT – ALIAS
Der Nutzen von Tabellen-Aliases ergibt
sich im Zusammenhang mit Verbünden
(Joins).
Tabellen-Aliases sind unverzichtbar bei
Self-Joins.Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 95: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/95.jpg)
95
SELECT - Reihenfolge
Sequentielle Auswertungsreihenfolge:
1. <condition 1> der WHERE-Klausel auswerten.
2. Gruppierung gemäß GROUP BY auswerten.
3. <condition 2> der HAVING-Klausel auswerten.
4. Ergebnis in ORDER BY-Sortierfolge ausgeben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 96: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/96.jpg)
96
Rückblick
SELECT mit einer Tabelle Allgemeine SELECT-Anweisung
SELECT-Klausel
FROM-Klausel
WHERE-Klausel
GROUP BY-Klausel
HAVING-Klausel
ORDER-By-Klausel
Zeitliche Abarbeitung der Klauseln
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 97: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/97.jpg)
97
Rückblick
WHERE-Klausel Abfragen auf Nullwerte (IS NULL) BETWEEN Term1 AND term2 Attribut IN Werteliste Attributliste IN VALUES Tupelwerteliste Bezeichnung LIKE %Tee%
SELECT ausdrucksliste FROM tabelle GROUP BY spaltenliste HAVING bedingung
ALIAS (Spalten- / Tabellen-Alias)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 98: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/98.jpg)
SELECTMehrere Relationen
![Page 99: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/99.jpg)
99
SELECT – Verbund (Join)
Daten werden u.a. zur Vermeidung von Redundanzen in mehreren Tabellen abgelegt (normalisiert).
Um Daten aus mehreren Tabellen zusammen zu führen, verwendet man Verbund-Operatoren (Joins) innerhalb des SELECT-Statements.
Verbünde können zwischen beliebig vielen Tabellen gleichzeitig definiert werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 100: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/100.jpg)
100
SELECT – Verbund (Join)
Es gibt folgende Möglichkeiten, Tabellen zu verknüpfen:
• Innerere Verbünde (Inner Joins)
• Verbindung einer Tabelle mit sich selbst (Self Join)
• Äusserere Verbünde (Outer Joins)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 101: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/101.jpg)
101
SELECT – Innerer Verbund
Der innere Verbund hat folgende Varianten:
– Cross Join
– Natural Join
– Condition Join
– Column name Join
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 102: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/102.jpg)
102
SELECT – Verbund (Join)
Allgemein (für alle Joins):
from-Klausel ::=
tabellenreferenz {jointabelle}
Jointabelle ::=
join_op1 tabelle |
join_op2 tabelle verknüpfung
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 103: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/103.jpg)
103
SELECT – Verbund (Join)
Syntax allgemein (für alle Joins):join_op1 ::=
NATURAL JOIN |
CROSS JOIN |
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
Für diese Joins können gemäss Syntaxdefinition keine zusätzlichen Verknüpfungs-Bedingungen spezifiziert werden!!!
![Page 104: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/104.jpg)
104
SELECT – Verbund (Join)
Syntax allgemein (für alle Joins):join_op2 ::=
[INNER] JOIN |
LEFT OUTER JOIN |
RIGHT OUTER JOIN |
FULL OUTER JOIN
verknüpfung ::=
ON bedingung |
USING (spaltenliste)Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 105: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/105.jpg)
105
SELECT – Verbund
Der Verbund wird in der Regel zwischen zwei Tabellen definiert, kann aber zwischen beliebig vielen Tabellen definiert werden. Dies ist durch „jointabelle“ dargestellt.
Die Reihenfolge der Tabellen spielt nur bei den OUTER-JOINS eine Rolle.
Falls mehrere JOINS in einer Anweisung auftreten, sind Klammern zu setzen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 106: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/106.jpg)
106
SELECT – Verbund (Join)
Durch Angabe einer entsprechenden
Spaltenliste in der SELECT-Klausel
wird die Verbundoperation mit der
Projektion kombiniert.Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 107: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/107.jpg)
107
SELECT – Cross Join
Cross Join = Kreuzprodukt / Kartesisches Produkt
Es werden alle Tupel der involvierten Tabellen miteinander verbunden.
Beispiel:
SELECT *
FROM buch CROSS JOIN ausleih;
Die nachfolgenden Klauseln des SELECT-Statements beziehen sich auf die so generierte Ergebnistabelle (Kreuzprodukt).
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 108: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/108.jpg)
108
SELECT – Cross Join
Beide SELECT-Statements liefern das gleiche Ergebnis:
SELECT *
FROM buch CROSS JOIN ausleih;
SELECT *
FROM buch, ausleih;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 109: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/109.jpg)
109
SELECT – Natural Join
• Beim Natural Join werden die Zeilen beider Tabellen miteinander verbunden, für die die gemeinsamen Attribute beider Tabellen den gleichen Wert haben.
• Die Namen der Attribute müssen dazu übereinstimmen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 110: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/110.jpg)
110
SELECT – Natural Join
Beispiel:
SELECT k.kundennr, k.name, b.bestelldatum
FROM bestellung AS b NATURAL JOIN kunde AS k
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 111: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/111.jpg)
111
SELECT – (Natural Join)
Voraussetzungen damit der natürliche Verbund zwischen zwei Tabellen R und S definiert werden kann:
R und S haben gemeinsame Attributbezeichner A1 bis An
Die Domänen der R.Ai und S.Ai (i = 1, .., n) sind jeweils kompatibel, zumindest können die Werte auf Gleichheit geprüft werden.
Die übrigen Attributbezeichner von R und S sind verschieden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 112: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/112.jpg)
112
SELECT – Condition Join
Condition Join Es wird eine Bedingung angegeben, die in einem Wertevergleich der Attribute der einen Tabelle mit Werten der anderen Tabelle besteht.
Beispiel:
SELECT k.kundennr, k.name, b.bestelldatum
FROM bestellung AS b
JOIN kunde AS k ON k.kundennr = b.kundennr;
Ist die flexibelste Variante Tabellen zu verbinden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 113: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/113.jpg)
113
SELECT – Column Name Join
Column Name Join Kurzform für den Fall, dass die Verbundattribute in beiden Relationen dieselben Namen haben und die Attributwerte auf Gleichheit geprüft werden
Beispiel:
SELECT kundennr, k.name, b.bestelldatum
FROM bestellung AS b
JOIN kunde AS k USING (kundennr);
Keine ALIAS-Angabe bei Attributen nach USING!!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 114: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/114.jpg)
114
SELECT – Old Style Join
Äquivalente Formulierung im
OLD STYLE JOIN (Beispiel):
SELECT k.kundennr, k.name, b.bestelldatum
FROM bestellung b, kunde k
WHERE k.kundennr = b.kundennr ;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 115: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/115.jpg)
115
SELECT – Old Style Join
Beispiel 2:
SELECT *
FROM buch b, ausleih a
WHERE b.inventarnr = a.inventarnr;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 116: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/116.jpg)
116
SELECT – Inner Join
Äquivalente Formulierungen (falls „inventarnr“ das einzige gemeinsame Attribut ist)
SELECT *FROM buch JOIN ausleihON buch.inventarnr = ausleih.inventarnr;
SELECT *FROM buch JOIN ausleihUSING (inventarnr);
SELECT *FROM buch NATURAL JOIN ausleih;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 117: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/117.jpg)
117
Verbund von mehr als zwei Tabellen
Beispiel:
3 Tabellen: kunde, position, bestellung
SELECT k.kundennr, k.name, b.bestelldatum, p.artikelnr
FROM kunde AS k
JOIN bestellung AS b ON b.kundennr = k.kundennr
JOIN position AS p ON p.bestellnr = b.bestellnr
ORDER BY k.kundennr, b.bestelldatum;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 118: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/118.jpg)
118
Verbund von mehr als zwei Tabellen
Beispiel:
Where-Klausel ist weiterhin anwendbar!!!
SELECT k.kundennr, k.name, b.bestelldatum, p.artikelnr
FROM kunde AS k
JOIN bestellung AS b ON b.kundennr = k.kundennr
JOIN position AS p ON p.bestellnr = b.bestellnr
WHERE k.kundennr > 100
ORDER BY k.kundennr, bestelldatum;
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 119: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/119.jpg)
119
SELECT – Selbst-Verbund
Selbst-Verbund = Self Join
Verbindung einer Tabelle mit sich selbst!
Beispiel zur Motivation:
Suche nach Büchern, die die Autoren Vossen und Witt zusammen geschrieben haben?
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 120: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/120.jpg)
120
SELECT – Selbst-Verbund
ISBN Autor
VossenWittElmasriNavatheHullVianu
3-89319-175-53-89319-175-50-8053-1753-80-3729-1285-80-3399-2345-90-4657-1234-9
Buch-Autor
Folgende Anfrage scheitert!
Ausgangstabelle:
![Page 121: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/121.jpg)
121
SELECT – Selbst-Verbund
SELECT ISBN
FROM Buch_Autor
WHERE Autor = 'Vossen' AND Autor = 'Witt' ;
Sie liefert immer die leere Ergebnisrelation, weil der Attributwert eines Tupels im Autorattribut niemals gleichzeitig 'Vossen' und 'Witt' sein kann.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 122: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/122.jpg)
122
SELECT – Selbst-Verbund
Lösung:
SELECT Autor1.ISBN
FROM Buch_Autor Autor1, Buch_Autor Autor2
WHERE Autor1.ISBN = Autor2.ISBN
AND Autor1.Autor= 'Vossen'
AND Autor2.Autor = 'Witt' ;
funktioniert, weil im Kreuzprodukt der Tabelle mit sich selbst die Autoren-Spalte doppelt auftritt und man nun jene Tupel selektieren kann, in denen die ISBN übereinstimmt und die Autoren wie gewünscht vorkommen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 123: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/123.jpg)
123
SELECT – Selbst-Verbund
Kreuzprodukt mit Selektion
Autor2.ISBN Autor2.Autor
VossenWittElmasriNavatheHullVianu
3-89319-175-53-89319-175-50-8053-1753-80-3729-1285-80-3399-2345-90-4657-1234-9
Autor1.ISBN Autor1.Autor
VossenVossenVossenVossenVossenVossen
3-89319-175-53-89319-175-53-89319-175-53-89319-175-53-89319-175-53-89319-175-5
![Page 124: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/124.jpg)
124
SELECT – Selbst-Verbund
Beim Selbstverbund
sind Tabellen-Aliases
unverzichtbar!!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 125: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/125.jpg)
125
SELECT – Äussere Verbunde
Varianten (OUTER JOIN):
• LEFT OUTER JOIN
• RIGHT OUTER JOIN
• FULL OUTER JOIN
Die Reihenfolge der Tabellen ist dabei wichtig!!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 126: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/126.jpg)
126
Äusserer Verbund - Varianten
CB
34
45
BA
12
23
rechtslinksBA C
2 3 4
NATURAL JOIN
BA C
12*
234
*45
FULL OUTER JOIN
BA C
12
23
*4
LEFT OUTER JOIN
BA C
2*
34
45
RIGHT OUTER JOIN
![Page 127: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/127.jpg)
127
SELECT – Äussere Verbunde
Beispiel: LEFT OUTER JOIN
SELECT k.name, b.bestellnr, b.bestelldatum
FROM kunde k
LEFT OUTER JOIN bestellung AS b
ON k.kundennr = b.kundennr ;Liefert eine Liste aller Kunden mit zugehörigen Bestellungen inklusive der Kunden, von denen noch keine Bestellungen vorliegen. ( NULL-Werte)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 128: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/128.jpg)
128
SELECT – Äussere Verbunde
Beispiel: RIGHT OUTER JOIN
SELECT k.name, b.bestellnr, b.bestelldatum
FROM kunde k
RIGHT OUTER JOIN bestellung AS b
ON k.kundennr = b.kundennr ;
liefert die vorhandenen Bestellungen mit den zugehörigen Kunden. ( „zufällig“ keine NULL-Werte bei referentieller Integrität: FOREIGN KEY „b.kundennr“ REFERENCES kunde ).
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 129: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/129.jpg)
129
SELECT – Äussere Verbunde
Beispiel: FULL OUTER JOIN
SELECT k.name, b.bestellnr, b.bestelldatum
FROM kunde k
FULL OUTER JOIN bestellung AS b
ON k.kundennr = b.kundennr ;
wird sehr selten benötigt!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 130: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/130.jpg)
ORDER BY
![Page 131: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/131.jpg)
131
SELECT - ORDER BY
Die ORDER-BYE-Klausel generiert aus
der ungeordneten Menge der
Ergebnistupel eine sortierte/geordnete
Liste nach bestimmten Sortier-Kriterien.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 132: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/132.jpg)
132
SELECT - ORDER BY
Syntax:
ORDER BY attributliste [asc | desc]
asc: aufsteigend (Voreinstellung)
desc: absteigend
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 133: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/133.jpg)
133
SELECT - ORDER BY
Die Reihenfolge der Anzeige der Datentupel kann auch gemäss mehreren Attributen erfolgen:
Beispiel:SELECT plz, name
FROM kundeORDER BY plz, name;
Im Beispiel zuerst nach „plz“ und bei Gleichheit zusätzlich nach „name“
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 134: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/134.jpg)
134
SELECT - ORDER BY
Nicht erlaubt ist die Sortierung nach Attributen, die nicht in der SELECT-Klausel vorkommen also z.B. folgendes:
Beispiel:SELECT plz, name
FROM kundeORDER BY zahlungsart, name;
Im Beispiel erscheint „zahlungsart“ nicht in der SELECT-Klausel!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 135: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/135.jpg)
135
Geschachtelte Anfragen
Beispiel:
SELECT Matrikelnummer
FROM prüft
WHERE Note < (SELECT AVG (Note) FROM prüft);Liefert die Matrikelnummern der Studenten, die zumindest eine Prüfung besser als der gesamte Notendurchschnitt abgelegt haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 136: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/136.jpg)
136
Geschachtelte Anfragen
Beispiel:
SELECT Titel
FROM Bücher
WHERE isbn IN (SELECT isbn FROM Empfiehlt);
Zunächst wird inneres SELECT-Statement ausgeführt. Es liefert Liste aller ISBNs zurück. Dann erfolgt der Vergleich (IN)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 137: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/137.jpg)
Null-Werte und
3wertige Logik
![Page 138: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/138.jpg)
138
NULL-Werte und 3wertige Logik
Wenn ein Attribut den Wert NULL hat, bedeutet dies, dass der Wert fehlt, bzw. dass der Wert unbekannt ist.
NULL ist somit verschieden von dem numerischen Wert 0 und verschieden von dem Leerzeichen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 139: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/139.jpg)
139
NULL-Werte und 3wertige Logik
Um NULL-Werte bei Anfragen an die Datenbank angemessen zu berücksichtigen, reicht die
2wertige Logik nicht aus.
Hierzu benötigt man die
3wertige Logik.
Der NULL-Wert wird dabei mit „unknown“ interpretiert.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 140: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/140.jpg)
140
NULL-Werte und 3wertige Logik
In der 3wertigen LogikW(F) {true, false, ?}
wird der dritte Wahrheitswert
„?“ = „unknown“
als unbekannter Wahrheitswert interpretiert.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 141: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/141.jpg)
141
NULL-Werte in Funktions- und Vergleichsausdrücken
Skalare Ausdrücke (Terme) haben den Wert NULL, sobald ein Nullwert in die Berechnung eingeht.
In allen Aggregatfunktionen bis auf count(*) werden Nullwerte vor Anwendung der Funktion entfernt.
Alle Vergleiche bis (auf zwei Ausnahmen) mit dem Nullwert ergeben den Wahrheitswert „unknown“.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 142: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/142.jpg)
142
NULL-Werte in Funktions- und Vergleichsausdrücken
Ausnahmen:
Das Prädikat „IS NULL“ ergibt bei Anwendung auf den Nullwert „true“
Das Prädikat „IS NOT NULL“ ergibt bei Anwendung auf den Nullwert „false“.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 143: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/143.jpg)
143
Wahrheitstabellen für 3wertige Logik
AND true false ?
true true false ?
false false false false
? ? false ?
![Page 144: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/144.jpg)
144
Wahrheitstabellen für 3wertige Logik
OR true false ?
true true true true
false true false ?
? true ? ?
![Page 145: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/145.jpg)
145
Wahrheitstabellen für 3wertige Logik
NOT
true false
false true
? ?
![Page 146: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/146.jpg)
146
NULL-Werte und 3wertige Logik
Beispiel:A = 10, B = 20, C = NULL
Ausdruck WahrheitswertA < B OR B < C trueA > B AND B > C falseA > B OR B > C unknownNOT B = C unknown
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 147: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/147.jpg)
147
NULL-Werte - verschiedene Arten
Es gibt mindestens zwei Arten:
A-Marken:
Attribute haben einen Wert, der nur nicht bekannt ist
I-Marken:
Attribute für die in der Realität kein Wert existiert.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 148: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/148.jpg)
148
NULL-Werte - verschiedene Arten
Beispiel: Telefonnummer
A-Marke:
Eine Person hat einen Telefonanschluss aber die Telefonnummer ist nicht bekannt.
I-Marken:
Eine Person hat kein Telefon und somit auch keine Telefonnummer.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 149: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/149.jpg)
149
NULL-Werte - verschiedene Arten
Beispiel: Telefonnummer
3. Fall
Es ist nicht bekannt, ob eine Person einen Telefonanschluss hat.
Genaugenommen bräuchte man 3 verschiedene NULL-Marken.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 150: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/150.jpg)
150
NULL-Werte - verschiedene Arten
Spezielle NULL-Marken können auch Informationen repräsentieren:
Beispiele:
fehlendes Todesdatum: die Person lebt noch
fehlendes Lieferdatum: der Auftrag ist noch nicht erfüllt.
fehlende Telefonnummer: ???Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
![Page 151: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002](https://reader036.vdocuments.site/reader036/viewer/2022062622/55204d6149795902118b5ba3/html5/thumbnails/151.jpg)
151
NULL-Werte - verschiedene Arten
Die Unterscheidung in I- und A-Marken wird von existierenden Datenbank-systemen gegenwärtig nicht unterstützt!!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002