Upload
bertilda-wendling
View
104
Download
0
Embed Size (px)
Citation preview
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
Vorlesung #4
SQL (Teil 1)
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 2
„Fahrplan“
Wiederholung/Zusammenfassung Relationales Modell Relationale Algebra Relationenkalkül
Geschichte der Sprache SQL SQL DDL (CREATE TABLE ...) SQL DML (INSERT, UPDATE, DELETE) SQL Abfragen Aggregation und Gruppierung Null-Werte, 3-wertige Logik
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 3
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)
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 4
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 ...
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 5
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));
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 6
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;
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 7
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‘);
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 8
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;
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 9
Einfache SQL Anfragen
PersNr Name
2125 Sokrates
2126 Russel
2136 Curie
2137 Kant
select PersNr, Name
from Professoren
where Rang= ´C4´;
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 10
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
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 11
Einfache SQL Anfragen (3)
Duplikateliminierung
select distinct Rang
from Professoren;Rang
C3
C4
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 12
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,
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 13
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
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 14
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 15
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
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 16
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 17
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;
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 18
... 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;
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 19
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
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 20
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 21
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 22
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 23
Ergebnis der Abfrage
gelesenVon Name sum (SWS)
2125 Sokrates 10
2137 Kant 8
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
© Bojan Milijaš, 26.10.2012 Vorlesung #4 - SQL (Teil 1) 24
SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92, SQL-99 Rekursion Sichten (Views)
Ausblick Vorlesung #5
WS 2012/13Datenbanksysteme
Fr 15:15 – 16:45R 2.007
Vorlesung #4
Ende