6 SQL – Structured Query Language

Werbung
6 SQL – Structured Query Language
Schestag
6.1
Datendefinition – DDL
6.2
Die Relationen-Algebra und Datenmanipulation – DML
6.2.1 Update-Operatoren Insert, Update, Delete
6.2.2 Der Retrieval-Operator Select
6.2.3 JOIN-Strategien eines Optimizers
6.3
Der Systemkatalog
Datenbanken I (Bachelor)
fbi
h_da
Kapitel 6 - 1
fbi
h_da
6 SQL – Structured Query Language (1)
•
Auf der Basis eines physischen Datenmodells (Relationenmodells) kann mit Hilfe
einer entsprechenden Data-SubLangauge (DSL) die Struktur einer Datenbank
definiert werden.
•
Im relationalen Datenmodell bietet sich die Darstellung der Implementierung von
Relationen als Tabellen (tables) mit einer festen Anzahl von Spalten (columns) an,
da die erste Codd‘sche Normalform „gleiche Satzlänge“ für jede Ausprägung einer
Entität (und somit auch einer Tabelle) fordert.
vom physischen
Datenmodell ...
Mitarbeiter
PNR
Name
Vorname
GebDat
Gehalt
INTEGER
<pk>
VARCHAR2(20)
VARCHAR2(20)
DATE
NUMBER(8,2)
Mitarbeiter-Tabelle
PNR Name
10
12
13
...
Schmitt
Meyer
Lang
...
Vorname GebDat Gehalt
Otto
Werner
Sonja
...
2.10.59
12.5.65
8.11.63
...
150000
120000
130000
...
... zur Darstellung der Daten in der
relationalen Datenbank
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 2
fbi
h_da
6 SQL – Structured Query Language (2)
•
Die mathematische Basis des relationalen Datenmodells ist die Relationen-Algebra
- auf dieser Basis konnte E. F. Codd Anfang der 70er Jahre eine Data-Sublanguage
definieren, mit deren Hilfe man
– die Struktur einer Datenbank definieren (DDL - Data Definition Language),
– auf die Daten manipulierend und recherchierend zugreifen konnte (DML - Data
Manipulation Language – vgl. auch 6.2).
•
Die klare mathematische Struktur dieser Sprache ermöglichte die relativ schnelle
Definition eines Standards, der Structured Query Language - SQL.
•
SQL ist eine interpretierte Sprache. Sie verfügt über keinerlei Kontrollstrukturen
und stellt in ihrer DML-Syntax ausschließlich mengenorientierte Operatoren zur
Verfügung.
Die Einbettung von SQL in höhere Programmiersprachen ist i.d.R. erforderlich, um
Datenbankinhalte dynamisch in Applikationen zu integrieren. Die hierfür
erforderlichen Sprachkomponenten sind im Standard unter dem Begriff Embedded
SQL (ESQL) definiert (vgl. Kapitel 7 und 8).
•
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 3
fbi
h_da
6 SQL – ein Überblick über die historische Entwicklung
1969 / 70
E. F. Codd: „A Relational Model of Data for Large Shared Data Banks“
1974
SEQUEL als Vorläufer von SQL wird definiert
1975 / 79
SYSTEM R (IBM) als Prototyp wird entwickelt
1986 / 87
SQL-86 ANSI/ISO Standard (erste genormte Version von SQL)
X/OPEN Standard für UNIX Systeme
IBM SAA Standard
1989
SQL-89
1992
SQL-92 (entspricht SQL2)
mit 3 Leveln (Entry Level, Intermediate Level, Full Level)
1999
SQL:1999 (SQL3)
2003
SQL:2003 (SQL4)
•
•
SQL ist heute „de-facto“ Standard in der relationalen Welt
Produkte unterstützen meist (nur) SQL-92/Intermediate Level und Teile von
SQL:1999 bzw. SQL:2003
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 4
6.1 SQL – Datendefinition DDL (1)
•
fbi
h_da
Zur Verwaltung von Strukturelementen einer Datenbank stehen in der DDL von SQL
die folgenden Operatoren zur Verfügung *):
CREATE Generierung eines Strukturelementes
•
•
ALTER
Ändern eines Strukturelementes
DROP
Löschen eines Strukturelementes
Im Systemkatalog werden alle Strukturinformationen sowie statistische
Informationen zu den Daten verwaltet.
Der Systemkatalog selbst hat ebenfalls die Struktur einer relationalen Datenbank. So
gibt es z.B. eine Systemtabelle, in der Informationen zu allen Tabellen der DB
enthalten sind, eine Systemtabelle mit Informationen zu allen Spalten etc.
*) SQL ist nicht case sensitive, d.h. unterscheidet nicht zwischen Groß- und Kleinschreibung. Aus didaktischen Gründen
werden SQL-Operatoren im Skript oft in Großbuchstaben geschrieben.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 5
fbi
h_da
6.1 SQL – Datendefinition DDL (2)
•
Die Generierung des logischen Datenbanknamens (des Schema-Namens) und
Zuweisung des verfügbaren Plattenbereiches erfolgt mit der CREATE DATABASE
... - Anweisung.
•
Hierbei wir der logische Namen der Datenbank auf vorgegebenem physischen
Plattenbereich mit vorgegebener aber erweiterbarer Größe festgelegt, z.B.:
create database <Datenbank>
datafile <Dateiangabe>{,<Dateiangabe>}
character set <Zeichensatz>
national character set <NatZeichensatz>
...;
•
Die CREATE DATABASE-Anweisung wird in der Regel vom DBA ausgeführt. Sie ist
in der Syntax der verwendeten Klauseln und Parameter von System zu System oft
unterschiedlich.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 6
6.1 SQL – Datendefinition DDL (3)
•
fbi
h_da
Zur Generierung von Tabellen, die als Strukturelemente wiederum Spalten enthalten,
benötigt man die skalaren Datentypen und die Möglichkeit, ggf. spezifische
Wertebereiche zu definieren:
6.1.1 Skalare Datentypen
• Für die Generierung von Tabellen und deren Spaltenelementen stehen in SQL
verschiedene skalare Datentypen zur Verfügung, die je nach Datenbanksystem
unterschiedliche Bezeichner haben können und im Prinzip den Standard-Datentypen
höherer Programmiersprachen entsprechen.
6.1.2 Domains (Wertebereiche) (in Oracle “Type” ab Version 8)
• Aus Basis der skalaren Datentypen können eingeschränkte Domains /
Wertebereiche definiert werden, die zur Sicherung von Wertebereichsintegritäten
dienen:
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 7
fbi
h_da
6.1 SQL – Datendefinition DDL (4)
•
Domains (Wertebereiche) (Fortsetzung)
Syntax:
CREATE DOMAIN <Domain_Name> < Datentyp >
[DEFAULT <...>]
[CONSTRAINT <Constraint_Name>
CHECK (VALUE in (<...>,) ] ;
•
Beispiel:
create domain Fachbereich varchar(20)
default 'Informatik'
check (value in ('Informatik','Mathematik','Elektrotechnik'));
•
Ein DOMAIN ist eine Menge erlaubter Werte eines Datentyps. Beim CREATE
TABLE (s.u.) kann der DOMAIN-Name an Stelle eines skalaren Datentyps
angegeben werden. Optional können auch DEFAULT-Werte zugewiesen werden.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 8
6.1 SQL – Datendefinition DDL (5)
•
Domains (Wertebereiche) (Fortsetzung)
•
Ein DOMAIN kann geändert und gelöscht werden:
ändern:
ALTER DOMAIN <Domain_Name>
DROP CONSTRAINT <Constraint_Name>
fbi
h_da
ALTER DOMAIN <Domain_Name>
ADD <Constraint_Name>
löschen:
DROP DOMAIN <Domain_Name> RESTRICTED
oder
DROP DOMAIN <Domain_Name> CASCADE
RESTRICTED: DROP wird nicht ausgeführt, wenn der DOMAIN an
mindestens einer Stelle benutzt wird.
CASCADE: DROP wird immer ausgeführt; statt des DOMAIN erhält
die Spalte dann z.B. den zugrundeliegenden Datentyp des Domain
ohne Constraints.
•
Der grundlegende Datentyp einer Spalte kann jedoch nicht verändert werden.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 9
fbi
h_da
6.1 SQL – Datendefinition DDL (6)
6.1.3 Tables
Syntax:
CREATE TABLE <Table_Name> (<Table_Element>,) ;
•
Table_Elemente sind
- <Columnn_Namen> [DEFAULT_Definition], oder
- <Table_Constraint_Definitionen>
•
Table_Constraint_Definitionen sind
- candidate key - Definitionen, oder
- foerign key - Definitionen, oder
- “check constraint” - Definitionen.
•
candidate key constraint: UNIQUE (<Columnn_Element>,)
•
primary key constraint: PRIMARY KEY (<Columnn_Element>,)
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 10
fbi
h_da
6.1 SQL – Datendefinition DDL (7)
•
Es empfiehlt sich (und viele DBMS fordern es auch), jede Zeile eindeutig über einen
PRIMARY KEY zu definieren.
⇒ In einer Tabelle gibt es höchstens einen PRIMARY KEY-Constraint, aber beliebig
viele UNIQUE - Constraints.
•
foreign key constraint:
CONSTRAINT <c-name> FOREIGN KEY (<Columnn_Element>,)
REFERENCES <Table_Name> [(<Columnn_Element>,)]
[ON DELETE <option>]
[ON UPDATE <option>]
wobei <option> sein kann
NO ACTION (entspricht dem default)
CASCADE
SET DEFAULT
SET NULL
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 11
fbi
h_da
6.1 SQL – Datendefinition DDL (8)
•
Ein foreign key constraint ist die Implementierung einer Relationship aus dem
logischen Datenmodell.
E1
PK1
A1
E2
E1.PK1=E2.PK1
PK2
PK1
create table E1
( PK1 INTEGER
not null,
A1 CHAR VARYING(20)
null,
constraint PK_E1 primary key (PK1)
);
create table E2
( PK2 INTEGER not null,
PK1 INTEGER not null,
constraint PK_E2 primary key (PK2),
constraint FK_E2_REL_E1
foreign key (PK1) references E1 (PK1)
);
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 12
fbi
h_da
6.1 SQL – Datendefinition DDL (9)
•
Constraints sind Prüfungen, die vom DBMS bei bestimmten DB-Operationen
durchgeführt werden. Für die meisten DBMS stehen im Rahmen der CREATE
TABLE-Anweisung primary key (PK)- und foreign key (FK)- constraints zur
Verfügung:
•
PK-Constraints prüfen bei einem Insert, ob der neue PK-Wert nicht bereits in der
Tabelle enthalten ist, d.h. dieser Constraint prüft die Eindeutigkeit des PK-Wertes.
•
FK-Constraints prüfen beim Insert und Update, ob die Referenz auf das
entsprechende PK-Element einer anderen Tabelle tatsächlich gewährleistet ist.
•
"check constraints": CHECK (<Constraint_Bedingung>)
Das Anlegen einer neuen Zeile in einer Tabelle wird nur ausgeführt, wenn die
Constraint-Bedingung den Rückgabewert “TRUE” liefert. Andernfalls wird der
Datensatz abgewiesen.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 13
fbi
h_da
6.1 SQL – Datendefinition DDL (10)
•
Eine Tabelle, die mit CREATE TABLE generiert wurde, nennt man auch Base Table.
•
Tables können geändert und gelöscht werden:
ändern:
• neue Spalte hinzufügen *):
ALTER TABLE <Table_Name>
ADD COLUMN <Column-Name, Column_Typ/Domain,[Default ...]>
•
Definition eines neuen default-Wertes für eine exisiterende Spalte
•
Löschen eines existierenden Spalten-defaults
•
Löschen einer existierenden Spalte
•
Definition eines neuen Table Integritäts-constraints
•
Löschen eines bestehenden Table Integritäts-constraints
*) Bei Oracle: alter table <table_name> add <Column-Name, Column_Typ/Domain,[Default ...]>;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 14
fbi
h_da
6.1 SQL – Datendefinition DDL (11)
löschen:
• DROP TABLE <Table_Name> <option>
<option> = RESTRICTED:
DROP wird nur ausgeführt, wenn die Tabelle von keiner anderen referenziert
wird.
<option> = CASCADE*):
Die gesamte Tabelle TABLE und ihre Sichten (vgl. VIEW, s.u.) sowie die
FK-Constraints der referenzierenden Tabelle werden gelöscht.
*) Bei Oracle: drop table <table_name> cascade constraints;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 15
fbi
h_da
6.1 SQL – Datendefinition DDL (12)
6.1.4 Indexe
Syntax:
CREATE INDEX <Index_Name>
ON <Table_Name> (<Col_1>,...,<Col_n>) [ASC|DESC];
•
Indexe sollten in der Regel erst dann eingerichtet werden, wenn eine Tabelle mit
Daten erstmalig bestückt wurde. Werden zunächst die Daten in index-lose Tabellen
eingefügt, so wird nicht durch jedes Einfügen eines Tupels eine Index-Aktualisierung
ausgelöst.
•
Ein Index kann nicht nur über eine einzelne Spalte, sondern auch über
Spaltenkombinationen angelegt werden.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 16
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (1)
•
Mit der DDL – dem Sprachumfang der Data Definition Language von SQL, werden
Metadaten über die implementierte Datenbank für den Systemkatalog definiert.
•
Mit der DML – dem Sprachumfang der Data Manipulation Language von SQL,
werden die Daten selbst verwaltet:
–
–
–
–
•
Daten einfügen
Daten ändern
Daten löschen
Daten lesen.
Die Definition der Operatoren von SQL – DML basiert auf der Theorie der
Relationen-Algebra, die auf den folgenden Folien kurz vorgestellt wird:
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 17
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (2)
•
Ziel: Basisoperationen auf Tabellen (Relationen) ausführen, die die Berechnung von
neuen Ergebnistabellen aus gespeicherten Datenbanktabellen erlauben, die als
Ergebnis angezeigt oder modifiziert werden können.
•
Die Operationen werden zur so genannten Relationenalgebra zusammengefasst.
In der Mathematik ist eine Algebra definiert durch einen Wertebereich sowie darauf
definierten Operationen.
⇒ Für Datenbankanfragen entsprechen die Inhalte der Datenbank den Werten,
Operationen sind dagegen Funktionen zum Berechnen der Anfrageergebnisse.
⇒ Anfrageoperationen sind beliebig kombinierbar und bilden eine Algebra zum
„Rechnen mit Tabellen (Relationen)“ – die so genannte relationale Algebra oder auch
Relationenalgebra.
⇒ SQL ist „lediglich“ eine Sprache, welche die Relationenalgebra praktisch umsetzt.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 18
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (3)
fbi
h_da
Operationen der Relationen-Algebra
•
Spalten heraussuchen: Projektion π
•
Zeilen heraussuchen: Selektion σ
•
Tabellen verknüpfen: Verbund (Join) ZY
•
Tabellen vereinigen: Vereinigung U
•
Tabellen voneinander abziehen: Differenz −
•
Spalten umbenennen: Umbenennung β
(wichtig für ZY, U, −)
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 19
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (4)
fbi
h_da
Operationen der Relationen-Algebra
•
Spalten heraussuchen: Projektion π
Auswahl von Spalten durch Angabe einer Attributliste
Syntax:
πAttributmenge(Relation)
Definition: πA(R ) := { t(A) | t ∈ R } mit Attributmenge A ⊆ R
Achtung: Die Projektion entfernt Duplikate (Mengensemantik):
•
Beispiele: πPNR, ANR(PERSON)
πANR(PERSON)
PNR ANR
Schestag
ANR
406
K55
K55
123
K51
K51
829
K53
K53
574
K55
Datenbanken I (Bachelor)
Kapitel 6 - 20
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (5)
fbi
h_da
Operationen der Relationen-Algebra
•
Zeilen heraussuchen: Selektion σ
Auswahl von Zeilen einer Tabelle anhand eines Selektionsprädikats
Syntax:
•
σBedingung(Relation)
Beispiel: σANR=‘K55‘(PERSON)
PERSON: PNR
ERGEBNIS:
Schestag
NAME
ALTER
GEHALT
ANR
406
Coy
47
50700
K55
123
Müller
32
43500
K51
829
Schmid
36
45200
K53
574
Abel
28
36000
K55
PNR
NAME
ALTER
GEHALT
ANR
406
Coy
47
50700
K55
574
Abel
28
36000
K55
Datenbanken I (Bachelor)
Kapitel 6 - 21
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (6)
Operationen der Relationen-Algebra
•
Kartesisches Produkt: K = R x S
Zusammenfügen von Zeilen unterschiedlicher Tabellen
Syntax:
K = R x S := { k | ∃ x ∈ R, y ∈ S: (k = <x1, x2, …, yr, y1, y2, …, ys>) }
ABT x PERSON: ANR
Schestag
ANAME
AORT
PNR
NAME
ALTER
GEHALT
ANR‘
K51
Planung
Darmstadt
406
Coy
47
50700
K55
K51
Planung
Darmstadt
123
Müller
32
43500
K51
K51
Planung
Darmstadt
829
Schmid
36
45200
K53
K51
Planung
Darmstadt
574
Abel
28
36000
K55
K53
Einkauf
Frankfurt
406
Coy
47
50700
K55
K53
Einkauf
Frankfurt
123
Müller
32
43500
K51
K53
Einkauf
Frankfurt
829
Schmid
36
45200
K53
K53
Einkauf
Frankfurt
574
Abel
28
36000
K55
K55
Vertrieb
Frankfurt
406
Coy
47
50700
K55
K55
Vertrieb
Frankfurt
123
Müller
32
43500
K51
…
…
…
…
…
…
…
…
Datenbanken I (Bachelor)
Kapitel 6 - 22
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (7)
Operationen der Relationen-Algebra
•
•
Tabellen verknüpfen: Verbund (Join) ZY
Zusammenfügen von Zeilen unterschiedlicher Tabellen
Ein Verbund ist ein kartesisches Produkt zwischen zwei Relationen R und S,
eingeschränkt durch eine Θ-Beziehung zwischen Attribut A von R und Attribut B von
S mit Θ ∈ {<, =, >, ≤, ≠, ≥ }
Syntax:
•
•
R ZY S = σAΘB(RxS)
Wichtigster Spezialfall: Θ = ‘=‘ (Gleichverbund – Equi Join)
Beispiel: ABT ZY PERSON
ANR=ANR
ABTxPERSON: ANR
Schestag
ANAME
AORT
PNR
NAME
ALTER
GEHALT
ANR‘
K51
Planung
Darmstadt
123
Müller
32
43500
K51
K53
Einkauf
Frankfurt
829
Schmid
36
45200
K53
K55
Vertrieb
Frankfurt
406
Coy
47
50700
K55
K55
Vertrieb
Frankfurt
574
Abel
28
36000
K55
Datenbanken I (Bachelor)
Kapitel 6 - 23
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (8)
Operationen der Relationen-Algebra
•
Gleichverbund (Fortsetzung)
Verlustbehafteter Gleichverbund
– wenn Tupel in ABT oder PERS keinen Verbundpartner finden (dangling tuples),
z.B. (K56, Finanzen, München)
Verlustfreier Gleichverbund (losless join)
– Ein Gleichverbund zwischen R und S heißt verlustfrei, wenn alle Tupel von R
und S am Verbund teilnehmen.
•
Natürlicher Verbund (Natural Join)
Ein natürlicher Verbund ist ein Gleichverbund über alle gleichen Attribute und
Projektion über die verschiedenen Attribute.
•
Syntax:
Schestag
R ZY S
Datenbanken I (Bachelor)
Kapitel 6 - 24
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (9)
Operationen der Relationen-Algebra
•
Natürlicher Verbund (Fortsetzung)
•
Beispiel:
ABT ZY PERSON
= πANR, ANAME, AORT, PNR, NAME, ALTER, GEHALT(σANR=ANR(ABT x PERSON)) :
ABT x PERSON: ANR
Schestag
ANAME
AORT
PNR
NAME
ALTER
GEHALT
K51
Planung
Darmstadt
123
Müller
32
43500
K53
Einkauf
Frankfurt
829
Schmid
36
45200
K55
Vertrieb
Frankfurt
406
Coy
47
50700
K55
Vertrieb
Frankfurt
574
Abel
28
36000
Datenbanken I (Bachelor)
Kapitel 6 - 25
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (10)
Operationen der Relationen-Algebra
•
Verbundvarianten
Ziel: Verlustfreier Verbund soll erzwungen werden
⇒ Übernahme von „dangling tuples“ in das Ergebnis und Auffüllen mit Nullwerten
•
voller äußerer Verbund (full outer join) übernimmt alle Tupel beider Operanden
R ZY S
•
linker äußerer Verbund (left outer join) übernimmt alle Tupel des linken Operanden
R ZY S
•
rechter äußerer Verbund (right outer join) übernimmt alle Tupel des rechten
Operanden
R ZY S
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 26
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (11)
Operationen der Relationen-Algebra
•
Verbundvarianten – Beispiele
LINKS
ZY
ZY
Schestag
A
B
1
2
RECHTS
B
C
D
2
3
4
x
3
4
5
y
A
B
C
D
2
3
4
x
A
B
C
D
1
2
⊥
⊥
2
3
4
x
⊥
4
5
y
ZY
ZY
Datenbanken I (Bachelor)
A
B
C
D
1
2
⊥
⊥
2
3
4
x
A
B
C
D
2
3
4
x
⊥
4
5
y
Kapitel 6 - 27
fbi
h_da
6.2 SQL – Datenmanipulation DML: Basis Relationen-Algebra (12)
Mengenoperationen der Relationen-Algebra
•
•
•
•
•
•
Vereinigung
Eine Vereinigung sammelt die Tupelmengen zweier Relationen unter einem
gemeinsamen Schema auf.
Die Attributmengen beider Relationen müssen identisch (bzw.
vereinigungsverträglich) sein – dies gilt für alle nachfolgenden Mengenoperationen.
Syntax:
R U S := { t | t ∈ R v t ∈ S }
Differenz
Eine Differenz eliminiert die Tupel aus der ersten Relation, die auch in der zweiten
Relation vorkommen.
Syntax:
R - S := { t | t ∈ R Λ t ∉ S }
Durchschnitt
Ein Durchschnitt liefert die Tupel, die in beiden Relationen gemeinsam vorkommen.
Syntax:
Schestag
R ∩ S := { t | t ∈ R Λ t ∈ S }
Datenbanken I (Bachelor)
Kapitel 6 - 28
fbi
h_da
6.2 SQL – Datenmanipulation DML
Der DML-Sprachumfang von SQL basiert auf der Relationen-Algebra.
Man unterscheidet in der DML-Komponente von SQL schreibende und lesende
Datenbankzugriffe:
•
Update-Operatoren
Update-Operatioren ist der Oberbegriff für alle Operatoren, die schreibend auf die
Daten zugreifen,
•
Retrieval-Operatoren
Retrieval-Operatoren sind Operatoren, die ausschließlich lesend auf die Daten
zugreifen.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 29
fbi
h_da
6.2.1 Update-Operatoren Insert, Update, Delete (1)
SQL unterscheidet die drei Update-Opertoren:
INSERT
UPDATE
DELETE
einfügen
ändern
löschen.
Der Insert-Operator
• Mit Hilfe des Insert-Operators wird eine neue Zeile (Datensatz, Ausprägung, Tupel) in
eine Tabelle eingefügt.
Syntax: INSERT INTO <Table_Name>
[(<Column_Name>,)]
C1
C2
C3
C4
VALUES (<Column_Werte>,) ;
INSERT INTO
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 30
fbi
h_da
6.2.1 Update-Operatoren Insert, Update, Delete (2)
•
Mit dem INSERT-Statement können in eine Tabelle eine oder mehrere Zeilen
eingefügt werden.
•
Werden die Namen der Spalten nicht angegeben, so müssen die Werte in der
Reihenfolge der Spalten wie im CREATE-Statement der Tabelle angegeben werden.
•
Es muss dann auch für jede Spalte ein Wert angegeben werden.
•
Spalten, die beim INSERT nicht angegeben werden, erhalten den Wert NULL, falls
dies aufgrund der Table-Definition möglich ist.
•
Ist für eine Spalte ein DEFAULT definiert, so kann dieser als Column-Wert
angegeben werden:
INSERT INTO ... VALUES (..., DEFAULT, ...)
•
Die VALUES-Klausel kann durch ein geeignetes SELECT-Statement (s. RetrievalOperatoren, 6.2.2) ersetzt werden.
•
Jede mit Hilfe eines SELECT ermittelte Menge kann auf diese Weise in eine
passende Tabelle gespeichert werden.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 31
6.2.1 Update-Operatoren Insert, Update, Delete (3)
•
fbi
h_da
Beispiel 1 *):
INSERT INTO abflug
(AB_DATUM, F_BEZ, HERST, TYP, SER_NR, PER_NR, AB_ZEIT)
VALUES ('13.11.97','LH-341','Boeing','B737','ba23-0012',10010001,10.23);
•
Beispiel 2:
INSERT INTO pilot
VALUES (10010001,'Boeing','B737','10.04.90',8978);
*) Das logische und physische Datenmodell für die verwendete Beispieldatenbank ist abgebildet
in DBISQLDB.pdf
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 32
fbi
h_da
6.2.1 Update-Operatoren Insert, Update, Delete (4)
Der Update-Operator
• Mit Hilfe des Update-Operators kann der Werte einer bestimmten Spalte in einer oder
mehreren Zeilen einer Tabelle geändert werden.
Syntax: UPDATE <Table_Name>
SET <Column_Name> = <Column_Wert>
[WHERE <Zusatzbedingung>] ;
C1
C2
C3
C4
UPDATE ...
SET C3 =...
WHERE ...
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 33
6.2.1 Update-Operatoren Insert, Update, Delete (5)
fbi
h_da
Der Update-Operator (Fortsetzung)
• Der <Column_Wert> kann ein beliebiger Ausdruck sein, z.B. auch ein SELECTErgebnis.
• Mit dem UPDATE-Statement können in einer Tabelle eine oder mehrere Zeilen
verändert werden.
• Soll eine einzelne Zeile verändert werden, so ist der primary key als Filter geeignet.
• Mit einem einzigen Befehl können alle Sätze einer Tabelle verändert werden.
• Einem UPDATE muss kein “read for update” vorangehen.
•
Beispiel 3:
UPDATE eteil
SET e_preis = 5.24
WHERE e_nr = 67891;
•
Beispiel 4:
UPDATE eteil
SET e_preis = e_preis * 1.16;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 34
fbi
h_da
6.2.1 Update-Operatoren Insert, Update, Delete (6)
Der Delete-Operator
• Mit Hilfe des Delete-Operators können eine bestimmte Zeile oder mehrere Zeilen
einer Tabelle gelöscht werden.
Syntax: DELETE FROM <Table_Name>
[WHERE <Column_Name> = <Column_Wert>] ;
C1
C2
C3
C4
DELETE FROM ...
WHERE ...
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 35
fbi
h_da
6.2.1 Update-Operatoren Insert, Update, Delete (7)
Der Delete-Operator (Fortsetzung)
• Soll eine einzelne Zeile gelöscht werden, so ist der primary key als Filter geeignet.
• Mit einem einzigen Befehl können alle Zeilen einer Tabelle gelöscht werden.
• Nach dem Löschen aller Zeilen bleibt die Tabelle erhalten.
•
Beispiel 5:
DELETE FROM pilot
WHERE per_nr = '10010002';
•
Beispiel 6:
DELETE FROM pilot;
Schestag
Diese Anweisung löscht alle Datensätze der Tabelle
Pilot, aber nicht die Tabelle als Struktur! Dies erfolgt
mit DROP TABLE pilot; (vgl. 6.1).
Datenbanken I (Bachelor)
Kapitel 6 - 36
fbi
h_da
6.2.2 Der Retrieval-Operator Select (1)
Der Select-Operator
• Mit Hilfe des Select-Operators können Informationen aus der Datenbank ausgelesen
werden.
Das Ergebnis jeder SELECT-Operation
ist wieder eine Tabelle.
•
Ein SELECT-Ausdruck besteht neben dem SELECT-Operator aus mehreren
Klauseln:
FROM ..., WHERE ..., GROUP BY ..., HAVING ..., ORDER BY ... .
Die letzten vier Klauseln sind optional.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 37
fbi
h_da
6.2.2 Der Retrieval-Operator Select (2)
Der Select-Operator (Fortsetzung)
Syntax: SELECT [ALL | DISTINCT] <Column_Elemente,>
FROM
<Table_Name,> ;
C1
C2
C3
C4
SELECT C1, C2, C3
FROM ...;
C1
Schestag
C2
C3
Datenbanken I (Bachelor)
Kapitel 6 - 38
fbi
h_da
6.2.2 Der Retrieval-Operator Select (3)
Der Select-Operator (Fortsetzung)
• Die Liste der Column_Elemente darf nicht leer sein.
• Sollen alle Spalten einer Tabelle selektiert werden, so kann * als Platzhalter
verwendet werden.
• Für das Anlisten der Column_Elemente gibt es keine vordefinierte Ordnung der
Spalten oder Zeilen, es sei denn, man benutzt die ORDER-Klausel, s.u.
•
Beispiel 7:
SELECT * FROM angestellter;
•
•
per_nr name adr beruf gehalt
...
...
... ...
...
Die Option DISTINCT bewirkt, dass doppelte Zeilen aus der Ergebnistabelle
eliminiert werden, die Option ALL bewirkt, dass doppelte Zeilen in der
Ergebnistabelle auch doppelt angezeigt werden.
Ist weder ALL noch DISTINCT spezifiziert, so wird ALL als default angenommen.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 39
fbi
h_da
6.2.2 Der Retrieval-Operator Select (4)
Der Select-Operator (Fortsetzung)
• Die Liste der Table_Namen darf nicht leer sein. Referenziert die Tabellenliste die
Tabellen A, B und C, so berücksichtigt das Selektionsergebnis das kartesische
Produkt A x B x C der drei Tabellen.
• Die Ergebnistabelle enthält dann alle Spalten aus A, B und C.
• Jede Zeile der einen Tabelle wird mit allen Zeilen der anderen Tabelle angelistet.
SELECT * FROM A, B ;
ist semantisch äquivalent zu
SELECT * FROM A CROSS JOIN B ;
•
Beispiel 8:
SELECT * FROM maschine, flugzeug;
herst typ km_h sitze herst typ ser_nr f_std an_datum
...
...
...
...
...
...
...
...
...
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 40
fbi
h_da
6.2.2 Der Retrieval-Operator Select (5)
Der Select-Operator (Fortsetzung)
• Die Auswahl bestimmter Zeilen einer Tabelle nennt
man Selektion.
• Die Auswahl bestimmter Spalten einer Tabelle
nennt man Projektion.
C1
C2
C3
C1
C2
C3
C4
•
Spaltennamen können qualifiziert bzw. umbenannt werden (z.B. Bezeichner in
anderer Sprache):
SELECT <Column_Name/Wert> AS <Column_Name_neu> ...
•
Beispiel 9:
Schestag
select name, gehalt as salary
from angestellter;
Datenbanken I (Bachelor)
C4
name
...
salary
...
Kapitel 6 - 41
6.2.2 Der Retrieval-Operator Select (6)
fbi
h_da
Die ORDER BY - Klausel
• Mit der ORDER BY-Klausel kann die Ergebnistabelle einer SELECT-Operation nach
den Werten einer (oder mehrerer) Spalten aufsteigend oder absteigend sortiert
werden.
Syntax: SELECT <Column_Element,>
FROM <Table_Name,>
ORDER BY <Column_Element [ASC | DESC],>
•
•
•
•
Nur mit Hilfe der Klausel ORDER BY ist sichergestellt, dass die Daten in der
gewünschten Reihenfolge angelistet werden.
Die Optionen ASC (ascending = aufsteigend) bzw. DESC (descending = absteigend)
ermöglichen das Sortieren in unterschiedlichen Reihenfolgen; der default ist ASC.
Das (geschachtelte) Sortieren nach mehreren Spalten ist möglich.
Die Identifizierung der Spalte, nach der sortiert werden soll, ist möglich durch eine
Zahl, die die absolute Position der Spalte in der Ergebnistabelle darstellt: die Zahl
referenziert das Column-Element der Ergebnistabelle:
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 42
fbi
h_da
6.2.2 Der Retrieval-Operator Select (7)
Die ORDER BY-Klausel (Fortsetzung)
• Beispiel 10:
SELECT name, adr, beruf, gehalt
FROM angestellter
ORDER BY beruf, gehalt;
⇔
SELECT name, adr, beruf, gehalt
FROM angestellter
ORDER BY 3, 4;
Die WHERE - Klausel
• Mit der WHERE-Klausel kann auf den zugrunde liegenden Tabellen der SELECTOperation ein Filter definiert werden.
Syntax: SELECT <Column_Element,>
FROM <Table_Name,>
WHERE <logische Bedingung(en)>
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 43
6.2.2 Der Retrieval-Operator Select (8)
fbi
h_da
Die WHERE-Klausel (Fortsetzung)
• Die Bedingungen, die der WHERE-Klausel folgen, werden mit den üblichen
Operatoren und mit Hilfe von Klammern gebildet : AND, NOT, OR, >, >=, <, <=,
(, ) .
• Die Ergebnistabelle enthält nur Zeilen, für die der Wahrheitswert TRUE ermittelt
wird. NULL-Elemente können nicht logisch zugeordnet werden
⇒ In SQL gibt es drei Wahrheitswerte: TRUE, FALSE und UNKNOWN.
•
Beispiel 11:
•
Beispiel 12:
Schestag
SELECT name, adr, per_nr
FROM angestellter
WHERE beruf='Pilot';
SELECT typ, ser_nr, f_std
FROM flugzeug
WHERE (typ = 'A330' OR typ = 'B777')
AND f_std < 6000;
Datenbanken I (Bachelor)
Kapitel 6 - 44
fbi
h_da
6.2.2 Der Retrieval-Operator Select (9)
SELECT mit arithmetischen Ausdrücken
•
Als arithmetische Operatoren mit Klammern “(” bzw. “)” stehen zur Verfügung:
+, –, *, / . Die Bildung der Potenz ist nicht möglich.
• Hat einer der Operanden einen unbekannten Wert (= NULL), dann ist auch das
Ergebnis der arithmetischen Operation unbekannt.
•
Beispiel 13:
SELECT per_nr AS PersonalNr,
gehalt AS 'altes Gehalt',
gehalt * 1.05 AS 'neues Gehalt'
FROM angestellter;
Schestag
PersonalNr
Datenbanken I (Bachelor)
...
altes Gehalt
...
neues Gehalt
...
Kapitel 6 - 45
fbi
h_da
6.2.2 Der Retrieval-Operator Select (10)
SELECT ... WHERE ... BETWEEN ...
• BETWEEN entspricht größer / gleich und kleiner / gleich.
• Es können auch char-Variablen sortiert werden, z.B. beruf between 'a' and 'b'zeigt
alle Datensätze mit Berufen an, die mit ‘A’ anfangen und den Beruf ‘B’ (zum
Sortieren werden ‘A’ bzw. ‘B’ mit Blanks aufgefüllt.).
• Die Sortierung hängt vom maschinensprachlichen characterset ab:
–
–
•
EBCDIC:
ASCII:
Zahlen > Buchstaben Extended binary coded decimal interchange code
Zahlen < Buchstaben
Beispiel 14:
SELECT ab_datum,f_bez
FROM abflug
WHERE ab_datum BETWEEN '14.05.01' AND '30.06.01';
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 46
fbi
h_da
6.2.2 Der Retrieval-Operator Select (11)
SELECT ... WHERE ... IN ...
• Mit dieser Klausel kann die Übereinstimmung eines Spaltenwertes mit einer
vorgegebenen Menge von Werten als Filter geprüft werden.
•
Beispiel 15:
SELECT ab_datum,f_bez
FROM abflug
WHERE ab_datum IN ('13.05.01','14.05.01');
ist äquivalent zu
SELECT f_bez, ab_datum
FROM abflug
WHERE ab_datum = '13.05.01'
OR ab_datum = '14.05.01';
SELECT ... WHERE ... LIKE ...
• LIKE ist einsetzbar für CHAR und VARCHAR.
•
“%” steht für eine beliebige Anzahl von Zeichen;
die Anzahl kann auch null sein, z.B. beruf like '%Ing%'
• “_” steht für ein einzelnes Zeichen.
Schestag
Datenbanken I (Bachelor)
Beispiel 16:
SELECT per_nr, name
FROM angestellter
WHERE name LIKE 'M%';
Kapitel 6 - 47
6.2.2 Der Retrieval-Operator Select (12)
fbi
h_da
Der SUBSTRING-Operator hat die folgende Syntax:
SUBSTRING ( [VAR]CHAR-Column, <ab Position>, <Länge>) = ' .... '
•
Die Verknüpfung (Concatination) von varchar-Variablen ist möglich durch den || Operator.
•
Beispiel 17:
SELECT per_nr, name
FROM angestellter
WHERE SUBSTR(name,1,1) = 'M';
SELECT ... WHERE ... IS NULL ...
• Der Spaltenwert NULL kann für Null-fähige Spalten abgefragt werden mit Hilfe der
Bedingung ... IS NULL ... (und nicht = NULL!, da der NULL-Wert typ-unabhängig ist).
• Entsprechend der Ausprägung von null-fähigen Spalten können Bedingungen außer
den boolschenKonstanten TRUE (T) und FALSE (F) auch noch den boolschen Wert
UNKNOWN (U) haben.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 48
fbi
h_da
6.2.2 Der Retrieval-Operator Select (13)
SELECT ... WHERE ... IS NULL ... (Fortsetzung)
• Die Wirkungsweise soll verdeutlicht werden an der null-fähigen Spalte ERSCHJ
(Erscheinungsjahr) einer Tabelle BUCH:
... WHERE Erschj = 1990
T, F oder U
... WHERE NOT (Erschj = 1990)
T, F
ist immer nur T oder F, nie U!
... WHERE Erschj = 1990 IS NOT UNKNOWN
⇔
... WHERE NOT (Erschj = 1990 IS UNKNOWN)
⇔
... WHERE (Erschj = 1990 IS TRUE)
OR (Erschj = 1990 IS FALSE)
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 49
fbi
h_da
6.2.2 Die Spaltenfunktionen (1)
•
•
SQL bietet die Möglichkeit, auf Spalten von (Ergebnis-)Tabellen oder Zeilengruppen
solcher Tabellen spezielle Funktionen anzuwenden:
COUNT(Spalte)
Anzahl von Werten einer Spalte (Zeilenanzahl)
SUM(Spalte)
Summe der Werte einer Spalte
(nur für numerische Argumente)
AVG(Spalte)
Durchschnitt der Werte einer Spalte
(nur für numerische Argumente)
MIN(Spalte)
kleinster Wert aller Werte einer Spalte
MAX(Spalte)
größter Wert aller Werte einer Spalte
Alle aufgeführten Spaltenfunktionen berücksichtigen keine NULL-Werte!
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 50
fbi
h_da
6.2.2 Die Spaltenfunktionen (2)
•
•
•
•
Die Spaltenfunktion COUNT( ) ist die einzige, die als Argument "*" zulässt, da sie
die Anzahl der Zeilen ermittelt und dieser Wert nicht von einer bestimmten Spalte
abhängig ist.
Sollen nur Zeilen unterschiedlichen Inhalts gezählt werden, so kann dies durch
Einfügen des Schlüsselwortes DISTINCT erreicht werden (nicht unterstützt bei
Oracle!).
Alle anderen Spaltenfunktionen müssen als Argument einen Spaltennamen der
entsprechenden Tabelle erhalten.
Es empfiehl sich, den Spalten, die durch die Anwendung von Spaltenfunktionen neu
entstehen, mit Hilfe der AS-Klausel einen sinnvollen Namen zu geben.
SELECT COUNT(*)as Anzahl
FROM flug;
SELECT DISTINCT COUNT(z_ort)
from flug;
SELECT COUNT(*)as Anzahl
FROM maschine
WHERE sitze > 230;
SELECT SUM(e_preis)
FROM eteil;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 51
fbi
h_da
6.2.2 Die Spaltenfunktionen (3)
•
Zur Erstellung von Listen / Reports ist es oft wünschenswert, Ergebnistabellen einer
Select-Anfrage nach bestimmten Spaltenwerten zeilenweise zu gruppieren.
•
Die GROUP BY- Klausel unterstützt die zeilenweise Gruppierung von Tabellen.
Diese Klausel findet häufig Anwendung im Zusammenhang mit Spaltenfunktionen, da
Informationen über Gruppen von Zeilen und nicht über jede einzelne Ausprägung /
Zeile der Gruppe erwünscht sind.
• Beispiel 18
) Man interessiert sich für das durchschnittliche Gehalt in jeder Berufsgruppe einer
Organisation.
• Intern erfolgt zunächst immer ein SORT nach der Spalte, nach der gruppiert wird (im
Beispiel ist dies die Spalte beruf). Es ist wichtig, sich dessen bewusst zu sein, da ein
SORT immer mit erheblichen Aufwänden verbunden ist (Performance!).
• Nun wird die angegebene Spaltenfunktion auf alle Zeilen angewandt, die bzgl. der
Gruppierungsspalte den gleichen Wert haben, d.h. solange, bis in der
entsprechenden Spalte ein so genannter Gruppenwechsel eintritt.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 52
fbi
h_da
6.2.2 Die Spaltenfunktionen (4)
SELECT beruf, AVG(gehalt)as average
FROM angestellter
GROUP BY beruf
ORDER BY 2 DESC;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 53
fbi
h_da
6.2.2 Die Spaltenfunktionen (5)
Weitere Besonderheiten bei Anwendung der GROUP BY-Klausel:
•
Alle Column-Elemente nach SELECT müssen mit Spaltenfunktionen ermittelt
werden, mit Ausnahme der GROUP BY-Spalte (die aus semantischen Gründen
immer in der Ergebnistabelle enthalten sein sollte).
•
Die GROUP BY-Klausel kann um eine HAVING-Klausel erweitert werden, die aus
den ermittelten Gruppen bestimmte Gruppen herausfiltert:
Mit HAVING können Gruppen ausgewählt werden.
•
GROUP BY ... HAVING steht immer ganz am Ende eines (Sub-) SELECTS (ggf.
gefolgt von einer ORDER BY-Anweisung, die dann überflüssig ist, wenn aufsteigend
nach der Gruppierungsspalte sortiert werden soll - denn dies wird intern sowieso
gemacht).
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 54
fbi
h_da
6.2.2 Die Spaltenfunktionen (6)
•
In einer SELECT-Anweisung können sowohl WHERE- als auch HAVING- Klauseln
vorkommen:
WHERE auf Zeilenebene entspricht HAVING auf Gruppenebene
filtert VOR dem Gruppieren
filtert NACH dem Gruppieren
SELECT beruf, AVG(gehalt)as average
FROM angestellter
WHERE adr = "Kaiserslautern"
GROUP BY beruf
HAVING AVG(gehalt) > 5000.0;
•
•
filtert alle Angestellten aus „Kaiserslautern“
vor dem internen SORT und GROUP BY.
filtert alle Berufsgruppen mit AVG(gehalt) > 5000
nach dem internen SORT und GROUP BY.
SQL unterstützt nur einstufige Gruppenwechsel.
Mehrstufige Gruppenwechsel werden ggf. von Reportgeneratoren unterstützt.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 55
fbi
h_da
6.2.2 JOIN-Ausdrücke (1)
•
Ein SELECT über mehrere Tabellen erfolgt über die Referenzierung entsprechender
Key-Spalten und erfordert eine Zuordnung derjenigen Datensätze, deren Primaryund Foreign-Keyspalten die gleiche Ausprägung haben:
Im logischen Modell sind dies
referenzierende Relationships,
Tab1
Primary Key 1
referenzierende Relationship
Tab2
Primary Key 2
im physischen Modell foreign key- &
primary key-Spalten gleichen Wertes
PK1
TAB1
INTEGER
PK2
PK1
PK1 = PK1
TAB2
CHAR(6)
INTEGER
Syntax: SELECT <Column_ Elemente,>
FROM <TAB1>, <TAB2>
WHERE <TAB1>.<PK1> = <TAB2>.<PK1> ;
SELECT a.per_nr, a.name, p.p_std
FROM angestellter a, pilot p
WHERE a.per_nr = p.per_nr;
Schestag
Datenbanken I (Bachelor)
ANGESTELLTER
PER_NR NUMBER(8)
NAME
CHAR(15)
ADR
CHAR(20)
BERUF
CHAR(25)
GEHALT NUMBER(8,2)
PILOT
PER_NR
HERST
TYP
LIZ
P_STD
NUMBER(8)
CHAR(15)
CHAR(10)
CHAR(15)
INTEGER
PER_NR = PER_NR
Kapitel 6 - 56
fbi
h_da
6.2.2 JOIN-Ausdrücke (2) – inner joins
•
•
•
•
Die Ergebnistabelle eines JOINs entsteht durch
Auswahl bestimmter Spalten und Zeilen des kartesischen Produkts der beteiligten Tabellen.
I.d.R. erfolgt der JOIN über Primärschlüssel- und
Fremdschlüsselspalten.
Ein JOIN ist aber auch über beliebige Spalten
möglich, sofern es semantisch sinnvoll ist und
die Datentypen der JOIN-Spalten kompatibel sind.
Äquivalente Formulierungen zur Syntax der
vorhergehenden Folie sind:
–
–
TAB1 JOIN TAB2 ON WHERE-Bedingung
TAB1 JOIN TAB2 USING (gemeinsame Spalte),
dies setzt natürlich voraus, dass die
JOIN-Spalten bei beiden Tabellen gleich
heißen.
–
ANGESTELLTER
PER_NR
NAME
ADR
BERUF
GEHALT
PILOT
PER_NR
HERST
TYP
LIZ
P_STD
NUMBER(8)
CHAR(15)
CHAR(10)
CHAR(15)
INTEGER
PER_NR = PER_NR
PER_NR = PER_NR
ABFLUG
F_BEZ
AB_DATUM
PER_NR
HERST
TYP
SER_NR
AB_ZEIT
CHAR(15)
DATE
NUMBER(8)
CHAR(15)
CHAR(10)
CHAR(15)
NUMBER(4,2)
F_BEZ = F_BEZ
TAB1 NATURAL JOIN TAB2.
Weitere Join-Typen ⇒ vgl. hierzu die Literatur
FLUG
F_BEZ
S_ORT
Z_ORT
ZEIT
KM
Schestag
NUMBER(8)
CHAR(15)
CHAR(20)
CHAR(25)
NUMBER(8,2)
Datenbanken I (Bachelor)
CHAR(15)
CHAR(15)
CHAR(15)
NUMBER(5,2)
INTEGER
Kapitel 6 - 57
fbi
h_da
6.2.2 JOIN-Ausdrücke (3) – inner joins
•
Grundsätzlich erfordert ein JOIN über n Tabellen mindestens n-1 JOIN-Bedingungen:
SELECT ab.f_bez, ab.ab_datum, a.name
FROM angestellter a, abflug ab, flug f
WHERE a.per_nr = ab.per_nr
AND ab.f_bez = f.f_bez;
1. JOIN
2. JOIN
Subselects – Unterabfragen
• Jedes Subselect kann getrennt getestet werden.
• Der Subselect (nested log) wird vom Optimizer i.d.R. zu einem (sort/merge) Join
gemacht (vgl. weiter unten).
SELECT herst,typ,ser_nr
FROM flugzeug
WHERE ser_nr IN
(SELECT ser_nr
FROM abflug
WHERE ab_datum = ’13.11.97’);
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 58
6.2.2 JOIN-Ausdrücke (4) – subselects
•
•
•
fbi
h_da
Subselects (Fortsetzung)
In Subselects können über die Spaltenfunktionen auch Vergleichswerte herangezogen werden, allerdings nur dann, wenn der Subselect genau einen Wert ermittelt.
Innerhalb einer SELECT-Anweisung können beliebig viele Subselects ver wendet
werden.
SELECT per_nr,name
FROM angestellter
WHERE per_nr IN
(SELECT per_nr
FROM abflug
WHERE f_bez IN
(SELECT f_bez
FROM flug
WHERE start ='Luxemburg'));
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 59
fbi
h_da
6.2.2 VIEW – Sichten (1)
•
•
•
Eine VIEW ist eine virtuelle Tabelle, die sich für die Benutzer wie eine normale
Tabelle verhält.
Eine VIEW ist aber kein eigenständiges Objekt, sondern immer dynamisch aus den
Spalten realer Tabellen abgeleitet.
M.a.W.: Eine VIEW ist ein dynamisches Fenster, das als “Maske” nur einen
Ausschnitt der DB zeigt.
Eine VIEW besitzt für ihre Spalten auch Spaltennamen. Werden beim CREATE
VIEW keine Spaltennamen angegeben, so werden die Namen der Spalten aus dem
zugrunde liegenden SELECT-Teil verwendet. Spaltennamen müssen für alle Spalten
angegeben werden, falls eine Funktion oder ein arithmetischer Ausdruck oder
Konstanten verwendet werden.
CREATE VIEW Vbrutto (nr, bez, brutto)
AS SELECT e_nr,e_bez,e_preis*1.16
FROM eteil;
CREATE VIEW Vbr (Bezeichnung, Bruttopreis)
AS SELECT bez,brutto
FROM Vbrutto;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 60
fbi
h_da
6.2.2 VIEW – Sichten (2)
•
Der Datentyp der Spalten einer VIEW bestimmt sich aus dem Format der Spalten des
SELECT-Teils.
•
Der Anwender kann nicht erkennen, ob er das SELECT auf eine TABLE oder eine
VIEW absetzt.
•
Es entsteht kein Duplikat der Daten. Bei jeder Abfrage wird mit Hilfe der VIEWDefinition das SELECT umgesetzt (dies hat Einfluss auf die Performance!).
•
Auf der Basis von VIEWS können weitere VIEWS definiert werden (vgl. Beispiel
oben).
•
Ein INSERT über eine VIEW ist nicht möglich, wenn die verborgenen Spalten mit
NOT NULL definiert sind.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 61
fbi
h_da
6.2.2 VIEW – Sichten (3)
VIEW mit CHECK OPTION
• Datensätze können über die VIEW nur manipuliert werden, wenn sie über die VIEW
auch wieder sichtbar werden. Die Klausel WITH CHECK OPTION garantiert dabei,
dass bei einem INSERT oder UPDATE auf die VIEW die entsprechende
Filterbedingung geprüft wird.
•
Das Gehalt kann in folgendem Beispiel nicht auf den Wert 5000.0 gesetzt werden:
CREATE VIEW personal (pers_nr,name,adresse,beruf)
AS SELECT per_nr,name,adr,beruf
FROM angestellter
WHERE gehalt < 4000.0
WITH CHECK OPTION;
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 62
fbi
h_da
6.2.2 VIEW – Sichten (4)
Vorteile vonSichten
Die Handhabung der DB wird erleichtert.
•
Es ist nicht nötig, einen SELECT immer wieder einzugeben. Für immer wieder
benötigte komplexe Abfragen wird eine VIEW definiert und getestet. Aus dieser VIEW
können dann einzelne Datensätze selektiert werden. Der Endanwender benützt für
komplexe Abfragen vordefinierte VIEWs.
Datenschutz
• Der Endanwender kann nur die Daten sehen, für die er aufgrund der VIEW-Definition
berechtigt ist (z.B. alle Personalstammsätze mit Gehältern unter 5.000,-- EUR).
Datenunabhängigkeit
• Sichten werden verwendet, um innerhalb eines DB-Systems einen hohen Grad an
Datenunabhängigkeit zu erreichen. Der Benutzer muss nicht wissen, in welchen
TABLE sich die benötigten Daten befinden. Er greift auf die Daten über eine VIEW
zu. Bei einer Änderung der DB-Struktur muss eventuell die VIEW neu definiert
werden, aber die Anwendungsprogramme müssen nicht geändert werden
(Wartungsfreundlichkeit).
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 63
fbi
h_da
6.2.3 JOIN-Strategien eines Optimizers (1)
•
Die drei unten aufgeführten Join-Strategien sollen exemplarisch anhand der
folgenden SQL-Abfrage erklärt werden:
select *
from B, C
where c.x=b.w
and c.z=17;
•
Verschachtelter Loop-Join (Nested Loop)
erste Tabelle
Tabelle C
z
x
17
cc
17
aa
18
ee
17
ff
Schestag
zweite Tabelle
Tabelle B
w
y
aa
2
cc
3
ff
1
resultierendes Tupel
z
x
w
y
17
17
17
cc
aa
ff
cc
aa
ff
3
2
1
Datenbanken I (Bachelor)
Kapitel 6 - 64
fbi
h_da
6.2.3 JOIN-Strategien eines Optimizers (2)
•
Sort/Merge-Join
Sort+Filter
Tabelle C
z
x
17
aa
17
cc
17
ff
Schestag
sortierte
Tabelle B
w
y
aa
2
cc
3
ff
1
Tupel aus C und B
z
x
w
y
17
17
17
aa
cc
ff
aa
cc
ff
2
3
1
Datenbanken I (Bachelor)
Kapitel 6 - 65
fbi
h_da
6.2.3 JOIN-Strategien eines Optimizers (3)
•
Hash-Join
1.1.Tabelle
Tabelle22wird
wirdgelesen
gelesen
und
undinineiner
einerHash-TabelHash-Tabelleleabgelegt.
abgelegt.
Tabelle 2
ZeilenHeader
Zeilen
Tabelle 1
Was nicht in den Speicher
passt, wird auf Platte ausgelagert.
Plattenbereich
Schestag
2.2.Werte
Wertevon
vonTabelle
Tabelle11werden
werden
ininder
derHash-Tabelle
Hash-Tabellegesucht.
gesucht.
Datenbanken I (Bachelor)
Kapitel 6 - 66
fbi
h_da
6.2.3 JOIN-Strategien eines Optimizers (4)
•
Die Strategie des Optimizers kann über Parameter vom DBA beeinflusst werden.
•
Um das Verhalten des Optimizers zu beobachten, können die vom Optimizer
gewählten Strategien pro SQL-Statement angezeigt und so das PerformanceVerhalten analysiert werden.
•
Die Strategie des Optimizers wird beeinflusst durch geschätzte Kosten, geschätzte
Anzahl der Ausgabezeilen, Notwendigkeit für temporäre Dateien, Verwendung von
Indexen, Verwendung von Hash-Joins, Möglichkeit des parallelen Scans auf
fragmentierten Tabellen, erforderliche Zugriffe auf remote-Datenquellen, etc. *)
*) vgl. set explain-Beispiele der Folien in der Vorlesung
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 67
fbi
h_da
6.3 Der Systemkatalog (1)
•
Alle Metadaten zu einem Objekt einer Datenbank, also alle Daten zu den erzeugten
Schemaobjekten wie Tabellen, Views, Indexe etc., werden von einem DBMS in
speziellen Systemtabellen gespeichert, dem so genannten Systemkatalog (man
spricht auch von Data Dictionary).
•
Die Inhalte der Tabellen des Systemkatalogs können mit den SQL-SELECTAnweisungen abgefragt werden.
•
Die einzelnen Tabellen des Systemkatalogs stehen miteinander in Beziehung,
sodass dem Systemkatalog ein eigenes relationales Datenmodell zugrunde liegt, das
automatisch mit Daten gefüllt wird, sobald eine Datenbankstruktur angelegt wird.
•
Die Bezeichner für die Systemtabellen variieren von System zu System.
Bei vielen DBMS beginnen die Systemtabellen mit dem Präfix SYS, z.B. bei
Informix und MS SQL-Server, und haben ansonsten sprechende Bezeichner,
z.B. SYSTABLES, SYSCOLUMNS, SYSVIEWS,SYSREFERENCES etc.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 68
fbi
h_da
6.3 Der Systemkatalog (2)
•
Namenskonventionen der Systemtabellen bei Oracle
Die Systemtabellen sind bei Oracle nach folgendem Schema aufgebaut:
<Präfix>_<Schemaobjekt>
•
•
Das Präfix schränkt die anzuzeigenden Objekte wie folgt ein:
USER_
Alle Schemaobjekte des aktuellen Users, also des entsprechenden
Schemas.
ALL_
Alle Schemaobjekte, auf die der User Zugriffsrechte hat.
DBA_
Alle Schemaobjekte; nur ein Datenbankadministrator (der User DBA)
darf hierauf zugreifen
Eine Auswahl von wichtigen Schemaobjekten *).
CONS_COLUMNS
TABLESPACES
CONSTRAINTS
TAB_COLUMNS
INDEXES
TRIGGERS
TABLES
VIEWS ...
*) Die Tabellenstruktur der Schemaobjekte kann durch entsprechendes DESC <Tablename> erfragt werden.
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 69
fbi
h_da
6.3 Der Systemkatalog (3)
•
Beispiel
create table Auftrag (
AuftragNr integer not null,
AuftragDatum date not null,
KundenNr integer not null,
primary key (AuftragNr),
foreign key (KundenNr)
references Kunde (KundenNr)
);
•
ein insert into user_tables ...
drei insert into user_tab_columns ...
zwei insert into user_constraints ...
und user_cons_columns
Zahlreiche Re-Engineering-Tools nutzen den Systemkatalog, um im reverseVerfahren ein entsprechendes (physisches) relationales und ein konzeptionelles
Datenmodell der Datenbank zu generieren.
Der Systemkatalog ist insbesondere dann wichtig,
wenn mangels Dokumentation zum Datenmodell
keine schriftlichen Informationen über die Datenstruktur vorliegen!
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 70
fbi
h_da
6.3 Der Systemkatalog (4)
•
Welche Informationen liefert diese SELECT-Anweisung?
select *
from all_tab_columns
order by table_name;
•
Neben den statischen Daten zur Datenbankstruktur werden im Systemkatalog
auch dynamisch statistische Daten zu den Datenbankinhalten gespeichert, wie
z.B. Anzahl der Zeilen pro Tabelle Maximale und minimale Ausprägung der Spalten
jeder Tabelle, etc.
•
Diese statistischen Daten werden insbesondere zur Ermittlung des optimalen
Anfrageweges durch den Optimizer benutzt.
•
Statistische Daten werden i.d.R. wegen der erheblichen Belastung des Systems nicht
automatisch nach jedem Schreibvorgang, sondern z.B. im Rahmen der Nachtverarbeitung durch explizit gestartete Prozesse aktualisiert (z.B. UPDATE STATISTICS).
Schestag
Datenbanken I (Bachelor)
Kapitel 6 - 71
Herunterladen