SQL (Teil 1)

Werbung
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Vorlesung #4
SQL (Teil 1)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
„Fahrplan“
 Wiederholung/Zusammenfassung Relationale
Anfragesprachen
 Geschichte der Sprache SQL
 SQL DDL (CREATE TABLE ...)
 SQL DML (INSERT, UPDATE, DELETE)
 SQL Abfragen
 Aggregation und Gruppierung
 Null-Werte, 3-wertige Logik
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
2
Geschichte von SQL
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
 Anfang 70er Jahre „System R“ von IBM mit der
Sprache „SEQUEL“ – Structured English Query
Language, später aus patentrechtlichen Gründen in
SQL unbenannt
 Parallel entwickelte man QUEL als Anfragesprache
für das INGRES-System
 SQL setzte sich durch als Industrie-Standard (wegen
„Ignorranz“ der INGRES-Entwickler)
 1986: SQL-86 1. SQL Norm von ANSI Comitee
 1992: SQL-92 bzw. SQL-2
 1999: SQL-99 bzw. SQL-3 (objektrelationale
Erweiterungen)
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
3
Datentypen in SQL
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Atomare Datentypen als Attribut-Domänen
 Zahlen
 numeric(p,s) – number(p,s)
 integer
 float
 Zeichenketten
 character(n) – char(n)
 char varying (n) – varchar(n), varchar2(n)
 Datumstyp
 date
 Weitere: BLOB (Binary Large Objects), RAW für
große Binärdatein, CLOB (Character LOB), benutzerdefinierte Typen als objektrelationale Erweiterung ...
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
4
Einfache Datendefinition
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
SQL DDL (Data Definition Language)
CREATE TABLE Professoren
(PersNr
INTEGER,
Name
CHARACTER VARYING(30),
Rang
CHARACTER(2));
CREATE TABLE professoren
(persnr
NUMBER(*,0),
name
VARCHAR2(30),
rang
CHAR(2));
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
5
Schemaveränderungen
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
SQL DDL (Data Definition Language)
Hinzufügen eines Attributs bzw. einer Spalte
ALTER TABLE Professoren
ADD Raum INTEGER;
Löschen eines Attributs bzw. einer Spalte
ALTER TABLE Professoren
DROP COLUMN Raum;
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
6
Datenmanipulation (1)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
SQL DML (Data Manipultaion Language)
Einfügen von Tupeln
insert into hören
select MatrNr, VorlNr
from Studenten, Vorlesungen
where Titel= `Logik‘ ;
insert into Studenten (MatrNr, Name)
values (28121, `Archimedes‘);
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
7
Datenmanipulation (2)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
SQL DML (Data Manipultaion Language)
Löschen von Tupeln
delete Studenten
where Semester > 13;
Verändern von Tupeln
update Studenten
set Semester= Semester + 1;
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
8
Einfache SQL Anfragen
select
PersNr, Name
from
Professoren
where
Rang= ´C4´;
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
PersNr Name
2125 Sokrates
2126
Russel
2136
Curie
2137
Kant
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
9
Einfache SQL Anfragen (2)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Sortierung
PersNr
Name
Rang
2136
Curie
C4
from Professoren
2137
Kant
C4
order by Rang desc, Name asc;
2126
Russel
C4
2125
Sokrates
C4
select PersNr, Name, Rang
2134 Augustinus C3
desc – descending 
2127 Kopernikus C3
asc – ascending 
2133
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
Popper
C3
10
Einfache SQL Anfragen (3)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Duplikateliminierung
select distinct Rang
from Professoren;
© Bojan Milijaš, 23.10.2009
Rang
C3
C4
Vorlesung #4 - SQL (Teil 1)
11
Anfragen über mehrere
Relationen
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Welcher Professor liest "Mäeutik"?
select Name, Titel
from Professoren, Vorlesungen
where PersNr = gelesenVon and Titel = `Mäeutik‘ ;

Name, Titel
( PersNr  gelesenVon  Titel ' Mäeutik' (Professor en  Vorlesunge n))
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
12
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Anfragen über mehrere
Relationen (2)
Professoren
PersNr Name Rang Raum
2125 Sokrates C4 226
2126 Russel
C4 232
2137
Kant
C4
7
Vorlesungen
VorlNr
Titel
SWS gelesenVon
5001 Grundzüge
4
2137
5041
Ethik
4
2125
5049
Mäeutik
4630 Die 3 Kritiken
2
2125
4
2137
Verknüpfung

© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
13
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
14
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
3 Wege Join
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;
Alternativ:
select s.Name, v.Titel
from Studenten s, hören h, Vorlesungen v
where s. MatrNr = h. MatrNr and
h.VorlNr = v.VorlNr
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
15
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
16
Aggregatfunktionen
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
 min, max, avg, sum, count
SELECT
FROM
SELECT
FROM
SELECT
FROM
SELECT
FROM
SELECT
min(Semester)
Studenten;
max(Semester)
Studenten;
avg(Semester)
Studenten;
sum(Semester)
Studenten;
count(MatrNr), -- count(*)
count(DISTINCT Semester)
FROM Studenten;
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
17
... mit Gruppierung
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
 min, max, avg, sum, count mit GROUP BY
select gelesenVon, sum (SWS)
from Vorlesungen
group by gelesenVon;
 mit HAVING
select gelesenVon, Name, sum (SWS)
from Vorlesungen, Professoren
where gelesenVon = PersNr and Rang = ´C4´
group by gelesenVon, Name
having avg (SWS) >= 3;
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
18
WS 2009/10
Besonderheiten bei
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Aggregatoperationen
• SQL erzeugt pro Gruppe ein Ergebnistupel
• Deshalb müssen alle in der select-Klausel
aufgeführten Attribute - außer den
aggregierten – auch in der group byKlausel aufgeführt werden
• Nur so kann SQL sicherstellen, dass sich
das Attribut nicht innerhalb der Gruppe
ändert
SELECT A1, A2, An, count(*)
FROM ...
WHERE ..
GROUP BY A1, A2, An
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
19
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
20
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
21
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
22
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Ergebnis der Abfrage
gelesenVon
2125
Name
Sokrates
sum (SWS)
10
2137
Kant
8
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
23
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Nullwerte
 unbekannter Wert
 „wird vielleicht später nachgereicht“
 Nullwerte können auch im Zuge der
Anfrageauswertung entstehen (Bsp. äußere Joins)
 manchmal sehr überraschende Anfrageergebnisse,
wenn Nullwerte vorkommen

UPDATE studenten SET semester = '' WHERE matrnr = 24002;
select count (*)
from Studenten
where Semester < 13 or Semester >= 13
 Tupel (Zeilen) mit Null-Werten werden einfach nicht
mitgezählt !!!
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
24
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Nullwerte (2)
 NULL + 1 = NULL, NULL * 1 = NULL
 Beispiele (Oracle)
SELECT NULL + 2
FROM Dual;
SELECT NULL * 2
FROM Dual;
 Dual ist so etwas wie „Dummy“-Tabelle in Oracle
 Es gilt die sogenannte 3-wertige Logik in SQL
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
25
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
3-wertige Logik
(NULL Logik)
not
TRUE FALSE
NULL NULL
FALSE TRUE
and
TRUE
NULL
FALSE
TRUE NULL
TRUE NULL
NULL
NULL
FALSE FALSE
or
TRUE
TRUE
TRUE
NULL
TRUE
FALSE
TRUE
NULL
FALSE
TRUE
TRUE
NULL
NULL
NULL
FALSE
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
FALSE
FALSE
FALSE
FALSE
26
Regeln für NULL Werte
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
 In arithmetischen Ausdrücken werden NULL Werte
propagiert (NULL + 3 = NULL)
 Es gilt die 3-wertige Logik. Vergleichsoperatoren
(=, >,<=) liefern immer NULL zurück, wenn
mindestens ein Argument NULL ist
 Logische Ausdrücke werden entsprechend den
vorgestellten 3-wertige-Logik Tabellen ausgewertet
 Tupeln mit NULL als Ergebnis in einer WHERE
Klausel werden nicht weitergereicht, d.h NULL
Werte werden in WHERE Klauseln ausgelassen
 Bei Gruppierung ist NULL ein eigenständiger Wert
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
27
Behandlung von NULL Werten
(Oracle und SQL-92)
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
 In Oracle gibt es eine „null value“ Funktion nvl (if
NULL then):
SELECT nvl(NULL,5) + 2 AS Result
FROM Dual;
Result
-----7
 Man kann NULL Werte mit IS NULL oder IS NOT
NULL testen (SQL-92)
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
28
Ausblick Vorlesung #5









WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
SQL, Fortsetzung
Geschachtelte Anfragen
Korrelierte Anfragen
Mengenoperationen
Quantifizierte Anfragen (, )
Spezielle Sprachkonstrukte
Joins in SQL-92, SQL-99
Rekursion
Sichten (Views)
© Bojan Milijaš, 23.10.2009
Vorlesung #4 - SQL (Teil 1)
29
WS 2009/10
Datenbanksysteme
Fr 15:15 – 16:45
R 0.006
Vorlesung #4
Ende
Herunterladen