SQL

Werbung
Datenbanksysteme:
SQL
Prof. Dr. Carl-Christian Kanne
Wednesday, November 19, 2008
1
Die Anfragesprache SQL
• “Structured Query Language”
• Ursprung: SEQUEL (IBM Research)
• Standard (ANSI/ISO)
•
•
•
•
•
SQL1 (SQL-86)
SQL2 (SQL-92)
SQL:1999 (SQL-3)
SQL:2003
SQL:2006
Wednesday, November 19, 2008
2
SQL-Teilsprachen
• Data Definition Language DDL
•
Logisches und physisches Schema beschreiben
• Data Manipulation Language DML
•
•
Anfragen
Updates
Wednesday, November 19, 2008
3
Uni-Schema
voraussetzen
MatrNr
Name
Semester
Vorgänger
Studenten
N
N
Name
Fachgebiet
Wednesday, November 19, 2008
N
Titel
lesen
1
arbeitenFür
VorlNr
SWS
Vorlesungen
prüfen
N
Assistenten
M
M
M
Note
PersNr
hören
N
Nachfolger
1
1
Professoren
PersNr
Rang
Raum
Name
4
Die relationale Uni-DB
PersNr
2125
2126
2127
2133
2134
2136
2137
Professoren
Name Rang
Sokrates C4
Russel
C4
Kopernikus C3
Popper C3
Augustinus C3
Curie
C4
Kant
C4
Raum
226
232
310
52
309
36
7
voraussetzen
Vorgänger Nachfolger
5001
5041
5001
5043
5001
5049
5041
5216
5043
5052
5041
5052
5052
5259
prüfen
MatrNr VorlNr PersNr Note
28106 5001
2126
1
25403 5041
2125
2
27550 4630
2137
2
Wednesday, November 19, 2008
Studenten
MatrNr
Name
Semester
24002 Xenokrates
18
25403
Jonas
12
26120
Fichte
10
26830 Aristoxenos
8
27550 Schopenhauer
6
28106
Carnap
29120 Theophrastos
29555
Feuerbach
3
2
2
hören
MatrNr
VorlNr
26120
5001
27550
5001
27550
4052
28106
5041
28106
5052
28106
5216
28106
5259
29120
5001
29120
5041
29120
5049
29555
5022
25403
5022
Assistenten
Persl
Nr
Name
Fachgebiet
Boss
3002
Platon
Ideenlehre
2125
Syllogistik
2125
3003 Aristoteles
3004 Wittgenstein Sprachtheorie
3005
Rhetikus
3006
Newton
3007
Spinoza
2126
Planeten
bewegung
Keplersche
Gesetze
2127
2127
Gott und Natur
2126
Vorlesungen
VorlNr
Titel
SWS
gelesen
von
5001
Grundzüge
4
2137
5041
Ethik
4
2125
5043
Erkenntnistheorie
3
2126
5049
Mäeutik
2
2125
4052
5052
5216
Logik
Wissenschaftstheorie
Bioethik
4
3
2
2125
2126
2126
5259
Der Wiener Kreis
2
2133
5022
Glaube und Wissen
2
2134
4630
Die 3 Kritiken
4
2137
5
SQL-Datenmodell
• SQL verwendet keine Relationen, sondern
“Multisets” als grundlegenden Kollektionstyp
• Duplikate erlaubt
•
Aber Schlüsselangabe möglich
• Reihenfolge aber nicht festgelegt
•
Bestimmte Anfragekonstrukte erlauben jedoch
Tupelordnung (siehe ORDER BY)
Wednesday, November 19, 2008
6
SQL-Datenmodell:
Domänen
• character (n), char (n)
• character varying (n), varchar (n)
• numeric (p,s), integer
• blob oder raw für sehr große binäre Daten
• clob für sehr große String-Attribute
• date für Datumsangaben
• xml für XML-Dokumente
Wednesday, November 19, 2008
7
DDL: Tabelle anlegen
create table Professoren NULL
“character(2)
”
(PersNr integer not null,
Name varchar (30) not null
Rang character (2) );
character(2)NULL
Wednesday, November 19, 2008
8
Einfache SQL-Anfrage
select PersNr, Name
from Professoren
where Rang= ´C4´;
PersNr
2125
2126
2136
2137
Wednesday, November 19, 2008
Name
Sokrates
Russel
Curie
Kant
9
Duplikateliminierung
select distinct Rang
from Professoren
Rang
C3
C4
Wednesday, November 19, 2008
10
Verknüpfung von Relationen
Wer liest Mäutik?
select Name
from Professoren,Vorlesungen
where PersNr = gelesenVon and Titel = `Grundzüge‘ ;
ΠName(σPersNr=gelesenVon∧Titel=’Grundzüge’(Professoren × Vorlesungen))
Wednesday, November 19, 2008
11
FROM-Klausel
from Professoren,Vorlesungen
Vorlesungen
Professoren
PersNr
Name
Rang
Raum
VorlNr
2125
2126
Sokrates
Russel
C4
C4
226
232
5001
5041
Grundzüge
Ethik
4
4
gelesen
von
2137
2125
2127
Kopernikus
C3
310
5043
Erkenntnistheorie
3
2126
2133
Popper
C3
52
2134
Augustinus
C3
309
5049
4052
Mäeutik
Logik
2
4
2125
2125
2136
2137
Curie
Kant
C4
C4
36
7
Titel
SWS
...
×
Wednesday, November 19, 2008
12
gelesen
SWS
von
4
2137
2
2125
PersNr
Name
Rang
Raum
VorlNr
Titel
2125
2125
Sokrates
Sokrates
C4
C4
226
226
5001
5049
Grundzüge
Mäeutik
2126
...
Russel
...
C4
...
232
...
5001
...
Grundzüge
...
4
...
2137
...
2127
Kopernikus
C3
310
5049
Mäeutik
2
2125
...
...
...
...
...
...
...
...
2134
Augustinus
C3
309
5001
Grundzüge
4
2137
2134
Augustinus
C3
309
5041
Ethik
4
2125
...
2136
...
2137
...
...
Curie
...
Kant
...
...
C4
...
C4
...
...
36
...
7
...
...
5041
...
5049
...
...
Ethik
...
Mäeutik
...
...
4
...
2
...
...
2125
...
2125
...
where PersNr = gelesenVon and Titel = `Mäeutik‘
Wednesday, November 19, 2008
13
Projektion auf Ergebnisschema
PersNr
Name
Rang
Raum
VorlNr
Titel
2137
Sokrates
C4
226
5001
Grundzüge
gelesen
SWS
von
4
2137
select Name
Name
Sokrates
Wednesday, November 19, 2008
14
Duplikate
select Rang
from Professoren
• Vorsicht: SQL erzeugt ohne distinct immer
Duplikate, im relationalen Modell nicht möglich
• Korrekte SQL-Seite der Übersetzung also...
Wednesday, November 19, 2008
15
Kanonische Übersetzung
Allgemein hat eine
(ungeschachtelte) SQLAnfrage die Form:
Übersetzung in die relationale
Algebra:
Π A1, ..., An(σP (R1 x ... x Rk ))
Π A1, ..., An
σP
select distinct A1, ..., An
x
from R1, ..., Rk
x
where P;
x
R1
Wednesday, November 19, 2008
Rk
R3
R2
16
Namen in FROM-Klausel
•Welche Studenten hören welche Vorlesungen?
select Name, Titel
from Studenten, hören,Vorlesungen
where Studenten.MatrNr = hören.MatrNr and
hören.VorlNr = Vorlesungen.VorlNr;
•(Um-)Benennung der Relationen
select s.Name, v.Titel
from Studenten s, hören h,Vorlesungen v
where s. MatrNr = h. MatrNr and h.VorlNr = v.VorlNr
Wednesday, November 19, 2008
17
Mengenoperationen
( select Name from Assistenten )
union
( select Name from Professoren)
•union Vereinigung
•union all Vereinigung ohne Duplikateleminierung
•intersect Durchschnitt
•minus Mengendifferenz
•Schemata müssen gleich sein!
Wednesday, November 19, 2008
18
Aggregatfunktionen
select avg (Semester) from Studenten
min, max, avg, count, sum,...
Wednesday, November 19, 2008
19
Gruppierung
select gelesenVon, sum (SWS)
from Vorlesungen
group by gelesenVon;
Wednesday, November 19, 2008
20
Filtern von Gruppen
select gelesenVon, Name, sum (SWS)
from Vorlesungen, Professoren
where gelesenVon = PersNr and Rang = ´C4´
group by gelesenVon, Name
having avg (SWS) >= 3;
Wednesday, November 19, 2008
21
Besonderheiten bei
Aggregatoperationen
•
•
pro Gruppe ein Ergebnistupel
alle Attribute in select-Klausel müssen auch in group
by-Klausel stehen
•
stellt eindeutigen Wert pro Gruppe sicher
Wednesday, November 19, 2008
22
Beispielauswertung
from Professoren,Vorlesungen
Vorlesungen
Professoren
PersNr
Name
Rang
Raum
VorlNr
2125
2126
Sokrates
Russel
C4
C4
226
232
5001
5041
Grundzüge
Ethik
4
4
gelesen
von
2137
2125
2127
Kopernikus
C3
310
5043
Erkenntnistheorie
3
2126
2133
Popper
C3
52
2134
Augustinus
C3
309
5049
4052
Mäeutik
Logik
2
4
2125
2125
2136
2137
Curie
Kant
C4
C4
36
7
Titel
SWS
...
×
Wednesday, November 19, 2008
23
gelesen
SWS
von
4
2137
2
2125
PersNr
Name
Rang
Raum
VorlNr
Titel
2125
2125
Sokrates
Sokrates
C4
C4
226
226
5001
5049
Grundzüge
Mäeutik
2126
...
Russel
...
C4
...
232
...
5001
...
Grundzüge
...
4
...
2137
...
2127
Kopernikus
C3
310
5049
Mäeutik
2
2125
...
...
...
...
...
...
...
...
2134
Augustinus
C3
309
5001
Grundzüge
4
2137
2134
Augustinus
C3
309
5041
Ethik
4
2125
...
2136
...
2137
...
...
Curie
...
Kant
...
...
C4
...
C4
...
...
36
...
7
...
...
5041
...
5049
...
...
Ethik
...
Mäeutik
...
...
4
...
2
...
...
2125
...
2125
...
where gelesenVon = PersNr and Rang = ´C4´
Wednesday, November 19, 2008
24
Gruppierung
VorlN
r
Titel
5001
Grundzüge
5041
Ethik
5043
Erkenntnistheorie
5049
Mäeutik
4052
Logik
5052 Wissenschaftstheorie
5216
Bioethik
4630
Die 3 Kritiken
SWS
4
4
3
2
4
3
2
4
gelesen
PersNr
von
2137
2125
2126
2125
2125
2126
2126
2137
2137
2125
2126
2125
2125
2126
2126
2137
Name
Kant
Sokrates
Russel
Sokrates
Sokrates
Russel
Russel
Kant
Rang Raum
C4
C4
C4
C4
C4
C4
C4
C4
7
226
232
226
226
232
232
7
group by gelesenVon, Name
Wednesday, November 19, 2008
25
Gruppen filtern
VorlN
r
Titel
SWS
5041
5049
4052
Ethik
Mäeutik
Logik
4
2
4
2125
2125
2125
2125
2125
2125
Sokrates
Sokrates
Sokrates
C4
C4
C4
226
226
226
5216
Bioethik
5043
Erkenntnistheorie
5052 Wissenschaftstheorie
2
3
3
2126
2126
2126
2126
2126
2126
Russel
Russel
Russel
C4
C4
C4
232
232
232
5001
4630
4
4
2137
2137
2137
2137
Kant
Kant
C4
C4
7
7
Grundzüge
Die 3 Kritiken
gelesen
PersNr
von
Name
Rang Raum
having avg(SWS)>=2
VorlN
r
gelesen
PersNr
von
Titel
SWS
5041
5049
4052
Ethik
Mäeutik
Logik
4
2
4
2125
2125
2125
2125
2125
2125
Sokrates
Sokrates
Sokrates
C4
C4
C4
226
226
226
5001
4630
Grundzüge
Die 3 Kritiken
4
4
2137
2137
2137
2137
Kant
Kant
C4
C4
7
7
Name
Rang Raum
select gelesenVon, Name, sum(SWS)
Wednesday, November 19, 2008
26
Ergebnis
gelesenVon
Name
sum(SWS)
2125
Sokrates
10
2137
Kant
8
Wednesday, November 19, 2008
27
Sortieren
select PersNr, Name, Rang
from
Professoren
order by Rang desc, Name asc;
PersNr
2136
2137
2126
2125
2134
2127
2133
Wednesday, November 19, 2008
Name
Curie
Kant
Russel
Sokrates
Augustinus
Kopernikus
Popper
Rang
C4
C4
C4
C4
C3
C3
C3
28
Attributauswahl in SELECT
select * from studenten
select Titel, (SWS * 1.5) as ECTS
from Vorlesungen
Wednesday, November 19, 2008
29
Updates in SQL
• DML erlaubt auch Veränderungen der
Basisrelationen
Wednesday, November 19, 2008
30
Einfügen
insert into hören
select MatrNr,VorlNr
from Studenten,Vorlesungen
where Titel= `Logik´;
insert into Studenten (MatrNr, Name)
values (28121, `Archimedes´);
Nullwert!
Wednesday, November 19, 2008
31
Änderung von Tupeln
update Studenten
set Semester= Semester + 1
update prüfen
set note=6
where MatrNr=25403
Wednesday, November 19, 2008
32
Löschen
delete from Studenten where Semester > 13;
Wednesday, November 19, 2008
33
Nullwerte in SQL
1. Erweiterung der Operatoren der Domäne D auf
•
•
NULL
D
Prinzip: NULL bedeutet “unbekannt”
1 + NULL = NULL, concat(NULL,’Hallo’)=NULL,...
2. Erweiterung auf dreiwertige Logik
•
•
•
true, false, unknown
Vergleich mit NULL ergibt unknown
where verlangt nach wie vor “true”
3. NULL bildet eigene Gruppe bei group by
4. Test auf NULL mit is null oder is not null
Wednesday, November 19, 2008
34
Wahrheitstabellen
X
not X
true
false
unknown unknown
false
true
and
true
unknown
true
true
unknown
unknown
unknown
unknown
false
false
false
false
false
false
false
or
true
unknown
false
true
true
true
true
unknown
true
unknown unknown
false
true
unknown
Wednesday, November 19, 2008
false
35
Sichten
Sicht 1
Sicht 2
Logische Ebene
Sicht 3
Anwendungssichten
basieren evtl. auf
anderen Schemata als
logische Ebene
Physische Ebene
...wird von SQL durch View-Konstrukt unterstützt
Wednesday, November 19, 2008
36
Erzeugung von
SQL-Views
create view VVZ as (VNr, Titel, Dozent)
select VorlNr, Titel, Name
from Vorlesungen, Professoren
where gelesenVon=PersNr
Wednesday, November 19, 2008
37
Anwendungen
• Datenunabhängigkeit
• Datenschutz (Zugriffskontrolle)
• Modularisierung
• Performance-Steigerung
Wednesday, November 19, 2008
38
Geschachtelte Anfragen
(WHERE)
select *
from prüfen
where Note < ( select avg (Note) from prüfen );
Wednesday, November 19, 2008
39
Elementtest
select Name
from Professoren
where PersNr not in ( select gelesenVon
from Vorlesungen );
Wednesday, November 19, 2008
40
Existenzquantor exists
select p.Name
from Professoren p
Korrelation
where not exists
( select *
from Vorlesungen v
where v.gelesenVon = p.PersNr );
Wednesday, November 19, 2008
41
Geschachtelte Anfragen
(SELECT)
select PersNr, Name,
(select sum (SWS) as Lehrbelastung
from Vorlesungen
Korrelation
where gelesenVon=PersNr )
from Professoren;
Wednesday, November 19, 2008
42
Geschachtelte Unteranfragen
(FROM)
select tmp.MatrNr, tmp.Name, tmp.VorlAnzahl
from (select s.MatrNr, s.Name, count(*) as VorlAnzahl
from Studenten s, hören h
where s.MatrNr=h.MatrNr
group by s.MatrNr, s.Name) tmp
where tmp.VorlAnzahl > 2;
Wednesday, November 19, 2008
MatrNr
Name
VorlAnzahl
28106
Carnap
4
29120
Theophrastos
3
43
Weitere Beispiele
für Unteranfragen
( select Name from Assistenten )
union
( select Name from Professoren );
Wednesday, November 19, 2008
44
Herunterladen