25
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #4 SQL (Teil 1)

WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #4 SQL (Teil 1)

Embed Size (px)

Citation preview

Page 1: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #4 SQL (Teil 1)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

Vorlesung #4

SQL (Teil 1)

Page 2: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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

Page 3: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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)

Page 4: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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 ...

Page 5: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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));

Page 6: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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;

Page 7: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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‘);

Page 8: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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;

Page 9: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 9

Einfache SQL Anfragen

PersNr Name

2125 Sokrates

2126 Russel

2136 Curie

2137 Kant

select PersNr, Name

from Professoren

where Rang= ´C4´;

Page 10: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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

Page 11: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 11

Einfache SQL Anfragen (3)

Duplikateliminierung

select distinct Rang

from Professoren;Rang

C3

C4

Page 12: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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,

Page 13: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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

Page 14: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 14

Page 15: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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

Page 16: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 16

Page 17: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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;

Page 18: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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;

Page 19: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 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

Page 20: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 20

Page 21: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 21

Page 22: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 22

Page 23: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 23

Ergebnis der Abfrage

gelesenVon Name sum (SWS)

2125 Sokrates 10

2137 Kant 8

Page 24: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 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) 24

SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92, SQL-99 Rekursion Sichten (Views)

Ausblick Vorlesung #5

Page 25: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #4 SQL (Teil 1)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

Vorlesung #4

Ende