30
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)

WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)

Embed Size (px)

Citation preview

Page 1: WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R 0.006 Vorlesung #4 SQL (Teil 1)

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

WS 2009/10Datenbanksysteme

Fr 15:15 – 16:45R 0.006

Vorlesung #4

Ende