Datenauswahl mit Joins

Werbung
Einführung in die Wirtschaftsinformatik
WS 2008/2009
SQL - Abfragen und Joins
Agenda
Alternative Ausdrücke
Daten aus mehreren Tabellen
SQL - Abfragen und Joins
Datenauswahl mit Joins
Einführung in die Wirtschaftsinformatik
Universität Potsdam
Lehrstuhl für Wirtschaftsinformatik
und Electronic Government
Univ.-Prof. Dr.-Ing. Norbert Gronau
August-Bebel-Str. 89
14482 Potsdam
Tel. (0331) 977-3379
Fax (0331) 977-3406
http://wi.uni-potsdam.de
Teil 13
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
SQL - Abfragen und Joins
Alternative Ausdrücke
Bedingte Ausdrücke
Bereitstellen von IF-THEN-ELSE-Logik innerhalb der SQL-Anweisung
Verwendung von zwei Methoden
CASE-Ausdrücke
Funktion DECODE
CASE ausdruck WHEN comp_ausdruck1 THEN return_ausdruck1
[WHEN comp_ausdruck2 THEN return_ausdruck2
WHEN comp_ausdruckn THEN return_ausdruckn
ELSE else_ausdruck]
END
Alternative Ausdrücke
DECODE(col|ausdruck, such1, ergebnis1
[, such2, ergebnis2,...,]
[, default])
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
1-4
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Alternative Ausdrücke
Alternative Ausdrücke
Anwendung von CASE-Ausdrücken
Anwendung der Funktion DECODE
Bedingte Abfragen in der Form von IF-THEN-ELSE-Anweisung
Wirkung der Anweisung ähnlich der IF-THEN-ELSE-Anweisung
SELECT name, position, gehalt,
CASE position WHEN 'Konstrukteur' THEN gehalt*1.10
WHEN 'Monteur' THEN gehalt*1.15
WHEN 'Meister' THEN gehalt*1.05
ELSE gehalt END Gehaltserhöhung
FROM mitarbeiter
ORDER BY position;
NAME
.....
Klein
Plenk
.....
Krause
Tänzer
Schulz-Niemeyer
Fritzsche
.....
POSITION
.....
Konstrukteur
Konstrukteur
.....
Meister
Meister
Monteur
Monteur
.....
GEHALT
.....
5400
5200
.....
4500
4400
3800
3750
.....
SELECT name, position, gehalt,
DECODE(position, 'Konstrukteur', gehalt*1.10,
'Monteur', gehalt*1.15,
'Meister', gehalt*1.20, gehalt)
Gehaltserhöhung
FROM mitarbeiter
ORDER BY position;
GEHALTSERHÖHUNG
.....
5940
5720
.....
4725
4620
4370
4312,5
.....
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
NAME
.....
Klein
Plenk
.....
Krause
Tänzer
Schulz-Niemeyer
Fritzsche
.....
POSITION
.....
Konstrukteur
Konstrukteur
.....
Meister
Meister
Monteur
Monteur
.....
GEHALT
.....
5400
5200
.....
4500
4400
3800
3750
.....
GEHALTSERHÖHUNG
.....
5940
5720
.....
4725
4620
4370
4312,5
.....
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 176
Alternative Ausdrücke
Greenberg 2002, S. 178
SQL - Abfragen und Joins
Abfragereihen mit der Funktion DECODE
Anzeige des Steuersatzes für jeden Angestellten der Abteilung 30
SELECT
0,
1,
2,
3,
4,
5,
name, gehalt, DECODE (TRUNC(gehalt/1000, 0),
0.00,
0.20,
0.25,
0.30,
0.35,
0.40,
0.45) Steuersatz
FROM mitarbeiter
WHERE abt_nr = 30;
NAME
Hunger
Dost
Hein
Petersen
Heine
POSITION
Abteilungsleiterin
Einkäufer
Einkäufer
Einkäufer
Sekretärin
Daten aus mehreren Tabellen
GEHALT
STEUERSATZ
6200
6
4600
4
4600
4
4400
4
3200
3
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 179
5-8
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Daten aus mehreren Tabellen
Daten aus mehreren Tabellen
Fähigkeiten der Anweisung SELECT
Projektion
Daten abfragen - Verbinden von Tabellen
Direkte Verknüpfung mehrerer Tabellen
Auswahl
Verknüpfung erfolgt in Ausgabeliste durch kartesisches Produkt
(Kreuzprodukt)
Grundprinzip
Verknüpfung jeder Zeile einer Tabelle mit jeder Zeile der anderen Tabelle(n)
Beispiel auf den folgenden Seiten - kartesisches Produkt aus Tabellen
mitarbeiter x abteilung --> 50 Zeilen x 9 Zeilen --> 450 Zeilen
--> 12 Spalten x 3 Spalten --> 15 Spalten
Join - Verbinden von Tabellen
Ergebnistabelle
--> Ergebnis unsinnig
--> logischer Zusammenhang nur zwischen einzelnen Datenfeldern
Das formale Vorgehen beim Kreuzprodukt entspricht dem beim
Vektorprodukt in der Mathematik.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Daten aus mehreren Tabellen
Daten aus mehreren Tabellen
Kartesische Produkte
Kreuzprodukt aus mehreren Tabellen - Struktur
mitarbeiter
Bildung eines kartesischen Produktes, wenn...
... alle Zeilen aus der ersten Tabelle mit allen Zeilen aus
der zweiten Tabelle verknüpft werden
... eine Join-Bedingung fehlt
... eine Join-Bedingung ungültig ist
PERS_NR
NAME
VORNAME
ANREDE
LEITER
POSITION
GEBURTSTAG
EINSTELLUNG
GEHALT
ABT_NR
PROJ_NR
PROVISION
Vermeidung kartesischer Produkte
WHERE-Klausel enthält gültige Join-Bedingung
Voraussetzung - Beziehung über Fremd- und
Primärschlüssel bzw. Felder mit identischen Datentypen
X
abteilung
ABT_NR
ABT_NAME
BETR_TEIL
=
Ergebnis der Abfrage
PERS_NR
NAME
VORNAME
ANREDE
LEITER
POSITION
GEBURTSTAG
EINSTELLUNG
GEHALT
ABT_NR
PROJ_NR
PROVISION
ABT_NR
ABT_NAME
BETR_TEIL
Bei einem Kreuzprodukt werden alle Spalten der betreffenden
Tabellen miteinander "gekreuzt".
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
9-12
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Daten aus mehreren Tabellen
Daten aus mehreren Tabellen
Kreuzprodukt aus mehreren Tabellen - Inhalt
PERS_NR NAME
101004Kettler
101004Kettler
101004Kettler
101004Kettler
101004Kettler
450
101004Kettler
101004Kettler
Zei101004Kettler
len
101004Kettler
101012Michalke
101036Eckert
VORNAME
Gunter
Gunter
Gunter
Gunter
Gunter
Gunter
Gunter
Gunter
Gunter
Max
Hans
Kreuzprodukt - Problemstellung Namensgleichheit
ABT_NR PROJ_NR PROVISION ABT_NR
ABT_NAME
BETR_TEIL
90
130
10Geschäftsleitung B
90
130
20Vertrieb
W
90
130
30Einkauf
B
90
130
40Fertigung
P
90
130
50Konstruktion
P
90
130
60Produktion
P
90
130
70Personal
B
90
130
80Buchhaltung
B
90
130
90Datenverarbeitung W
20
140
10Geschäftsleitung B
3100
40
SELECT pers_nr, name, abt_nr, abt_name
FROM mitarbeiter, abteilung;
Spalte "abt_nr" - keine Zuordnung möglich (willkürliche Zuordnung durch Oracle verhindert)
B
SELECT pers_nr, name, m.abt_nr, abt_name
FROM mitarbeiter m, abteilung a;
Zuordnung der Spalte "abt_nr"
erfolgt aus Tabelle "mitarbeiter"
C
SELECT pers_nr, name, a.abt_nr, abt_name
FROM mitarbeiter m, abteilung a;
Zuordnung der Spalte "abt_nr"
erfolgt aus Tabelle "abteilung"
Angabe des Tabellennamens bei Spalten mit
demselben Namen
90Datenverarbeitung W
Die umrahmten Felder beinhalten Ergebnisse des
Kreuzproduktes ohne logischen Zusammenhang
A
Problemstellung: Ausgabe der Ergebnistabelle
--> Unterschied zwischen Beispiel
12 Spalten
A ,
Ein kartesisches Produkt mehrerer Tabellen erzeugt (in der Regel)
keine sinnvolle Ergebnistabelle.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
B
und
C
Ergebnistabellen (Ausgabe) für
Beispiel B und C sind gleich
?
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
SQL - Abfragen und Joins
Datenauswahl mit Joins
Arten von Joins
Datenauswahl mit Joins
Oracle-spezifische Joins
SQL: 1999-kompatible Joins
Equi-Join
Non-Equi-Join
Outer-Join
Self-Join
Cross-Joins
Natural-Joins
USING-Klausel
Vollständige (zweiseitige)
Outer-Joins
Beliebige Join-Bedingungen für
Outer-Joins
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
13-16
Greenberg 2002, S. 194
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
Datenauswahl mit Joins
Verknüpfung von Tabellen - Grundlagen, Syntax
Voraussetzungen für Verknüpfung von Tabellen
Daten aus mehreren Tabellen abfragen mit Join
Join-Bedingung in der WHERE-Klausel
Tabellenname steht vor Spaltennamen durch Punkt getrennt
Tabelle 1 -> Fremdschlüssel = Primärschlüssel <- Tabelle 2
Notwendig - Identische Eigenschaften (Datentyp) der Spalten
Sinnvoll - Identische Spaltennamen
Syntax: tabellenname.spaltenname
Kann - unterschiedliche Spaltennamen in den Tabellen
Muss - dieselben Spaltennamen in verschiedenen Tabellen
SELECT tabelle1.spalte, tabelle2.spalte
FROM tabelle1, tabelle2
WHERE tabelle1.spalte1 = tabelle2.spalte2;
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
abteilung
mitarbeiter
ABT_NR
ABT_NAME
BETR_TEIL
PERS_NR
NAME
VORNAME
ANREDE
LEITER
POSITION
GEBURTSTAG
EINSTELLUNG
GEHALT
ABT_NR
PROJ_NR
PROVISION
projekt
PROJ_NR
PROJ_NAME
PROJ_LEITER
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 195
Datenauswahl mit Joins
Datenauswahl mit Joins
Equi-Joins (einfache Joins, Inner-Joins, Inner-Equi-Joins)
Tabelle "mitarbeiter"
PERS_NR
ABT_NR
101004
90
101012
20
101020
40
101021
50
101006
80
101018
30
101032
70
101026
40
101001
10
.....
.....
Fremdschlüssel
Aufruf von Datensätzen über Equi-Joins
SELECT ma.pers_nr, ma.name, ma.abt_nr, abt.abt_nr,
abt.abt_name
FROM mitarbeiter ma, abteilung abt
WHERE ma.abt_nr = abt.abt_nr;
Tabelle "abteilung"
ABT_NR
10
20
30
40
50
60
70
80
90
ABT_NAME
Geschäftsleitung
Vertrieb
Einkauf
Fertigung
Konstruktion
Produktion
Personal
Buchhaltung
Datenverarbeitung
Primärschlüssel
PERS_NR
101004
101012
101020
101021
101006
101018
101032
101026
101001
Beispiele für die
Übereinstimung
NAME
Kettler
Michalke
Köhler
Genz
Grauer
Hunger
Schmiedel
Schulze
Schulze
ABT_NR
90
20
40
50
80
30
70
40
10
ABT_NR
90
20
40
50
80
30
70
40
10
ABT_NAME
Datenverarbeitung
Vertrieb
Fertigung
Konstruktion
Buchhaltung
Einkauf
Personal
Fertigung
Geschäftsleitung
Die WHERE-Klausel verknüpft die Tabellen sinnvoll.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Elmasri 2002, S. 251
17-20
Greenberg 2002, S. 197
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
Datenauswahl mit Joins
Übersicht: Mehrdeutige Spaltennamen
Vereinfachung von Abfragen - Aliasnamen
Zuordnung zu Tabellen
Eindeutige Kennzeichnung von Spaltennamen bei
mitarbeiter.name
Vorkommen in mehreren Tabellen --> Einsatz von
abteilung.name
Präfixen
.
Kürzen
Kürzen langer und zusammengesetzter Tabellennamen
Beispiele
FROM artikelstammdaten artikel
FROM abteilung a, mitarbeiter m
Zeitliche Anforderungen von Anfragen
Performance-Verbesserung durch Angabe von Präfixen
Verlängern
.
Eindeutigkeit der Zuordnung
Unterscheidung der Spalten mit identischem Namen in
Name AS
unterschiedlichen Tabellen über Spalten-Aliasnamen
mfg
Mitarbeitername
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Lesbarmachen kryptischer oder missverständlicher
Tabellenkürzel
Beispiel
FROM abt abteilung, ma mitarbeiter
FROM btl betriebsteil
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Datenauswahl mit Joins
Datenauswahl mit Joins
Erweiterung der Suchkriterien
Verknüpfung - mehrere Tabellen
Einschränkungen von Datensätzen in der Abfrage
Verwendung des Operators AND
Zusätzliche Suchkriterien in WHERE-Klausel
Verknüpfung von n Tabellen - mindestens n-1 Join-Bedingungen
mitarbeiter
SELECT ma.pers_nr, ma.name, ma.abt_nr, ma.position,
abt.abt_name
FROM mitarbeiter ma, abteilung abt
WHERE ma.abt_nr = abt.abt_nr
AND position = 'Sekretärin';
PERS_NR
101003
101047
101022
101038
NAME
Metz
Fuchs
Heine
Groß
ABT_NR
10
90
30
40
POSITION
Sekretärin
Sekretärin
Sekretärin
Sekretärin
PERS_NR ABT_NR
Schulze
10
Lange
10
Metz
10
Kettler
90
Beyerke
80
Grauer
80
Engel
80
Büchner
60
Köhler
40
Genz
50
…..
…..
ABT_NAME
Geschäftsleitung
Datenverarbeitung
Einkauf
Fertigung
abteilung
ABT_NR
10
20
30
40
50
60
70
80
90
BETR_TEIL
B
W
B
P
P
P
B
B
W
...
WHERE m.abt_nr = a.abt_nr
AND a.betr_teil = b.betr_teil;
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
21-24
betriebsteil
BETR_TEIL
B
P
W
PLZ
10247
14473
15745
BETR_ORT
Berlin
Potsdam
Wildau
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
Datenauswahl mit Joins
Non-Equi-Joins
Aufruf eines Non-Equi-Joins
SELECT m.name, m.gehalt, g.gratif
FROM mitarbeiter m, gratifikation g
WHERE m.gehalt
BETWEEN g.mingehalt AND g.gehalt;
Join-Bedingung, die nicht den Gleich-Operator verwendet
Beispiel: Ungleichheitszeichen (<> oder !=)
gratifikation
mitarbeiter
NAME
Schulze
Lange
Metz
Kettler
Beyerke
Grauer
Engel
Adler
Göbel
…..
GEHALT
4500
7600
4000
6500
4800
6600
5000
4500
4800
…..
MINGEHALT MAXGEHALT
0
2500
2501
3500
3501
5000
5001
7500
7501
19999
GRATIF
NAME
Schulze
Lange
Metz
Kettler
Beyerke
Grauer
Engel
Adler
Göbel
…..
65
55
45
35
25
Vergleich der einzelnen Gehälter in Tabelle
"mitarbeiter" mit dem niedrigsten Gehalt und
dem höchsten Gehalt der einzelnen Prozentsätze
der Tabelle "gratifikation"
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
GEHALT
4500
7600
4000
6500
4800
6600
5000
4500
4800
…..
GRATIF
45
25
45
35
45
35
45
45
45
…..
Die Verwendung der Tabellen-Aliasnamen erfolgt oft aus
Performance-Gründen.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 202
Datenauswahl mit Joins
Datenauswahl mit Joins
Outer-Joins
Outer-Joins - Syntax
RIGHT: Aufruf aller Zeilen der rechten Tabelle nach ON
Anzeige der in direkter Beziehung stehenden Datensätze und
Anzeige von Datensätzen, ohne direkten Bezug zu Datensätzen
anderer Tabellen
mitarbeiter
abteilung
ABT_NR
10
20
30
.....
80
90
25
55
SELECT tabelle1.spalte, tabelle2.spalte, ...
FROM tabelle1
RIGHT OUTER JOIN tabelle2
ON tabelle1.spalte = tabelle2.spalte;
ABT_NAME
Geschäftsleitung
Vertrieb
Einkauf
.....
Buchhaltung
Datenverarbeitung
Marketing
Forschung
Abteilungen 25 und 55 noch
ohne Mitarbeiter
PERS_NR
101001
101002
101003
101012
101013
101014
101015
101044
…..
101011
101046
101047
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
NAME
Schulze
Lange
Metz
Michalke
Probst
Gast
Engel
Koch
…..
Kern
Adam
Fuchs
ABT_NR
10
10
10
20
20
20
20
…..
90
90
90
LEFT: Aufruf aller Zeilen der linken Tabelle nach ON
SELECT tabelle1.spalte, tabelle2.spalte, ...
FROM tabelle1,
LEFT OUTER JOIN tabelle2
ON tabelle1.spalte = tabelle2.spalte;
noch keiner
Abteilung
zugeordnet
Mit einem Right- bzw. Left-Outer-Join wird eine sogenannte
rechte bzw. linke Inklusionsverknüpfung erstellt.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 204
25-28
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
Datenauswahl mit Joins
Aufruf eines Outer-Joins
Übersicht: Inner- und Outer-Joins
Inner-Join (Equi-Join)
Verknüpfung zwischen zwei Tabellen - Rückgabe nur
von übereinstimmenden Zeilen
SELECT m.name, m.abt_nr, a.abt_name
FROM mitarbeiter m
RIGHT OUTER JOIN abteilung a
ON m.abt_id = a.abt_id;
NAME
Schulze
Lange
Metz
Kettler
ABT_NR
10
10
10
90
ABT_NAME
Geschäftsleitung
Geschäftsleitung
Geschäftsleitung
Datenverarbeitung
80
80
80
90
Buchhaltung
Buchhaltung
Buchhaltung
Datenverarbeitung
Beyerke
Grauer
Engel
Adler
…..
…..
Left-Outer-Join (Right-Outer-Join)
Verknüpfung zwischen zwei Tabellen - Rückgabe des
Ergebnisses des Inner-Joins sowie Zeilen ohne Übereinstimmungen in der linken (bzw. rechten) Tabelle
Vollständiger Outer-Join
Verknüpfung zwischen zwei Tabellen - Rückgabe des
Ergebnisses eines Inner-Joins sowie eines
Left-Outer-Joins und Right-Outer-Joins
…..
Marketing
Forschung
keine Daten in
Tabelle "mitarbeiter"
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Kemper 2000, S. 90 f.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Datenauswahl mit Joins
Datenauswahl mit Joins
Full-Outer-Join
Self-Joins
Tabelle wird mit sich selbst verbunden
Zusätzliche Bezeichner/Alias-Namen in der FROM-Klausel zur
Unterscheidung
Kombination von Left-Outer-Join und Right-Outer-Join
Anzeige aller in den verknüpften Basistabellen vorhandenen Zeilen
SELECT m.name, m.abt_nr, a.abt_name
FROM mitarbeiter m
FULL OUTER JOIN abteilung a
ON m.abt_nr = a.abt_nr;
NAME
Schulze
Lange
.....
Schulz-Niemeyer
Schmidt
.....
Fritzsche
Junge
Altermann
ABT_NR
.....
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
PERS_NR
101001
101002
101003
101004
101005
101006
101007
101008
…..
ABT_NAME
10 Geschäftsleitung
10 Geschäftsleitung
.....
40 Fertigung
.....
40
40
50
25
55
mitarbeiter (leiter)
mitarbeiter (angestellte)
.....
Fertigung
Fertigung
Konstruktion
Marketing
Forschung
NAME
Schulze
Lange
Metz
Kettler
Beyerke
Grauer
Engel
Adler
…..
LEITER
1002
1002
1002
1006
1002
1006
1004
…..
PERS_NR
101001
101002
101003
101004
101005
101006
101007
101008
…..
NAME
Schulze
Lange
Metz
Kettler
Beyerke
Grauer
Engel
Adler
…..
Ein Self-Join ermöglicht die Herstellung von Verbindungen innerhalb einer Tabelle mit einer einzigen Abfrage.
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Elmasri 2002, S.258
29-32
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
Datenauswahl mit Joins
Syntax für Self-Joins
Kreuzprodukt aus zwei Tabellen
SELECT tab1.spalte, ..., tab2.spalte
FROM tabelle1 tab1, tabelle1 tab2
WHERE tab1.spalte1 = tab2.spalte1;
Entspricht kartesischem Produkt
Verbinden mehrerer Tabellen ohne Verknüpfungskriterium
Liefert meist sinnlose Ergebnisse
Wer ist der/die Vorgesetzte von Mitarbeiter x?
SELECT angestellte.name || ' ist Untergebene/r von '
|| leiter.name
FROM mitarbeiter angestellte, mitarbeiter leiter
WHERE angestellte.pers_nr = leiter.pers_nr
AND angestellte.name = 'Beyerke';
Vorteil für Test von Datenbanken - Einfaches Erzeugen großer
Datenmengen
SELECT spalte1, spalte2, ...
FROM tabelle1
CROSS JOIN tabelle2;
ANGESTELLTE.NAME ist Untergebene/r von LEITER.NAME
Beyerke ist Untergebene/r von Grauer
entspricht der Syntax
SELECT spalte1, spalte2, ...
FROM tabelle1, tabelle2;
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Datenauswahl mit Joins
Datenauswahl mit Joins
Natural-Join
Datensatzaufruf über Natural-Joins
NATURAL JOIN-Klausel - basiert auf allen Spalten mit demselben
Namen in beiden Tabellen
SELECT abt_nr, abt_name, betr_teil, plz, betr_ort
FROM abteilung
NATURAL JOIN betriebsteil;
Auswahl der Zeilen mit übereinstimmenden Werten in allen gemeinsamen
Spalten
Rückgabe einer Fehlermeldung bei Namensgleichheit aber unterschiedlichen
Datentypen der Spalten
ABT_NR
10
20
30
40
50
60
70
80
90
25
55
Verknüpfung über NATURAL JOIN - automatisches Einbinden aller
Spalten mit gleichen Namen und gleichem Datentyp
Einsatz eines Präfix vor verknüpften Spaltennamen nicht zulässig Fehlermeldung
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
ABT_NAME
Geschäftsleitung
Vertrieb
Einkauf
Fertigung
Konstruktion
Produktion
Personal
Buchhaltung
Datenverarbeitung
Marketing
Forschung
BETR_TEIL
B
W
B
P
P
P
B
B
W
W
P
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
Greenberg 2002, S. 212
33-36
PLZ
10247
15745
10247
14473
14473
14473
10247
10247
15745
15745
14473
BERTR_ORT
Berlin
Wildau
Berlin
Potsdam
Potsdam
Potsdam
Berlin
Berlin
Wildau
Wildau
Potsdam
Greenberg 2002, S. 213
Einführung in die Wirtschaftsinformatik
WS 2008/2009
Datenauswahl mit Joins
SQL - Abfragen und Joins
Selektion, Projektion und Join - Fazit
Kontrollfragen
Zusammenfassung
SELECT mitarbeiter.name, abteilung.name
Wann werden CASE-Ausdrücke in SQL-Anweisungen verwendet?
Nach der Normalisierung sind ursprüngliche Tabellen oftmals in
mehrere neue Tabellen aufgeteilt. Mit welcher Funktion können die
Daten daraus wieder miteinander verbunden werden?
Unter welchen Bedingungen wird ein kartesisches Produkt erzeugt?
Was bewirkt die Verwendung eines LEFT OUTER JOIN in einer
Anweisung?
Projektion
FROM mitarbeiter, abteilung
Join*
WHERE mitarbeiter.abt_nr = abteilung.abt_nr
AND abteilung.abt_nr = XXX **
Selektion
* Verbund (Kreuz-, Kartesisches Produkt)
** Konkreter Wert
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
SQL - Abfragen und Joins
Literatur
Kemper, A./Eickler, A.: Datenbanksysteme; 6. Auflage, 2006,
Oldenbourg Verlag
Elmazri, R./Navathe, S. B.: Grundlagen von Datenbanksystemen; 3.
Auflage, 2002, Addison-Wesley
Greenberg, N./Nathan, P: Professioneller Einstieg in Oracle9i SQL Band 1; 2002, Oracle
© Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam
37-40
Herunterladen