Natural Join
- Aussprachehinweis
- natural ˈnætʃ ɚ əl
Das folgende Skript legt zwei Tabellen an, die beide eine Spalte namens »LAND« enthalten.
- Konsole (MySQL )
DROP SCHEMA S; CREATE SCHEMA S; USE S;
CREATE TABLE STADT
( STADT VARCHAR ( 255 ), BEZEICHNUNG VARCHAR ( 255 ), LAND VARCHAR ( 255 ));INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '1', 'Paris', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '2', 'Marseille', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '3', 'Lyon', '1' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '4', 'Rom', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '5', 'Mailand', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '6', 'Neapel', '2' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '7', 'Tokio', '3' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '8', 'Yokohama', '3' );
INSERT INTO STADT ( STADT, BEZEICHNUNG, LAND ) VALUES ( '9', 'Osaka', '3' );CREATE TABLE LAND ( LAND VARCHAR ( 255 ), LANDESNAME VARCHAR ( 255 ));
INSERT INTO LAND ( LAND, LANDESNAME ) VALUES ( '1', 'Frankreich' );
INSERT INTO LAND ( LAND, LANDESNAME ) VALUES ( '2', 'Italien' );
INSERT INTO LAND ( LAND, LANDESNAME ) VALUES ( '3', 'Japan' );
Wir hatten bereits eine Verbindung solcher Tabellen mit Hilfe einer USING-Klausel erzeugt.
- Konsole (MySQL )
SELECT * FROM STADT INNER JOIN LAND USING( LAND );
+------+-------+-------------+------------+
| LAND | STADT | BEZEICHNUNG | LANDESNAME |
+------+-------+-------------+------------+
| 1 | 1 | Paris | Frankreich |
| 1 | 2 | Marseille | Frankreich |
| 1 | 3 | Lyon | Frankreich |
| 2 | 4 | Rom | Italien |
| 2 | 5 | Mailand | Italien |
| 2 | 6 | Neapel | Italien |
| 3 | 7 | Tokio | Japan |
| 3 | 8 | Yokohama | Japan |
| 3 | 9 | Osaka | Japan |
+------+-------+-------------+------------+
Bei einer natürlichen Verbindung zweier Tabellen, werden die Zeilen angezeigt, bei denen alle gleichnamigen Spalten gleiche Werte enthalten.
- Konsole (MySQL )
SELECT * FROM STADT NATURAL JOIN LAND;
+------+-------+-------------+------------+
| LAND | STADT | BEZEICHNUNG | LANDESNAME |
+------+-------+-------------+------------+
| 1 | 1 | Paris | Frankreich |
| 1 | 2 | Marseille | Frankreich |
| 1 | 3 | Lyon | Frankreich |
| 2 | 4 | Rom | Italien |
| 2 | 5 | Mailand | Italien |
| 2 | 6 | Neapel | Italien |
| 3 | 7 | Tokio | Japan |
| 3 | 8 | Yokohama | Japan |
| 3 | 9 | Osaka | Japan |
+------+-------+-------------+------------+
Die natürliche Verbindung ist eine sehr elegante Formulierung, die auch schon 1970 in dem Artikel von Codd vorkommt, in dem das Konzept der relationalen Datenbanken vorgestellt wurde.
Es besteht aber das Risiko, daß zwei Tabellen versehentlich Spalten mit gleichen Namen haben könnten, und daß dann eine unerwünschte Gleichheitsbedingung verwendet wird.