4-auf-1-PDF

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