SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

30
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

Transcript of SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

Page 1: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Vorlesung #6

SQL (Teil 1)

Page 2: SS 2004 Datenbanken 4W Mi 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

Page 3: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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)

Page 4: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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 ...

Page 5: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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));

Page 6: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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;

Page 7: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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‘);

Page 8: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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;

Page 9: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 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´;

Page 10: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 11: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 12: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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,

Page 13: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 14: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 14

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 15: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 16: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 16

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 17: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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;

Page 18: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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;

Page 19: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 20: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 20

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 21: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 21

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 22: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© Bojan Milijaš, 21.04.2004 Vorlesung #6 - SQL (Teil 1) 22

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Page 23: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 24: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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 !!!

Page 25: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 26: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 27: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 28: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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)

Page 29: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

© 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

Page 30: SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)

SS 2004Datenbanken 4WMi 13:30 – 15:00

G 2.30

Vorlesung #6

Ende