ws 2009/10 datenbanksysteme fr 15:15 – 16:45 r 0.006 vorlesung #4 sql (teil 1)
TRANSCRIPT
![Page 1: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/1.jpg)
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Vorlesung #4
SQL (Teil 1)
![Page 2: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/2.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 2
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 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
![Page 3: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/3.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 3
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Geschichte 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)
![Page 4: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/4.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 4
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Datentypen 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 ...
![Page 5: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/5.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 5
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Einfache 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));
![Page 6: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/6.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 6
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Schemaverä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;
![Page 7: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/7.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 7
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Datenmanipulation (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‘);
![Page 8: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/8.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 8
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Datenmanipulation (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;
![Page 9: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/9.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 9
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Einfache SQL Anfragen
PersNr Name
2125 Sokrates
2126 Russel
2136 Curie
2137 Kant
select PersNr, Name
from Professoren
where Rang= ´C4´;
![Page 10: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/10.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 10
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Einfache 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
![Page 11: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/11.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 11
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Einfache SQL Anfragen (3)
Duplikateliminierung
select distinct Rang
from Professoren;Rang
C3
C4
![Page 12: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/12.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 12
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
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,
![Page 13: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/13.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 13
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
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
![Page 14: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/14.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 14
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
![Page 15: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/15.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 15
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
3 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
![Page 16: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/16.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 16
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
![Page 17: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/17.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 17
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Aggregatfunktionen 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;
![Page 18: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/18.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 18
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
... 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;
![Page 19: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/19.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 19
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
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
![Page 20: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/20.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 20
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
![Page 21: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/21.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 21
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
![Page 22: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/22.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 22
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
![Page 23: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/23.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 23
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Ergebnis der Abfrage
gelesenVon Name sum (SWS)
2125 Sokrates 10
2137 Kant 8
![Page 24: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/24.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 24
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 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 Studentenwhere Semester < 13 or Semester >= 13
Tupel (Zeilen) mit Null-Werten werden einfach nicht mitgezählt !!!
![Page 25: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/25.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 25
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 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
![Page 26: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/26.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 26
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
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
![Page 27: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/27.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 27
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Regeln 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
![Page 28: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/28.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 28
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
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)
![Page 29: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/29.jpg)
© Bojan Milijaš, 23.10.2009 Vorlesung #4 - SQL (Teil 1) 29
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92, SQL-99 Rekursion Sichten (Views)
Ausblick Vorlesung #5
![Page 30: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)](https://reader036.vdocuments.mx/reader036/viewer/2022070310/55204d7749795902118cbf40/html5/thumbnails/30.jpg)
WS 2009/10Datenbanksysteme
Fr 15:15 – 16:45R 0.006
Vorlesung #4
Ende