2.3.7 Join-Operationen in SQL-92

Werbung
Syntax einer Join-Operation:
join-op :=
CROSS JOIN |
[NATURAL] {LEFT | RIGHT | FULL} [OUTER] JOIN |
[NATURAL] [INNER] JOIN |
UNION JOIN
SS 2001
 AIFB
SQL-92 bietet Operatoren zur direkten Darstellung von Joins an.
Es können sowohl mit SELECT hergeleitete Tabellen in der Form:
(SELECT … FROM … WHERE …)
join-op
(SELECT … FROM … WHERE …) [join-spec];
als auch Basis-Tabellen in der Form:
SELECT …
FROM table join-op table [join-spec]
WHERE …
miteinander verbunden werden.
(1/9)
SQL - Structured Query Language
2.3.7 Join-Operationen in SQL-92
1
2.3.7 Join-Operationen in SQL-92
(2/9)
Kartesisches Produkt:
table1 CROSS JOIN table2
Wenn nicht alle Attribute mit gleichem Namen in die Join-Bedingung
eingehen sollen, kann dies mit
join-spec := USING (column-list)
auf die angegebenen Attribute eingeschränkt werden.
 AIFB
Natural Join:
Die Verwendung des Schlüsselworts NATURAL führt zur Berechnung des
Natural Join.
SQL - Structured Query Language
SELECT * FROM table1, table2
SS 2001
berechnet das Kartesische Produkt und entspricht
2
2.3.7 Join-Operationen in SQL-92
(3/9)
Theta-Join:
Outer-Join:
Sämtliche Variationen des Outer-Join (FULL, LEFT, RIGHT) können
formuliert werden.
Dabei kann entweder ein
– Natural-Join (NATURAL, opt. USING-Klausel) oder ein
– Theta-Join (ON-Klausel)
durchgeführt werden.
Das Schlüsselwort OUTER ist optional, sollte aber aus Gründen der
Leserlichkeit benutzt werden.
 AIFB
angegeben wird (predicate entspricht der Klausel, die nach WHERE in
einer SELECT-Anfrage angegeben werden kann)
SQL - Structured Query Language
join-spec := ON predicate
SS 2001
Ein Theta-Join wird mit INNER JOIN (oder nur JOIN) durchgeführt,
wobei die Join-Bedingung mit
3
2.3.7 Join-Operationen in SQL-92
(4/9)
Union-Join:
Der Union-Join kann mit Hilfe des Schlüsselworts
Die Join-Operationen in SQL-92 können zwar auch mit früheren SQLVersionen formuliert werden, allerdings z.T. nur sehr umständlich.
Die neuen Schlüsselworte dienen der verbesserten Lesbarkeit;
insbesondere die WHERE-Klausel wird dadurch von Join-Bedingungen
entlastet.
 AIFB
Bemerkung:
SQL - Structured Query Language
durchgeführt werden.
SS 2001
UNION JOIN
4
2.3.7 Join-Operationen in SQL-92
(5/9)
Beispiel 2-3 (Umformulierung der Bsp. 22-26)
In SQL-92:
SELECT P-NR, NAME
FROM angestellte NATURAL JOIN ang-pro;
 AIFB
SQL - Structured Query Language
SELECT P-NR, a.ANG-NR, NAME, WOHNORT, ABT-NR,
PROZ-ARBZEIT
FROM angestellte a, ang-pro ap
WHERE a.ANG-NR=ap.ANG-NR;
SS 2001
27. (Beispiel 22, S.41, „Natural Join“)
„Alle Projekt mit den Informationen der zugehörigen Angestellten.“
5
2.3.7 Join-Operationen in SQL-92
(6/9)
Beispiel 2-3 (Umformulierung der Bsp. 22-26)
oder
SELECT P-NR, NAME
FROM angestellte INNER JOIN ang-pro
ON (angestellte.ANG-NR=ang-pro.ANG-NR AND
PROZ-ARBZEIT=50);
 AIFB
In SQL-92:
SELECT P-NR, NAME
FROM angestellte NATURAL JOIN ang-pro
WHERE PROZ-ARBZEIT = 50;
SQL - Structured Query Language
SELECT P-NR, NAME
FROM angestellte a, ang-pro ap
WHERE a.ANG-NR=ap.ANG-NR AND PROZ-ARBZEIT=50;
SS 2001
28. (Beispiel 23, S.41, Join mit Auswahlbedingung)
„Alle Projekt-Nummern mit den Namen derjenigen Angestellten, die zu
50% mitarbeiten.“
6
2.3.7 Join-Operationen in SQL-92
(7/9)
In SQL-92:
SELECT P-NR, NAME
FROM angestellte JOIN projekt
ON (ANG-NR <> P-LEITER);
 AIFB
SELECT P-NR, NAME
FROM angestellte, projekt
WHERE ANG-NR <> P-LEITER;
SQL - Structured Query Language
29. (Beispiel 24, S.42, allgemein -Join)
„Gib für jedes Projekt die Projektnummer und die Namen aller
Angestellten an, die dort nicht Projektleiter sind.“ (Angestellter muß
nicht an Projekt mitarbeiten)
SS 2001
Beispiel 2-3 (Umformulierung der Bsp. 22-26)
7
2.3.7 Join-Operationen in SQL-92
(8/9)
In SQL-92:
SELECT NAME, P-FILIALE
FROM angestellte NATURAL JOIN ang-pro
NATURAL JOIN projekt;
 AIFB
SELECT NAME, P-FILIALE
FROM angestellte a, ang-pro ap, projekt p
WHERE a.ANG-NR=ap.ANG-NR AND ap.P-NR=p.P-NR;
SQL - Structured Query Language
30. (Beispiel 25, S.42, Join mit 3 Relationen)
„Gib für jeden Angestellten seinen Namen, sowie die Projekt-Filialen
der Projekte an, an denen er mitarbeitet.“
SS 2001
Beispiel 2-3 (Umformulierung der Bsp. 22-26)
8
2.3.7 Join-Operationen in SQL-92
(9/9)
In SQL-92
SELECT a.NAME, b.NAME
FROM (angestellte a) NATURAL JOIN
(angestellte b) USING (WOHNORT)
WHERE a.NAME < b.NAME;
 AIFB
SELECT a.NAME A-NAME, b.NAME B-BNAME
FROM angestellte a, angestellte b
WHERE a.WOHNORT=b.WOHNORT AND a.NAME<b.NAME;
SQL - Structured Query Language
31. (Beispiel 26, S.43, Join mit derselben Relation)
„Suche Paare von (unterschiedlichen) Angestellten, die in der selben
Stadt wohnen.“ (Das Ergebnis sollte keine redundanten Angaben
enthalten)
SS 2001
Beispiel 2-3 (Umformulierung der Bsp. 22-26)
9
Herunterladen