Sie sind auf Seite 1von 34

Informationssysteme

2Manfred2Reichert,2Peter2Dadam |2SS220152|2Universitt Ulm

Seite22

Kapitel 2:2SQL2I
Kompakte Wiederholung ausgewhlter Aspekte

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite23

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.11Vorbemerkungen
Lernziele
! Dieses2Kapitel2ist2ein2Auszug2aus2dem2korrespondierenden2 DatenbankQKapitel2
der2Vorlesung2Programmierung1von1Systemen2(PvS)
! Es2dient2in2kompakter2Form2der1Auffrischung1im1Selbststudium1der2fr2das2
Folgende2 relevanten2SQL<Kenntnissed2 das2entsprechende2 Wissen2wird2im2
Folgenden2 als2bekannt2vorausgesetzt
! An2einigen2Stellen2haben2wir2kleinere2Ergnzungen vorgenommen,2die2wir2
entsprechend2als2solche2gekennzeichnet2haben
! Ergnzende Hinweise
! Fr2die2Beispiele2sowie2bungen2 zu2diesem2Kapitel2verwenden2wir2Derby mit2
einer2vereinfachten2Version2der2LegoTrailerQDatenbank2 (Schema2Simple)
! Fr2die2Realisierung2prozessorientierter IS2werden2wir2spter2ebenfalls2Derby mit2
dem2SQL1Explorer1als2graphisches2Interface2verwendend2hier2werden2wir2mit2
einer2erweiterten2Version2der2LegoTrailerQDatenbank2arbeiten2
! Derby2verwendet2im2Wesentlichen2die2StandardQSQLQSyntaxd2auf2einige2
Unterschiede2wird2im2Folgenden2 hingewiesen2
!

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite24

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite25

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.21Datenunabhngigkeit von1Anwendungsprogrammen
Entsprechung in1relationalen DBMS
virtuelle2Relationen,2Sichten
(CREATE2VIEW2)

logisches2Schema
(CREATE2TABLE2)

ANSI/SPARC13<Schema<Architektur

Festlegung/nderung2 der
phys.2Speicherungsform2fr2
Relation
CREATE2INDEX2
CREATE2TABLESPACE2

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite26

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite27

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.31Beispiel<Tabellen,1ER<Modell1und1LegoTrailer<Teilebersicht

Ergnzende Unterlagen zur Vorlesung:

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite28

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite29

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Inhalt
2.4.12Basisbaustein:2SELECTQFROMQWHEREQBlock
2.4.22IntegerQ und2RealQArithmetik
2.4.32StringQFunktionen
2.4.42Bedingte Ausgaben (CASEQAusdrcke)
2.4.52Joins
2.4.62Vereinigung,2Differenz,2Durchschnitt
2.4.72Subqueries
2.4.82GruppierungsQ und2Aggregationsfunktionen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite210

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
2.4.11Basisbaustein:1 SELECT<FROM<WHERE<Block1 (einfache2alte2Form2(SQL86/SQL89))

ALL11
DISTINCT

SELECT
FROM

Attributliste

AttrName bzw.2Ri.AttrName
oder
*22bzw.22Ri.*22(=2alle)
(Eindeutigkeit2gefordert!)

R1,2R2,2,2Rn

WHERE Prdikat

ORDER1BY

Attr1

Bedeutung SFW:1

ASC
DESC

Attributliste

Prdikat

,2Attr2

(R1

ASC
DESC

1 R

,2

kartesisches1Produkt!

Auswertungsreihenfolge (logisch):
FROM<Klausel >11WHERE<Klausel >11SELECT<Klausel >11ORDER<BY<Klausel
!

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite211

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S1:1Gib1alle1Lieferanten1aus,1die1aus1'Ulm'1kommen
SELECT1 LiefNr,2LiefName,2LiefStadt,2Bewertung SELECT *
FROM111111111Lieferanten
FROM
Lieferanten
WHERE111111LiefStadt =2'Ulm'
WHERE
LiefStadt =2'Ulm'
mit2expliziter2Attributangabe
mittels2Kurzform

S2:1Gib1alle1Lieferanten1mit1Lieferantennummer1 15601aus
SELECT *
FROM
Lieferanten
WHERE
LiefNr >=2560

Vergleichsausdrcke2knnen2mit2AND und2OR verknpft2und2auch2geklammert


werden:22(wie2blich,2bindet2auch2hier2AND strker2als2OR)
...2LiefNr >21002
AND TnNR <2600
...2LiefStadt =2'Ulm'2
OR LiefStadt =2'NeuQUlm'
...2(LiefStadt =2'Ulm'2
OR LiefStadt =2'NeuQUlm')
AND LiefNr >2600

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite212

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

Weitere Vergleichsoperatoren
2LiefNr BETWEEN 4002AND 6002222
(ist quivalent zu:22...2TnNr >=24002AND2TnNR <=2600)
...2LiefNr NOT1BETWEEN14002AND 600
...2LiefNr IN (100,2200,2130,2400)
...2LiefNr NOT1IN1(100,2200,2130,2400)
2NOT ( LiefNr IN (100,2200,2130,2400)2)

Anmerkung zu IN:
! Nach2IN kommt2immer2eine2Menge2atomarer2Werte2
(die2Menge2kann2auch2einQelementig oder2leer2sein)
! Die2INQMenge2kann2auch2durch2eine2Subquery erzeugt2werden2(siehe2spter)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite213

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Integer< und1Real<Arithmetik
Operatoren:22+,2Q,2*,2/22mit2der2blichen2Semantik
! Von2vielen2DBMS2(so2auch2Derby)2wird2darber2hinaus2praktisch2die2ganze2Palette2an2
blichen2numerischen2Operatoren2und2Funktionen2angeboten:
mod(x),2power(x,y),2sin(x),2cos(x),2sqr(x),2...2
!

S3: Gib1aus,1bei1welchen1 Teilen1der1Mindeststand1unterschritten1wurde1und1


welche1Kosten1fr1ein1Auffllen1auf1den1Mindestbestand1 jeweils1entstehen1
wrden
SELECT
FROM
WHERE

TeileID,2Bestand,2MinBestand,2
(MinBestand Q Bestand)2*2KalkKosten AS Auffllkosten
Teile
Bestand2<2MinBestand

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite214

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1String<Funktionen
SQL2sieht2eine2Reihe2von2(gngigen)2 Stringfunktionen vor2
! StringQFunktionen2in2Apache2Derby2(Auswahl)
!

LOWER(string)

string in2Kleinbuchstaben

UPPER(string)

string in2Grobuchstaben

LENGTH(string)
LOCATE(suchstr,2string)
LEFT(string,2anz),2RIGHT(string,2anz)
SUBSTR(string,2start [,2lnge])
TRIM(string)

Entfernen2von2Blanks

CHAR(numerischerWert)

CHAR(123)2 '123'2(als2String)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite215

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Bedingte Ausgaben (CASE<Ausdrcke)


Die2CASEQKlausel2gestattet2es,2die2Tupelwerte in2der2Ergebnismenge2attributwertQ
abhngig2 (fr2die2Ausgabe)2zu2ndern
! S4:2Gib2die2Lieferantentupel mit2der2Bewertung2 im2Klartext2aus,2und2zwar2wie2folgt:2
Q22sehr2schlecht,22Q12schlecht,202neutral,2+12gut,2+22sehr2gut
!

SELECT LiefNr,2LiefName,2LiefStadt,
CASE
WHEN Bewertung2 =
Q2
WHEN Bewertung2 =
Q1
WHEN Bewertung2 =
0
WHEN Bewertung2 =
+1
WHEN Bewertung2 =
+2
ELSE '????'
END AS Bewertung
FROM Lieferanten

THEN
THEN
THEN
THEN
THEN

'sehr2schlecht'
'schlecht'
'neutral'
'gut'
'sehr2gut'

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite216

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Joins
!

Alte1(SQL86/89)1syntaktische1 Grundstruktur1(immer2noch2gltig!)

SELECT
FROM
WHERE

ALL
DISTINCT

Attributliste

Rel1,2Rel2,2,2Reln
Reli.Attributname =2Relj.Attributname
AND
Relk.Attributname =2Rell.Attributname
AND

Rely.Attributname =2Relz.Attributname,2mit i,2j,2k,2l,2,2z2 {1,22,2,2n}


wobei beliebige Vergleichsoperationen sowie Vergleiche zwischen
Attributwerten und2Konstanten zugelassen sind

Siehe2JoinQDefinition:2Kartesisches2Produkt2+2Selektion

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite217

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S5:1Gib1die1Preisliste,1ergnzt1um1die1Teilenamen1 sowie1die1Farbcodes1 im1


Klartext1aus
Join der2alten2Form:
JoinQBedingung
Bisherige2Form:
in2der2WHEREQKlausel
SELECT p.TeileID,2t.TeileName,2f.FarbeText,2p.Preis
FROM
Preisliste2p,2Teiletypen2t,2Farbcodes2f
WHERE
p.TeileID =2t.TeileID AND p.Farbe =2f.Farbcode

Mit1SQL921wurden1explizite1Join<Operatoren1eingefhrt
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite218

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

(Condition)1Join
SELECT
FROM
[2WHERE

select7list
table1:[ AS t1 ] JOIN table2 [ AS t2 ] ON join7condition1
JOIN table3 [ AS t3 ] ON join7condition2
JOIN1
111111111111 ]

Anmerkungen
! Der2ConditionQJoinQAusdruck2wird2von2links2nach2rechts2interpretiert
! d.h.2join7condition1 kann2nur2Attribute2referenzieren,2die2im2Scope von2table1
oder2table2 auftreten,2nicht2jedoch2solche2aus2table3
! join7condition2 kann2auf2alle2Attribute2der2zuvor2spezifizierten2Tabellen2(linke2
Seite)2sowie2die2von2table3 zugreifen.
! Diese2JoinQForm2macht2insbesondere2dann2Sinn,2wenn2die2JoinQSpalten2
verschiedene2Namen2haben2 und/oder2andere2JoinQBedingungen2 als2"="2
ausgedrckt2werden2sollen
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite219

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S5:1Gib1die1Preisliste,1ergnzt1um1die1Teilenamen1 sowie1die1Farbcodes1 im1


Klartext1aus
Nun2mittels2JoinQOperator2formuliert:
SELECT
FROM

p.TeileID,2t.TeileName,2f.FarbeText,2p.Preis
Preisliste2AS p2JOIN Teiletypen2AS t2ON p.TeileID =2t.TeileID
JOIN Farbcodes2AS f2ON p.Farbe =2f.Farbcode

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite220

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

Outer Join
SELECT selectQlist
FROM
table1 LEFT1OUTER1JOIN1table2 ON1...
SELECT selectQlist
FROM
table1 RIGHT1OUTER1JOIN1table2 ON1...
SELECT selectQlist
FROM
table1 FULL1OUTER1JOIN1table2 ON1...

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite221

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S6:1Gib1alle1Teiletypen1mit1ihren1Preisen1lt.1Preisliste1(soweit1vorhanden)1 aus
Formuliert mittels LEFT1OUTER1JOIN:
SELECT
FROM

t.TeileID,2t.TeileName,2p.Farbe,2p.Preis
Teiletypen AS t2LEFT OUTER JOIN
Preisliste AS p2ON t.TeileID =2p.TeileID

Und2dieselbe Anfrage formuliert mittels


RIGHT1OUTER1JOIN:
SELECT
FROM

Preisliste AS1p RIGHT1OUTER1JOIN


Teiletypen AS1t ON11

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite222

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Vereinigung,1Differenz,1Durchschnitt
!

Ergnzender1Hinweis:
Darauf1achten,1dass1die1Spalten1der1
Tabellen1nicht1nur1typmig passen,
sondern1auch1gleich1heien1(ggf.1mit
AS1umbenennen),1 sonst1vergeben1 DBMS
in1der1Resultattabelle1Spaltennummern
als1Attributnamen

Syntaktische1 Grundstruktur
SFWQAusdruck
TABLE1Relationsname
Tabellenausdruck
TABLE1Tabellenausdruck
UNION
EXCEPT11
INTERSECT

[1ALL1]1

SFWQAusdruck
TABLE1Relationsname
Tabellenausdruck
TABLE1Tabellenausdruck
[11ORDER1BY1Attributliste ]

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite223

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S7:1Gib1Firmenname1 und1Stadt1von1allen1Firmen1aus,1zu1denen1 wir1


geschftliche1 Kontakte1als1Kunden1oder1Lieferanten1haben,1sortiert1nach1
Firmenname1und1Stadt
SELECT
FROM
UNION
SELECT
FROM
ORDER BY

KdName AS Firmenname,2 KdStadt AS Stadt


Kunden
LiefName AS Firmenname,2LiefStadt AS Stadt
Lieferanten
Firmenname,2Stadt

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite224

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Subqueries
Variante21

SELECT Attributliste
FROM
Rel1,2Rel2,2...,2Reln
WHERE [1NOT1]11EXISTS11(Tabellenausdruck)

SELECT Attributliste
FROM
Rel1,:Rel2,:...,:Reln
WHERE

Reli.Attributname
(Reli.Attributname,2Rj.Attributname)

SELECT Attributliste
FROM
Rel1,2Rel2,2,2Reln
WHERE

Reli.Attributname
(Reli.Attributname,2Rj.Attributname)

=
<>
<
<=
>=
>

Variante22
ANY
ALL

(Tabellenausdruck)

Variante23

[ NOT1] IN11(Tabellenausdruck)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite225

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S8:1Gib1alle1Kunden1 aus,1die1uns1aktuell1Auftrge1erteilt1haben
Formuliert1mit1Subquery<Variante11
SELECT Attributliste
FROM
Rel1,2Rel2,2...,2Reln
WHERE [1NOT1]11EXISTS11(Tabellenausdruck)
SELECT
FROM
WHERE

*
Kunden AS1k
EXISTS
(SELECT
FROM
WHERE

*
Auftraege AS1a
a.KdNr =1k.KdNr)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite226

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S8:1Gib1alle1Kunden1 aus,1die1uns1aktuell1Auftrge1erteilt1haben
Formuliert1mit1Subquery<Variante12

SELECT Attributliste
FROM
Rel1,:Rel2,:...,:Reln
WHERE

Reli.Attributname
(Reli.Attributname,2Rj.Attributname )

SELECT
FROM
WHERE

*
Kunden
KdNr = ANY
(SELECT
FROM

KdNr
Auftraege)

=
<>
<
<=
>=
>

ANY
ALL

(Tabellenausdruck)

Kurzform2wird2in2Derby
nicht2untersttztd
ggf.2mit2SubqueryQVariante21
formulieren

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite227

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S8:1Gib1alle1Kunden1 aus,1die1uns1aktuell1Auftrge1erteilt1haben
Formuliert1mit1Subquery<Variante13

SELECT Attributliste
FROM
Rel1,2Rel2,2,2Reln
WHERE

Reli.Attributname
(Reli.Attributname,2Rj.Attributname)

SELECT
FROM
WHERE

*
Kunden
KdNr IN
(SELECT
FROM

[ NOT1] IN11(Tabellenausdruck)

KdNr
Auftraege)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite228

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen:1Gruppierungs< und1Aggregationsfunktionen
!

SQL2bietet2standardmig2die2folgenden2 Mengen< bzw.2Aggregations<Funktionen1


(set functionst1aggregate functions) an:

Funktion

Bedeutung

COUNT(*)

Anzahl2der2Tupel2in2der2Relation

COUNT1(1[1DISTINCT1] Attributname:)

Anzahl2der2[unterschiedlichen]2Attributwerte

MAX( Attributname )

Maximum2der2Attributwerte

MIN( Attributname )

Minimum2der2Attributwerte

AVG(1[1DISTINCT1] Attributname )

Durchschnittswert2der2[unterschiedlichen]2
Attributwerte

SUM(1[1DISTINCT1] Attributname )

Summe2der2[unterschiedlichen]2Attributwerte

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite229

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen

Funktion

Bedeutung

COUNT(*)

Anzahl2der2Tupel in2der2Relation

COUNT1(1[1DISTINCT1] Attributname:)

Anzahl2der2[unterschiedlichen]2Attributwerte

MAX( Attributname )

Maximum2der2Attributwerte

MIN( Attributname )

Minimum2der2Attributwerte

AVG(1[1DISTINCT1] Attributname )

Durchschnittswert2der2[unterschiedlichen]2Attributwerte

SUM(1[1DISTINCT1] Attributname )

Summe2der2[unterschiedlichen]2Attributwerte

S9:1Gib1die1Anzahl1aller1Lieferanten1aus
SELECT
COUNT(*)
FROM
Lieferanten

S10:1Gib1die1Anzahl1aller1Lieferanten1aus1Ulm1aus
SELECT
COUNT(*)
FROM
Lieferanten
WHERE
LiefStadt =2'Ulm'

S11:1Gib1das1durchschnittliche1Gehalt1aller1Mitarbeiter1aus
SELECT
AVG(Gehalt)
FROM
Mitarbeiter

oder2mit2DECIMAL(AVG(Gehalt), 8,12)
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite230

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
ALL
SELECT222222222222222222222222
Attributliste
DISTINCT
FROM
Tabellenausdruck
[2WHERE
Nebenbedingung2 2]
[2GROUP2BY2
Gruppierungsattribut(e)2]
[2HAVING
Gruppierungsbedingung2 ]
[2ORDER2BY
Attributliste2]

Unterschied2zwischen2
WHERE2und2HAVING:

WHERE eliminiert2Zeilen

HAVING eliminiert2Gruppen

Anmerkungen
!
!
!

GROUP2BY2bewirkt2(interne)2Teilmengenbildung2 (Gruppierung)2der2ErgebnisQRelation2
entsprechend2dem2Gruppierungsattribut2bzw.2den2Qattributen2(Menge1von1Mengen)
Die2Aggregationsfunktionen2 werden2jeweils2auf2diese2Teilmengen2 angewandt
Eventuelle2Joins werden2vor2Anwendung2 der2Gruppierungsfunktion2ausgefhrt2
Reihenfolge2 jetzt2also:2FROM1>1WHERE1>1GROUP1BY>1HAVING1>1SELECT1>1
ORDER1BY
In2der2SELECTQKlausel2knnen2 bei2Angabe2von2GROUP2BY2 neben2AggregatQ
Funktionen2auch2normale1Attribute stehen,2wenn1nach1diesen1(ebenfalls)1
gruppiert1wurde
Gruppierungsnebenbedingungen2 werden2mittels2HAVINGQKlausel2ausgedrcktd2
HAVING1kann1nur1in1Verbindung1mit1GROUP1BY1auftreten
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite231

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S12:1Gib1zu1allen1Bestellungen1(BestNr,1LiefNr,1BestDatum)1die1Anzahl1der1
Bestellpositionen1 aus
SELECT b.BestNr,2b.LiefNr,2b.BestDatum,2COUNT(*)1AS1AnzahlBestPos
FROM
Bestellungen2AS1b2JOIN1BestellPos AS1p2ON1b.BestNr =2p.BestNr
GROUP1BY1b.BestNr,2b.LiefNr,2b.BestDatum

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite232

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.41DB<Anfragen
!

S13:1Gib1alle1Lieferanten1(LiefNr,1LiefName,1Anzahl_Teile)1aus,1die1nicht1mehr1
als121Teile1liefern1knnen
SELECT
l.LiefNr,2l.LiefName,2COUNT(*)1AS Anzahl_Teile
FROM
Lieferanten2AS l2JOIN Liefert2AS lf ON l.LiefNr =2lf.LiefNr
GROUP1BY
l.LiefNr,2LiefName
HAVING1COUNT(*) <=22

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite233

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite234

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.51Systematische Konstruktion von1Join<Anfragen


!

S14:1Gib1aus,1welche1Teile1(TeileID,1Farbe)1mit1TeileName =1Klotz1xxx1von1
welchen1Lieferanten1(LiefNr)1geliefert1werden
Gewnschtes2Resultat:

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite235

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.51Systematische Konstruktion von1Join<Anfragen


!

S14:1Gib1aus,1welche1Teile1(TeileID,1Farbe)1mit1TeileName =1Klotz1xxx1von1
welchen1Lieferanten1(LiefNr)1geliefert1werden

Systematische2Konstruktion2des2Joins:

Relevante2Relationen:

1. SELECTQ +2WHEREQKlauselQAttribute2bestimmen2

TeileTypen(TeileID,2TeileName)

2. Potenziell2relevante2EntityQRelationen2bestimmen

Teile(TeileID,2Farbe,2...)

3. JoinQPfade2mit2JoinQAttributen2bestimmen

Lieferanten(LiefNr,2LiefName,2...)

4. Optional:2Abwahl2der2nicht2bentigten2 Entities

Liefert(LiefNr,2TeileID,2Farbe,2)

Zu21: TeileID,2Farbe,2TeileName,2LiefNr
Zu22: TeileTypen,2Teile,2Lieferanten
Zu23: TeileTypen

TeileID

Teile22(TeileID,Farbe)22Liefert22LiefNr Lieferanten

Zu24: Lieferanten2(da2LiefNr bereits2durch2die2LiefertQRelation2geliefert2wird)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite236

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.51Systematische Konstruktion von1Join<Anfragen


Teiletypen(TeileID,2TeileName)
Preisliste(TeileID,2 Farbe,2Preis)
Teile(TeileID,2 Farbe,2KalkKosten,2Bestand,2
MinBestand)
Liefert(LiefNr,2TeileID,2 Farbe,2Preis)
Lieferanten(LiefNr,2LiefName,2LiefStadt,2Bewertung)
AuftragsPos(AuftrNr,2Pos,2TeileID,2Farbe,2Anzahl)

Auftraege(AuftrNr,2KdNr,2AuftrDatum)
Kunden(KdNr,2KdName,2KdStadt,2Bonitaet)
Bestellungen(BestNr,2LiefNr,2BestDatum)
BestellPos(BestNr,2BestPos,2TeileID,2
Farbe,2Anzahl)
TeileID

Preis

ListenPreis

hat

TeileTyp

liefert

Preis

Teilename
Bewertung

Pos

AuftragsPos

ordert

Anzahl

LiefStadt

gehrt2zu

LiefNr

Teile

erhlt

Lieferant

LiefName
Farbe

BestDatum

Bestand
AuftrNr

Auftrag

Bestellung

KalkKosten

AuftrDatum

BestNr

MinBestand

erteilt
KdNr
KdStadt

bestellt
Kunde

besteht2aus

BestellPos

KdName
Bonitaet

Anzahl

BestPos

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite237

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.51Systematische Konstruktion von1Join<Anfragen


!

S14:1Gib1aus,1welche1Teile1(TeileID,1Farbe)1mit1TeileName =1Klotz1xxx1von1
welchen1Lieferanten1(LiefNr)1geliefert1werden
Zu21:
Zu22:
Zu23:
Zu24:

TeileID,2Farbe,2TeileName,2LiefNr
TeileTypen,2Teile,2Lieferanten
TeileTypen TeileID Teile22(TeileID,Farbe)22Liefert22LiefNr Lieferanten
Lieferanten2(da2LiefNr bereits2durch2die2LiefertQRelation2geliefert2wird)

Umsetzung:
SELECT
FROM
WHERE

ty.TeileID,2t.Farbe,2ty.TeileName,2lf.LiefNr
TeileTypen AS ty JOIN Teile2AS t2ON ty.TeileID =2t.TeileID
JOIN Liefert2AS lf ON (t.TeileID,2t.Farbe)2=2(lf.TeileID,2lf.Farbe)
ty.TeileName LIKE 'Klotz%'

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite238

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite239

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen: Inhalt
2.6.11Einfgen1von1Tupeln
2.6.21Lschen von1Tupeln
2.6.31ndern von1Tupeln

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite240

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen:1Einfgen von1Tupeln
!

Syntax
INSERT1INTO11Relationsname2[2(2Attributliste2)2]
VALUES (wert11,2wert12,2,2wert1n)2[,2(wert21,2wert22,2,2wert2n)22]
SFWQAusdruck

Anmerkungen
! Sollen2nur2einige2Attribute2des2einzufgenden2 Tupels2mit2Werten2gefllt2werden,2
so2knnen2diese2explizit2aufgezhlt2werden.2Die2nicht2spezifizierten2Attribute2
werden2mit2Nullwerten2oder2dem2Defaultwert (falls2im2Schema2hinterlegt)2gefllt.
! Es2knnen2daher2nur2solche2Attribute2ausgeblendet2 werden,2fr2die2Nullwerte2
erlaubt2sind2oder2Defaultwerte spezifiziert2wurden.
! Die2Einfgewerte knnen2als2Konstante2mittels2VALUESQKlausel2oder2ber2eine2
Query2bereitgestellt2werden.
! Anzahl2und2Typ2der2mittels2VALUEQKlausel2oder2Query2bereitgestellten2Werte2
mssen2mit2den2implizit2(keine2Attributliste2angegeben)2 oder2explizit2
spezifizierten2Attributen2harmonieren
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite241

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen
!

I01:1Der1Klotz1'K18'1kann1in1den1Farben111und121ab1sofort1auch1von1Lieferant1
5281bezogen1werden,1die1Preise1stehen1im1Moment1noch1nicht1fest
Variante 1:2(expliziter Nullwert)
INSERT1INTO Liefert
VALUES (528,2'K18',21,2NULL),2(528,2'K18',22,2NULL)2
Variante 2:2(impliziter Nullwert)
INSERT1INTO Liefert(LiefNr,2 TeileID,2Farbe)
VALUES (528,2'K18',21),2(528,2'K18',22)
Tipp:

Stets2Variante 22verwenden,2d.h.2mit INSERT2mit Aufzhlung der2zu


versorgenden Attribute

Grund:2

Wenn dieser Relation2mittels ALTER2TABLE2spter weitere Spalten


hinzugefgt werden,2steigt die2INSERTQAnweisung ohne explizite Aufzhlung
wegen fehlender Werte in2der2VALUESQKlausel mit Laufzeitfehler aus.

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite242

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen
!

I02:1Angenommen,1wir1fertigen1alle1unsere1farbigen1Artikel1ab1sofort1auch1in1
grner1Farbe1(Farbcode =13).1Alle1Lieferanten,1welche1Teile1in1blauer1Farbe1
liefern,1knnen1 auch1in1grner1Farbe1liefern.1Die1Preise1fr1die1grnen1Teile1
liegen1um110%1ber1denen1 der1blauen1Teile.1 Die1Liefert<Relation1ist1
entsprechend1 zu1ergnzen.
INSERT1INTO Liefert
SELECT LiefNr,2TeileID,23,2Preis2*21.1
FROM
Liefert
WHERE
Farbe2=22

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite243

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen:1Lschen von1Tupeln
!

Syntax
DELETE
FROM
Relationsname
[2WHERE Bedingung ]

Anmerkung
! Lscht2alle2Tupel,2welche2die2WHEREQBedingung2 erfllen,2aus2der2
angegebenen2 Relation
! Ist2keine2WHEREQBedingung2 angegeben,2 werden2alle Tupel2der2Relation2
gelscht
! Die2Relation2selbst2bleibt2jedoch2in2jedem2Fall2(ggf.2als2leere2Menge)2bestehen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite244

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen
!

D01:1Lsche1alle1Tupel1in1der1Relation1'Sonderpreise'
DELETE
FROM
Sonderpreise

D02:1Lsche1alle1Tupel1in1der1Relation1'Sonderpreise',1die1keine1Preisangabe
enthalten
DELETE
FROM
Sonderpreise
WHERE
Preis IS1NULL

D03:1Lsche1alle1Lieferanten1mit1Bewertung1=1<21aus1der1Liefert<Relation
DELETE
FROM
Liefert
WHERE
LiefNr IN1
(SELECT LiefNr
FROM
Lieferanten
WHERE
Bewertung2=2Q2 )

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite245

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen:1ndern von1Tupeln
!

Syntax
Form21:
UDPATE
SET
[2WHERE

Relationsname22[2Korrelationsvariable2]
Attr12=2Ausdruck12[,2Attr22=2Ausdruck2,22]
Bedingung2 ]

Form22:
UPDATE

Relationsname22[2Korrelationsvariable2]

SET

Attr
( Attr1,2Attr2,2,2Attrn )

[2WHERE
!

=22(2SFWQAusdruck2)

Bedingung2 2]

Anmerkung

Die2Wertnderung2wird2fr2alle2Tupel2durchgefhrt,2die2die2WHEREQBedingung2
erfllen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite246

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen
!

U01:1Erhhe1alle1Preise1in1der1Preisliste1um15%
UPDATE
SET

Preisliste
Preis2=2Preis2*21.05

U02:1Erhhe1die1kalkulatorischen1 Kosten1in1der1Teile<Tabelle1bei1allen1intern1
bezogenen1 Teilen1um110%
UPDATE
SET
WHERE

Teile
Preis2=2Preis2*21.1
(TeileID,2Farbe)1IN1
(SELECT TeileID,2Farbe
FROM
Liefert
WHERE
LiefNr =20)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite247

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.61DB<Manipulationsoperationen
!

U03:1Ergnze1in1der1Relation1'Sonderpreise'1 die1noch1fehlenden1Preise.1
Gewhre1fr1diese1Teile1einen1Rabatt1von115%1auf1die1Normalpreise
UPDATE
SET

WHERE

Sonderpreise AS1s
s.Preis = (SELECT
FROM
WHERE
)
s.Preis IS1NULL

Preis2*20.85
Preisliste2AS1p
(s.TeileID,1s.Farbe)1=1(p.TeileID,1p.Farbe)
Diese2Kurzform2wird2von2Derby2nicht2untersttzt

anstatt2dessen2daher:

WHERE s.TeileID =2p.TeileID AND s.Farbe =2p.Farbe

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite248

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite249

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen: Inhalt
2.7.11Erzeugen1und1Lschen1 von1Relationen
2.7.21Integrittsbedingungen1 I:1Festlegen1des1Primrschlssels
2.7.31Integrittsbedingungen1 II:1Festlegen1von1Fremdschlsseln
2.7.41Integrittsbedingungen1 III:1Festlegen1 von1Fremdschlssel<Bedingungen
2.7.51ndern1einer1Relation
2.7.61Definition1von1Sichten1(Views)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite250

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:1Erzeugen1und1Lschen1von1
Relationen
CREATE TABLE
Attribut1
Attribut2

Attributn

Relationsname2(
Datentyp1,
Datentyp2,

Minimalform

Datentypn)

Datentyp

Spezifikation

Erluterung

Integer

INTEGER

Real

FLOAT

Dezimal

DECIMAL(g[,k])

insgesamt2g Stellen,2davon2k:
Nachkommastellen

Zeichenkette

CHAR(Lnge)

feste2Lnge,2 max.22542Zeichen

Zeichenkette

VARCHAR(Lnge)

variable2Lnge,2max.24.0002Zeichen

Zeichenkette

LONG1VARCHAR

variable2Lnge,2max.232.9002Zeichen

Zeichenkette

CLOB

variable2Lnge,2max.222GB

Bytestrings

fr2Binrdaten2 (z.B.2Graphik)

Datum

DATE
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite251

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Beispiel
CREATE TABLE Preisliste2(
TeileID
VARCHAR(8),
Farbe222
INTEGER,
Preis222
DECIMAL(8,2)
)

Wirkung
! Es2wird2eine2Relation2'Preisliste'2angelegt2und2dem2DefaultQSchema2und2dem2
DefaultQTablespace (siehe2spter)2zugeordnet.
! Die2Relation2hat232Attribute:2TeileID,2Farbe,2Preis
! Fr2alle2drei2Attribute2sind2Nullwerte1zugelassen1 (dies2ist2der2Default)2
! Das2Zulassen2von2Nullwerten2htten2wir2auch2explizit2festlegen2knnen:

TeileID
VARCHAR(8)
NULL,
Farbe
INTEGER
NULL,
Preis
DECIMAL(8,2)
NULL )
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite252

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Lschen1 einer1Relation
DROP1TABLE1Relationsname

Wirkung
! Lscht2die2angegebene2 Relation2samt2Inhalt2
! Entfernt2die2Relation2mit2allen2Verweisen2und2zugehrigen2Hilfsdaten2(z.B.2
Indexen)2aus2dem2DBQKatalog

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite253

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:
Integrittsbedingungen1I:1Festlegen1des1Primrschlssels
CREATE1TABLE11Relationsname2(
Attribut1
Datentyp1 NOT1NULL1PRIMARY1KEY,
2)
alternativ:
CREATE1TABLE1Relationsname2(
Attribut1
Datentyp1 NOT1NULL,

2
,
PRIMARY1KEY1(Attribut1))
bzw.2bei2zusammengesetzten2Primrschlsseln:
CREATE1TABLE1Relationsname2(
Attribut1
Datentyp1 NOT1NULL,
Attribut2
Datentyp2 NOT1NULL,

,
PRIMARY1KEY1(Attribut1,2Attribut2))

Ergnzende2 Hinweise:
Alle2Constraints erhalten2beim
Anlegen2einen2Identifier.2Diesen
kann2der2Benutzer2auch2selbst
festlegen:
CONSTRAINT name

PRIMARY
FOREIGN

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite254

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Beispiele
CREATE1TABLE Lieferanten2(
LiefNr
INTEGER2NOT1NULL1PRIMARY1KEY,
LiefName
VARCHAR(30)2NOT1NULL,
LiefStadt
VARCHAR(30)2NOT1NULL,
Bewertung22
INTEGER
)
CREATE2TABLE2Teile2(
TeileID
Farbe
KalkKosten
Bestand22222
MinBestand
CONSTRAINT
)

VARCHAR(8)2NOT1NULL,
INTEGER2NOT1NULL,
DECIMAL(6,2),
INTEGER,
INTEGER,
teilePrimeKey PRIMARY KEY(TeileID,2Farbe)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite255

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:
Integrittsbedingungen1II:1Festlegen1von1Fremdschlsseln
CREATE1TABLE1Relationsname1 (

,
Attribx
22 [1NULL1|1NOT1NULL1]11
REFERENCES Relationsname2 [(Attrname)]2,
2
)
alternativ2(bzw.2bei2zusammengesetztem2Fremdschlssel2zwingend):
CREATE1TABLE1Relationsname1 (

,
Attribx
22 [1NULL1|1NOT1NULL1],
Attriby
222 [1NULL1|1NOT1NULL1],

FOREIGN1KEY1(Attribx,2Attriby)
REFERENCES Relationsname2 [(Attrib1,2Attrib2)]2
)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite256

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Beispiel
CREATE1TABLE1TeileTypen (
TeileID
VARCHAR(8)2
NOT1NULL1PRIMARY1KEY,
TeileName
VARCHAR(50)2 NOT1NULL1UNIQUE
)
CREATE1TABLE1Farbcodes2(
Farbcode
INTEGER2
NOT1NULL1PRIMARY1KEY,
FarbeText
VARCHAR(10)2 NOT1NULL1UNIQUE
)
CREATE1TABLE1Teile2(
TeileID
VARCHAR(8)2
NOT1NULL1REFERENCES1TeileTypen,
Farbe
INTEGER2
NOT1NULL1
REFERENCES Farbcodes(Farbcode),
Anmerkung:
KalkKosten
DECIMAL(6,2),
Wie2man2hier2sieht,2knnen2die2
Bestand
INTEGER,
Attribute2des2Primrschlssels2
MinBestand
INTEGER,
gleichzeitig2auch2
PRIMARY1KEY1(TeileID,2Farbe)
Fremdschlssel2sein.
)
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite257

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:1Integrittsbedingungen1III:1Festlegen1
von1Fremdschlssel<Bedingungen
CREATE2TABLE2Relationsname (

REFERENCES2 ON2DELETE

RESTRICT
CASCADE
SET1NULL

Erluterungen
! CASCADE2propagiert2die2Operation2(Lschen2von2Tupeln oder2Update2des2
Primrschlssels)2in2der2VaterQRelation2(!)2auf2die2hier2betrachtete2Relation,2
sofern2diese2Operation2hier2zulssig2ist.
! Die2LschQ bzw.2UpdateQOperation2 kann2sich2kaskadierend ber2mehrere2
Relationen2hinweg2auswirken,2wenn2zwischen2diesen2entsprechende2ReferenzQ
Bedingungen2 deklariert2wurden.
! Die2Operation2(incl.2Kaskadierung)2wird2entweder2komplett2oder2gar2nicht2
ausgefhrt.
! DELETE22SET2NULL2setzt2die2Fremdschlsselattribute2in2der2abhngigen2
Relation2auf2NULL,2sofern2fr2diese2Nullwerte2zugelassen2sind.
Anmerkung:2Es2gibt2jeweils2noch2die2Variante2NO2ACTION,2die2in2den2meisten2Fllen2
aber2wie2RESTRICT2wirkt.
!

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite258

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:1ndern einer Relation


ALTER2TABLE22Relationsname

Auszug

[2COLUMN ]2columnQdefinition
ADD

uniqueQconstraint
referentialQconstraint
checkQconstraint

ALTER1COLUMN columnQname22columnQalteration
PRIMARY KEY

DROP

FOREIGN KEY constraintQname


UNIQUE constraintQname
CHECK constraintQname
CONSTRAINT constraintQname
COLUMN columname

RESTRICT
CASCADE
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite259

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Beispiel
ALTER1TABLE1Lieferanten
ADD Plz DECIMAL(5)2
ADD Strasse VARCHAR(30)

Anmerkungen
! ADD1COLUMN
Neue2Spalten2werden2stets2hinten2angehngt.2
Sofern2die2Relation2bereits2Tupel2enthlt,2werden2die2neuen2Attribute2mit2
Nullwerten2gefllt.
NOT2NULLQKlausel2daher2nur2bei2leeren Relationen2 mglich.
! DROP1COLUMN
Per2Default2werden2alle2von2diesem2Attribut2abhngigen2 Indexe,2Views,2
Trigger2etc.2ebenfalls2gelscht2(CASCADE).2Bei2Angabe2der2RESTRICTQ
Klausel2wird2die2Anweisung2zurckgewiesen,2wenn2(noch)2eine2solche2
Abhngigkeit2existiert
! Ingesamt ein2sehr2mchtiges2Statement2mit2vielfltigen2nderungsoptionen
2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite260

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen

Auszug1aus1DB21V91Manual
DB22Version292for2Linux,2UNIX,2and2
Windows2SQL2Reference2Volume22

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite261

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen:1Definition1von1Sichten (Views)
Sichtenkonzept von1relationalen1DBMS1ein1sehr1wichtiges1Mittel1zur
Erhhung1der1Datenunabhngigkeit1 von1Anwendungsprogrammen!
! Zweck:22Realisierung2virtueller2(abgeleiteter)2Relationen
! Ausblenden2von2Attributen2(DatenschutzQ,2Vertraulichkeitsaspekte)
! (Versteckte)2Vorformulierung2von2Anfragen
! Verstecken2von2physischen2Details2vor2den2Anwendungsprogrammen,2 wie2z.B.2
Aufspaltung2in2Relation2in2zwei2Relationen
! Syntax
!

CREATE1VIEW1Viewname [2(2Attrib1,2Attrib2,2,2Attribn )2]


AS11Query22[2WITH1CHECK1OPTION1]
2und2Lschen:
DROP1VIEW1Viewname

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite262

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

V01:1Erzeuge1eine1virtuelle1Relation1TeileIDFarbe (TeileID,1Farbe,1Farbcode)
Hinweis:2Es2existiert2eine2Relation2Farbcodes(Farbcode,2FarbeText)
CREATE2VIEW2TeileIDFarbe AS
SELECT t.TeileID,2f.FarbeText AS2Farbe,2t.Farbe AS2FarbCode
FROM
Teile2AS2t2JOIN22Farbcodes2AS2f2ON2t.Farbe =2f.FarbCode

V02:1Erzeuge1eine1virtuelle1Relation1BestellWerte(Bestellung,1Lieferant,1
BestellPos), mit1Bestellung1=1BestNr,1Lieferant1=1LiefNr und1BestellPos =1
Anzahl1jeweiligen1Bestellpositionen
Anstelle2der2Attributumbenennung2 mittels2AS:
CREATE1VIEW1BestellungenPositionen (Bestellung,2Lieferant,2BestellPos)2AS
SELECT b.BestNr,2b.LiefNr,2COUNT(*)
FROM
Bestellungen2AS b2
JOIN BestellPos AS p2ON2b.BestNr =2p.BestNr
GROUP1BY b.BestNr,2b.LiefNr

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite263

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.71DB<Schema<Operationen
!

Ergnzende1Erluterungen1zu1Views
! Views2sind2ein2mchtiges2Konzept,2um2den2Anwendungsentwicklern2
mageschneiderte2(virtuelle)2Relationen2fr2ihre2Implementierungsarbeit2
anbieten2zu2knnen
! Sie2knnen2helfen,2die2redundante2 Speicherung2von2Daten2zu2vermeiden,2indem2
man2mehrere2logische2Relationen2auf2technischer2Ebene2zu2einer Relation2
zusammenfassen2und2logischen2Relationen2mittels2geeigneter2Views2realisiert2
(siehe2nchstes2Kapitel)
! Viele2DBMS2untersttzen2darber2hinaus2sogar2updateable views
(Derby1leider1nicht)
! Bei2einfachen2Sichten1 sind2dann2sogar2INSERTQ,2UPDATEQ,2DELETEQ
Operationen2 ber2diese2View2mglich
2und2mittels2INSTEADQOFQTRIGGERN2 kann2man2diese2Limitation2z.T.2
aufheben

keine2komplexen2Joins,2UNION,2GROUP2BY,2..)2und2geeigneter2Definition2 der2BasisQRelation
(DEFAULTQWerte2im2Kontext2von2NOT2NULL)2
1

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite264

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite265

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.81Indexe
!

Syntax
Anlegen:
CREATE1[1UNIQUE1]1INDEX Indexname2ON
Relationsname2(2Attr1 [,2Attr2,2]2)
Lschen:
DROP1INDEX1Indexname

Beispiele
CREATE1UNIQUE1INDEX TeileTyp_Index ON Teiletypen2(TeileID)
CREATE1UNIQUE1INDEX Teile_Index ON Teile(TeileID,2Farbe)
CREATE1INDEX LiefStadt_Index ON Lieferanten(LiefStadt)

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite266

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

Inhalt
2.12 Vorbemerkung
2.2 Datenunabhngigkeit von2Anwendungsprogrammen
2.32 BeispielQTabellen,2ERQModell2und2LegoTrailerQTeilebersicht
2.4 DBQAnfragen
2.5 Systematische Konstruktion von2JoinQAnfragen
2.6 DBQManipulationsoperationen
2.7 DBQSchemaQOperationen
2.8 Indexe
2.9 Abschlieende Bemerkungen

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015

Seite267

Informationssysteme2|2Kapitel 2:2SQL2I:2Kompakte2Wiederholung2ausgewhlter2Aspekte

2.91Abschlieende Bemerkungen
!
!
!
!
!

(SQLQ)Datenbanken2 sind2aus2dem2heutigen2Wirtschaftsleben2nicht2mehr2weg2zu2
denken
Diese2Rekapitulation2von2SQL2beschrnkte2sich2auf2diejenigen2Aspekte,2die2im2
Rahmen2dieser2Vorlesung2sowie2der2bungen2 dazu2direkt2bentigt2werden
Diese2Stoffauswahl2stellt2in2gewisser2Weise2gleichzeitig2auch2das2absolute2Minimum2
an2SQLQWissen2dar,2was2man2als2Informatiker/in2drauf2haben2 sollte
Fr2einen2wirklich2professionellen2Einsatz2reicht2das2aber2nicht2aus!!
In2Kapitel232werden2wir2auf2weiterfhrende2Konzepte2eingehen,2 die2in2der2PvSQ
Vorlesung2nur2gestreift2bzw.2nicht2behandelt2wurden,2die2aber2fr2die2Realisierung2von2
Informationssystemen2ebenfalls2von2hoher2Bedeutung2 sind

2M.2Reichert,2P.2Dadam |2Universitt Ulm2|2SS22015