SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Vorlesung #6
SQL (Teil 1)
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 2
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30„Fahrplan“
Besprechung der Übungsaufgaben 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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 3
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Geschichte von SQL
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 4
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Datentypen in SQL
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), benutzer-definierte Typen als objektrelationale Erweiterung ...
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 5
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Einfache Datendefinition
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 6
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Schemaveränderungen
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 7
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Datenmanipulation (1)
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 8
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Datenmanipulation (2)
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 9
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Einfache SQL Anfragen
PersNr Name
2125 Sokrates
2126 Russel
2136 Curie
2137 Kant
select PersNr, Name
from Professoren
where Rang= ´C4´;
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 10
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Einfache SQL Anfragen (2)
Sortierung
select PersNr, Name, Rang
from Professoren
order by Rang desc, Name asc;
desc – descending
asc – ascending
PersNr Name Rang
2136 Curie C4
2137 Kant C4
2126 Russel C4
2125 Sokrates C4
2134 Augustinus C3
2127 Kopernikus C3
2133 Popper C3
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 11
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Einfache SQL Anfragen (3)
Duplikateliminierung
select distinct Rang
from Professoren;Rang
C3
C4
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 12
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Anfragen über mehrere RelationenWelcher Professor liest "Mäeutik"?
select Name, Titelfrom Professoren, Vorlesungenwhere PersNr = gelesenVon and Titel = `Mäeutik‘ ;
n))Vorlesungeen(Professor( Mäeutik''TitelgelesenVonPersNr TitelName,
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 13
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Anfragen über mehrere Relationen (2)
RaumRangNamePersNr
226232
7
C4C4
C4
SokratesRussel
Kant
21252126
2137
ProfessorengelesenVonSWSTitelVorlNr
21374Grundzüge5001
21374Die 3 Kritiken4630
21252Mäeutik5049
21254Ethik5041
Vorlesungen
Verknüpfung
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 14
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 15
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.303 Wege JoinWelche Studenten hören welche Vorlesungen?
select Name, Titelfrom Studenten, hören, Vorlesungenwhere Studenten.MatrNr = hören.MatrNr and
hören.VorlNr = Vorlesungen.VorlNr;
Alternativ:select s.Name, v.Titelfrom Studenten s, hören h, Vorlesungen vwhere s. MatrNr = h. MatrNr and
h.VorlNr = v.VorlNr
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 16
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 17
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Aggregatfunktionen min, max, avg, sum, count
SELECT min(Semester) FROM Studenten;SELECT max(Semester) FROM Studenten;SELECT avg(Semester) FROM Studenten;SELECT sum(Semester) FROM Studenten;SELECT count(MatrNr), -- count(*) count(DISTINCT Semester) FROM Studenten;
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 18
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30 ... mit Gruppierung min, max, avg, sum, count mit GROUP BY
select gelesenVon, sum (SWS)from Vorlesungengroup by gelesenVon;
mit HAVINGselect gelesenVon, Name, sum (SWS)from Vorlesungen, Professorenwhere gelesenVon = PersNr and Rang = ´C4´group by gelesenVon, Name
having avg (SWS) >= 3;
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 19
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Besonderheiten bei 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 by-Klausel 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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 20
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 21
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 22
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 23
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Ergebnis der Abfrage
gelesenVon Name sum (SWS)
2125 Sokrates 10
2137 Kant 8
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 24
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Nullwerte 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 vorkommenselect count (*) from Studentenwhere Semester < 13 or Semester >= 13
Tupel (Zeilen) mit Null-Werten werden einfach nicht mitgezählt !!!
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 25
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Nullwerte (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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 26
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
3-wertige Logik (NULL Logik)
not
TRUE FALSE
NULL NULL
FALSE TRUE
and TRUE NULL FALSE
TRUE TRUE NULL FALSE
NULL NULL NULL FALSE
FALSE FALSE FALSE FALSE
or TRUE NULL FALSE
TRUE TRUE TRUE TRUE
NULL TRUE NULL NULL
FALSE TRUE NULL FALSE
© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 27
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30Regeln für NULL Werte
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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 28
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Behandlung von NULL Werten (Oracle und SQL-92) 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š, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 29
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92 Rekursion Sichten (Views)
Ausblick Vorlesung #7
SS 2004Datenbanken 4WMi 13:30 – 15:00
G 2.30
Vorlesung #6
Ende