Relationale Datenbanksprachen

Werbung
Relationale Datenbanksprachen
➠ SQL-Kern
➠ Weitere Sprachkonstrukte von SQL
➠ SQL-Versionen
Andreas Heuer, Gunter Saake – Datenbanken I
9-1
Grundlagen
Kommerzielle
Sprachen
Sprachen und ihre Grundlagen
SQL
ISBL
Relationenalgebra
Andreas Heuer, Gunter Saake – Datenbanken I
QUEL
Tupelkalkül
QBE
Bereichskalkül
9-2
SQL-Kern
select
■ Projektionsliste
■ arithmetische Operationen und Aggregatfunktionen
from
■ zu verwendende Relationen
■ eventuelle Umbenennungen (durch Tupelvariable oder
‘alias’)
where
■ Selektionsbedingungen
■ Verbundbedingungen
■ Geschachtelte Anfragen (wieder ein SFW-Block)
group by
■ Gruppierung für Aggregatfunktionen
having
■ Selektionsbedingungen an Gruppen
Andreas Heuer, Gunter Saake – Datenbanken I
9-3
from-Klausel
Syntax
select
from
Beispiel
select
from
Andreas Heuer, Gunter Saake – Datenbanken I
liefert die gesamte Relation
9-4
Kartesisches Produkt
■
Bei mehr als einer Relation hinter from: kartesisches Produkt
from
select
Einführung von Tupelvariablen: etwa auf eine Relation mehrfach zugreifen
from
select
Selbst-Verbund (Self-Join) für tupelübergreifende Selektionen
■
Ergebnis hat acht Spalten:
■
Andreas Heuer, Gunter Saake – Datenbanken I
9-5
Bezug zum Tupelkalkül
korrespondierende Kalkülausdrücke automatisch sicher
Andreas Heuer, Gunter Saake – Datenbanken I
select
from
where
9-6
SQL-92-Spezialitäten
■
Verbunde als explizite Operatoren
■
kartesisches Produkt
cross join
Verbund über Verbundbedingungen
from
select
where
join-Operator: -Verbund
■
■
from
from
select
select
Andreas Heuer, Gunter Saake – Datenbanken I
on
join
from
select
9-7
Weitere Verbunde in SQL-92
■
Gleichverbund
natürlicher Verbund
natural join
from
select
■
■
using
join
from
select
jeder SFW-Block hinter from (SQL-92 orthogonal)
Andreas Heuer, Gunter Saake – Datenbanken I
9-8
Äußere Verbunde
Statt inner join nun outer join (dangling tuples übernehmen und mit Nullwerten auffüllen)
■
full outer join: in beiden Operanden
■
left outer join: im linken Operanden
■
right outer join: im rechten Operanden
Andreas Heuer, Gunter Saake – Datenbanken I
9-9
Äußere Verbunde II
B
3
C
4
A
2
B
3
4
C
4
5
A
2
4
C
B
2
3
A
1
2
Andreas Heuer, Gunter Saake – Datenbanken I
4
5
C
4
5
B
3
4
C
B
2
3
4
A
1
2
B
2
3
A
1
2
9-10
Die select-Klausel
Relationenalgebra: abschließende Projektion
Relationenkalkül: Zielliste
distinct
select
from
■
Attribute aus from-Relationen
■
Arithmetische Ausdrücke über Attributen und Konstanten
■
Aggregatfunktionen über Attributen
distinct: Ergebnismenge statt Multimenge
Andreas Heuer, Gunter Saake – Datenbanken I
9-11
Projektionsergebnis Menge oder Multimenge
from
select
Name
Meyer
Schulz
Müller
Meyer
from
select distinct
Name
Meyer
Schulz
Müller
Andreas Heuer, Gunter Saake – Datenbanken I
9-12
Tupelvariablen und Relationennamen
Angabe der Attributnamen durch Präfix ergänzen
from
select
und
from
select
Tupelvariable kann benutzt werden:
Andreas Heuer, Gunter Saake – Datenbanken I
select
from
9-13
Tupelvariablen und Relationennamen II
9-14
Andreas Heuer, Gunter Saake – Datenbanken I
(richtig)
select
from
where
(falsch!)
select
from
where
Bezug zum Tupelkalkül
select: Zielliste im Tupelkalkül
Letzte Anfrage entspricht
Andreas Heuer, Gunter Saake – Datenbanken I
9-15
Die where-Klausel
Selektionsbedingung der Relationenalgebra oder Verbundbedingung
where
from
select
Bedingung:
Attribut-Selektion zwischen Attributen mit kompatiblen Wertebereichen:
■
Konstanten-Selektion
■
Andreas Heuer, Gunter Saake – Datenbanken I
9-16
Verbundbedingung
Beispiel: natürlicher Verbund
select
from
where
auch Gleichverbund und -Verbund erlaubt
Andreas Heuer, Gunter Saake – Datenbanken I
9-17
Bereichsselektion
and
between
Abkürzung für
and
Beispiel
Andreas Heuer, Gunter Saake – Datenbanken I
from
and
between
select
where
9-18
Ungewißheitsselektion
■
theoretisch nur Abkürzung für disjunktiv verknüpfte Bedingung
■
Syntax
■
like
Spezialkonstante kann beinhalten
◆
◆
‘%’ (kein oder beliebig viele Zeichen)
‘ ’ (genau ein Zeichen)
Andreas Heuer, Gunter Saake – Datenbanken I
9-19
Ungewißheitsselektion II
Anwendung: Selektion nach Büchern von Benjamin/Cummings
9-20
Andreas Heuer, Gunter Saake – Datenbanken I
or
or
or
or
or
from
select
where
like
where
from
select
ist Abkürzung für
Weitere Bedingungen
■
Null-Selektion
is null
■
Quantifizierte Bedingungen, wenn ein Argument in Vergleich Menge liefert
(all, any, some und exists)
■
boolesche Ausdrücke mit Konnektoren
or, and und not
Andreas Heuer, Gunter Saake – Datenbanken I
9-21
Bezug zum Tupelkalkül
or
select
from
where
9-22
Andreas Heuer, Gunter Saake – Datenbanken I
and
entspricht im Tupelkalkül
■
where-Klausel: qualifizierende Formel in Tupelkalkülanfragen
■
Schachtelung von Anfragen
■
where-Klausel kann geschachtelt werden
■
SFW-Blöcke liefern im allgemeinen mehrere Werte
■
Vergleiche mit Wertemengen
◆
Standardvergleiche in Verbindung mit Quantoren all ( ) oder any ( )
spezielle Prädikate für den Zugriff auf Mengen in und exists
Andreas Heuer, Gunter Saake – Datenbanken I
◆
9-23
Das in-Prädikat und geschachtelte Anfragen
■
Syntax:
Beispiel:
from
from
in
select
select
where
■
■
in
natürlicher Verbund mit nachfolgender Projektion
Andreas Heuer, Gunter Saake – Datenbanken I
9-24
Das in-Prädikat und geschachtelte Anfragen II
■
Abarbeitung
1. Ergebnis der inneren select-Anweisung hinter in als Liste von Konstanten einsetzen
2. Dann modifizierte Anfrage
from
select
where
in
abarbeiten
Andreas Heuer, Gunter Saake – Datenbanken I
9-25
Verzahnt geschachtelte Anfragen
■
in der inneren Anfrage Relationen- oder Tupelvariablen-Name aus dem
from-Teil der äußeren Anfrage verwenden
select
from
where
Andreas Heuer, Gunter Saake – Datenbanken I
in
select
from
where
9-26
Verzahnt geschachtelte Anfragen II
■
Abarbeitung
1. In der äußeren Anfrage das erste Personen-Tupel untersuchen
Ergebnis in innere Anfrage einsetzen
2. innere Anfrage
select
from
where
auswerten, liefert Werteliste ( 2.0, 2.3 )
3. Ergebnis der inneren Anfrage in die äußere einsetzen
1.0 in ( 2.0, 2.3 ) ergibt false
ersten Prüfer nicht berücksichtigen
4. in der äußeren Anfrage das zweite Personen-Tupel untersuchen usw.
Andreas Heuer, Gunter Saake – Datenbanken I
9-27
Das exists-Prädikat
■
testet, ob Ergebnis der inneren Anfrage nicht leer
select
from
where exists
select
from
where
Andreas Heuer, Gunter Saake – Datenbanken I
9-28
exists: Simulation des Allquantors
select
from
where not exists
select
from
where
and not exists
and
select
from
where
Andreas Heuer, Gunter Saake – Datenbanken I
9-29
Bezug zum Tupelkalkül
exists-Prädikat: -Quantor des Tupelkalküls
■
andere Schachtelungsoperatoren ebenfalls auf Quantoren zurückführen
-Quantor mit
■
■
Andreas Heuer, Gunter Saake – Datenbanken I
simulieren
9-30
SQL-92: Tupelbildungen
select
from
where
where
row constructors bilden Tupel aus Konstanten oder Attributen
■
■
Attribute müssen kompatibel sein (siehe unten)
für alle
gilt
Andreas Heuer, Gunter Saake – Datenbanken I
und
wahr, wenn ein existiert, für das
(lexikographische Ordnung)
9-31
Kompatible Attribute
■
Attribute sind kompatibel bei kompatiblen Wertebereichen
■
Zwei Wertebereiche sind kompatibel, wenn sie
◆
◆
◆
gleich sind oder
beides auf
basierende Wertebereiche sind (unabhängig von
der Länge der Strings) oder
beides numerische Wertebereiche sind (unabhängig von dem genauen
oder
)
Typ) wie
■
Kompatible Attribute können in Vergleichen und Mengenoperationen benutzt werden
Andreas Heuer, Gunter Saake – Datenbanken I
9-32
SQL-89: Vereinigung
■
SQL-89: Vereinigung union einzige Mengenoperation
■
union
Beispiel:
from
Attributkompatiblität: von
und von ,
von
und von , von
und von
union select
from
select
■
Ergebnis: Attributnamen des linken Operanden
■
Vereinigung nur als “äußerste” Operation erlaubt.
Andreas Heuer, Gunter Saake – Datenbanken I
9-33
Simulation der Differenz
in SQL
select
from
from
not in
select
where
Andreas Heuer, Gunter Saake – Datenbanken I
9-34
Vereinigung und äußere Verbunde
null
9-35
Andreas Heuer, Gunter Saake – Datenbanken I
select
from
where
from
where not exists
where
from
union
select
select
left outer natural join
from
select
umgesetzt
Vereinigung, Durchschnitt und Differenz in SQL-92
union, intersect und except orthogonal in andere Anfragen einsetzbar
from
union
from
select
select count
from
select
corresponding-Klausel: zwei Relationen nur über ihren gemeinsamen Bestandteilen vereinigen
Andreas Heuer, Gunter Saake – Datenbanken I
union corresponding
select count
from
9-36
Vergleich Relationenalgebra und SQL
Relationenalgebra
SQL-89
SQL-92
Projektion
Selektion
Verbund
select distinct
where ohne Schachtelung
from, where
Umbenennung
from mit Tupelvariable
Differenz
where mit Schachtelung
Durchschnitt
where mit Schachtelung
Vereinigung
union (nicht orthogonal)
select distinct
where ohne Schachtelung
from, where
from mit join oder natural join
from mit Tupelvariable
as
where mit Schachtelung
except corresponding
where mit Schachtelung
intersect corresponding
union corresponding
Andreas Heuer, Gunter Saake – Datenbanken I
9-37
Weitere Sprachkonstrukte von SQL
■
Operationen auf Wertebereichen
■
Aggregatfunktionen
■
group by und having
■
Quantoren und Mengenvergleiche
■
Beispiele für Selbst-Verbund
■
order by
■
Nullwerte
■
Änderungs-Operationen
Andreas Heuer, Gunter Saake – Datenbanken I
9-38
Operationen auf Wertebereichen
■
innerhalb von select und where: statt Attribute auch skalare Ausdrücke
numerischen Wertebereiche: etwa , , ,
Strings: char length, Konkatenation , substring (Teilzeichenkette)
Datumstypen, Zeitintervalle: current date, current time, , ,
◆
◆
■
◆
Ausdrücke werden tupelweise ausgewertet
from
select
Ergebnis
Andreas Heuer, Gunter Saake – Datenbanken I
ISBN
3-89319-175-5
0-8053-1753-8
0-8053-1753-8
0-201-53771-0
3-929821-31-1
54,86
50,24
61,70
60,73
54,86
9-39
SQL-92-Spezialitäten
Bsp.: zweite Spalte nicht benannt, in SQL-89 über Spaltennummer identifizierbar:
from
select
in SQL-92 : Attributname zuordnen:
as
select
from
Andreas Heuer, Gunter Saake – Datenbanken I
9-40
Aggregatfunktionen
■ built-in-Funktionen: tupelübergreifend
◆ count: Anzahl der Werte einer Spalte oder (Spezialfall count( )) Anzahl der Tupel
einer Relation
◆ sum: Summe der Werte einer Spalte
◆ avg: arithmetisches Mittel der Werte einer Spalte
◆ max bzw. min: größter bzw. kleinster Wert einer Spalte
■ Argumente einer Aggregatfunktion:
◆ Attribut der durch from spezifizierten Relation
◆ gültiger skalarer Ausdruck
◆ bei count auch
■ Vor Argument (außer bei count( )) optional: distinct oder all (all Voreinstellung)
■ Nullwerte werden vor Anwendung aus Wertemenge eliminiert (außer bei count( ))
Andreas Heuer, Gunter Saake – Datenbanken I
9-41
Aggregatfunktionen: Beispiele
from
from
select avg all
where
select count distinct
from
select count
from
select sum
all notwendig
from
all
Andreas Heuer, Gunter Saake – Datenbanken I
from
select avg
select
where
9-42
group by und having
■
Syntax
■
where
from
select
group by
having
Semantik (virtuelle geschachtelte Relation):
◆
◆
Relationenschema und Attributmenge hinter Gruppierung
schachteln nach Attributen
, d.h. für gleiche -Werte werden
Resttupel in Relation gesammelt
der where-Klausel genügende Tupel also schachteln gemäß
◆
Andreas Heuer, Gunter Saake – Datenbanken I
9-43
group by und having II
■
having ist Selektionsbedingung auf gruppierter Relation
■
darf Bezug nehmen auf
◆
◆
Gruppierungsattribute
beliebige Aggregatfunktionen über Nicht-Gruppierungsattributen
Andreas Heuer, Gunter Saake – Datenbanken I
9-44
Gruppierung: Schema
Schritt 1:
A
1
1
2
3
3
B
2
2
3
3
3
A
B
1
2
Schritt 2:
C
3
4
3
4
6
D
4
5
4
5
7
N
C
D
3
4
3
4
6
4
5
4
5
7
2
3
3
3
A
sum(D)
1
9
Schritt 3:
Schritt 4:
from und where
2
3
4
12
A
1
sum(D)
9
group by A, B
N
C
3
4
3
4
6
D
4
5
4
5
7
select A, sum(D)
having A
max(C)
Andreas Heuer, Gunter Saake – Datenbanken I
and sum(D)
and
9-45
Gruppierung: Beispiele
as
select count
from
group by
Anzahl
2
1
1
2
Andreas Heuer, Gunter Saake – Datenbanken I
PANr
7754
4711
5588
9912
9-46
Gruppierung: Beispiele II
from
2
2
PANr
7754
9912
select count
group by
having count
from
from
Andreas Heuer, Gunter Saake – Datenbanken I
select avg
select
group by
having avg
9-47
Quantoren und Mengenvergleiche
■
Syntax
where
■
Bedeutung all Allquantor, any, some Existenzquantoren
■
Beispiele
Andreas Heuer, Gunter Saake – Datenbanken I
select
from
any
select
from
where
select
from
some
any
all
9-48
Quantoren und Mengenvergleiche II
from
from
select
where
all
select
where
and
Anwendbarkeit eingeschränkt: Test auf Mengen-Gleichheit
in SQL so nicht umsetzbar:
Gib alle Bücher aus, an denen ‘Vossen’ und ‘Witt’ gemeinsam als Autoren beteiligt waren
Andreas Heuer, Gunter Saake – Datenbanken I
9-49
Selbst-Verbund
■
letzte Anfrage erst mit Selbst-Verbund zu lösen
■
Vergleich von Wertemengen
from
B A 1.ISBN
3-89319-175-5
3-89319-175-5
3-89319-175-5
and
and
select
where
B A 2.ISBN
3-89319-175-5
3-89319-175-5
0-8053-1753-8
B A 2.Autor
Vossen
Witt
Elmasri
Witt
3-89319-175-5
Vossen
B A 1.Autor
Vossen
Vossen
Vossen
3-89319-175-5
Andreas Heuer, Gunter Saake – Datenbanken I
9-50
Selbst-Verbund II
■
Zählen von Wertemengen
Andreas Heuer, Gunter Saake – Datenbanken I
select distinct
from
where
and
9-51
order by-Klausel
■
Menge von Tupeln
■
Syntax
Beispiel
select
from
where
order by
■
■
order by
Liste
asc
aufsteigend (asc) oder absteigend (desc) sortieren
Andreas Heuer, Gunter Saake – Datenbanken I
9-52
order by-Klausel II
■
Sortierung wird auf das Ergebnis der jeweils vorangehenden SFW-Anfrage
angewendet, also FALSCH:
select
from
where
order by
(falsch!)
Andreas Heuer, Gunter Saake – Datenbanken I
9-53
Behandlung von Nullwerten
skalare Ausdrücke: Ergebnis null, sobald Nullwert in die Berechnung eingeht
■
In allen Aggregatfunktionen bis auf count( ) werden Nullwerte vor Anwendung der Funktion entfernt
■
Fast alle Vergleiche mit Nullwert ergeben Wahrheitswert unknown (statt
true oder false). Ausnahme: is null ergibt true, is not null ergibt false
■
Boolesche Ausdrücke basieren dann auf dreiwertiger Logik
■
Andreas Heuer, Gunter Saake – Datenbanken I
9-54
Behandlung von Nullwerten II
and
true
unknown
false
true
true
unknown
false
or
true
unknown
false
true
true
true
true
not
true
unknown
false
Andreas Heuer, Gunter Saake – Datenbanken I
unknown
unknown
unknown
false
unknown
true
unknown
unknown
false
false
false
false
false
true
unknown
false
false
unknown
true
9-55
Änderungsoperationen
■
Einfügen von Tupeln in Basisrelationen (oder Sichten) insert
■
Löschen von Tupeln aus Basisrelationen (oder Sichten) delete
■
Ändern von Tupeln in Basisrelationen (oder Sichten) update
Diese Operationen jeweils als
■
Eintupel-Operationen (etwa die Erfassung einer neuen Ausleihung)
■
Mehrtupel-Operationen (erhöhe das Gehalt aller Mitarbeiter um 4.5%)
SQL: vor allem Mehrtupel-Operationen
Änderungsoperationen auf Sichten: später
Andreas Heuer, Gunter Saake – Datenbanken I
9-56
update
■
Syntax
■
update
set
where
Beispiele
Angestellte
Gehalt
3000
3500
7200
4400
set
update
where
Name
Meyer
Schulz
Bond
Schulz
Andreas Heuer, Gunter Saake – Datenbanken I
9-57
update II
Angestellte
where
set
Gehalt
4000
4500
7200
5400
update
Name
Meyer
Schulz
Bond
Schulz
set
update
Andreas Heuer, Gunter Saake – Datenbanken I
9-58
delete
where
delete from
where
delete from
Standardfall ist Löschen mehrerer Tupel:
where
delete from
Löschen der gesamten Relation:
delete from
Andreas Heuer, Gunter Saake – Datenbanken I
9-59
insert
from
9-60
Andreas Heuer, Gunter Saake – Datenbanken I
insert into
values
insert into
select
insert into
insert into
values
insert into
values
SQL-Versionen
■
Geschichte
◆
◆
◆
◆
◆
◆
◆
■
SEQUEL (1974, IBM Research Labs San Jose)
SEQUEL2 (1976, IBM Research Labs San Jose)
SQL (1982, IBM)
ANSI-SQL (SQL-86; 1986)
ISO-SQL (SQL-89; 1989; drei Sprachen Level 1, Level 2,
(ANSI / ISO) SQL2 (SQL-92)
(ANSI / ISO) SQL3 (geplant)
IEF)
SQL
◆
◆
DDL, (SSL,) IQL, DML
Sichtdefinition, Transaktionsdefinition, Rechtevergabe, Integrit ätssicherung
Andreas Heuer, Gunter Saake – Datenbanken I
9-61
SEQUEL2
■
bot mehr als SQL-89
◆
■
und sogar mehr als SQL-92
◆
■
intersect und minus neben union
Mengenvergleiche mit set und zwei SFW-Blöcken
Beispiele:
where
from
from
select
select
where
where
from
select
Andreas Heuer, Gunter Saake – Datenbanken I
9-62
SEQUEL2 II
möglich
■
select
from
where set
select
from
from
in
select
where
auch
Statt
■
set ermittelt alle Prüfernr pro Matrnr
Andreas Heuer, Gunter Saake – Datenbanken I
9-63
SQL-89
■
Level 1
◆
◆
◆
keine Nullwerte
keine Selektionsbedingungen mit
keine union-Operation
oder exists
◆
■
Level 2: wie hier beschrieben
■
Level 2
◆
◆
IEF (Integrity Enhancement Feature)
check-Klausel: where-Klausel als Integritätsbedingung
Definition von Primärschlüsseln und Fremdschlüsseln
Andreas Heuer, Gunter Saake – Datenbanken I
9-64
SQL-92
Domänenkonzept (create domain, alter domain)
■
Änderung des Datenbankschemas: alter table und drop table
■
allgemeine Integritätsbedingungen (mehrere Tabellen)
■
■
neue Datentypen (wie
■
)
-Operationen erweitert
■
Namen für abgeleitete Spalten
■
join, cross join, natural join, outer join als eigene Operatoren
■
auch intersect und except
Andreas Heuer, Gunter Saake – Datenbanken I
9-65
SQL-92 II
■
Sprache fast vollständig orthogonal (etwa union, SFW hinter from
■
dreiwertige Logik
■
set transaction: verschiedene Isolationsstufen (siehe Datenbanken II)
■
Embedded SQL und Dynamic SQL sind Teil der Norm (siehe nächstes
Kapitel)
■
Data Dictionary ist Teil der Norm
Andreas Heuer, Gunter Saake – Datenbanken I
9-66
SQL-92 III
Feature in SQL-92
Intermediate
Full
Datum, Intervalltypen, domain
-Operationen
join
except, intersect
alter, drop table
set transaction
Dynamic SQL
union orthogonal
andere Orthogonalitätsverbesserungen
corresponding bei Mengenoperationen
dreiwertige Logik
allgemeine Integritätsbedingungen
check mit Bezug zu anderen Tabellen
alter domain
Tabellenkonstruktoren
Entry
Andreas Heuer, Gunter Saake – Datenbanken I
9-67
Herunterladen