1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

151
1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002

Transcript of 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

Page 1: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Bibliotheks-anwendung

Page 13: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

BibliothekDatenbankschema

CREATE TABLE

Statements

Page 16: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

SELECTAnweisung

Page 27: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

SELECTmit einer Tabelle

Page 28: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

ALIASEs

Page 87: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

SELECTMehrere Relationen

Page 99: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

ORDER BY

Page 131: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

Null-Werte und

3wertige Logik

Page 138: 1 Rückblick CREATE TABLE Statement Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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