Database Reference
In-Depth Information
Die grundlegende Variante eines Joins ist der sog.
innere Join
. In der ein-
fachsten Form legen Sie zwei Spalten (eine aus jeder Tabelle), die miteinander
verglichen werden sollen, über das Schlüsselwort
ON
fest.
SELECT
cities.
*
, country
_
name
FROM
cities
INNER JOIN
countries
ON
cities.country
_
code = countries.country
_
code;
country
_
code | name | postal
_
code | country
_
name
--------------+----------+-------------+---------------
us
| Portland | 97205
| United States
Der Join liefert eine einzelne Tabelle zurück, die alle Spaltenwerte der
cities
-
Tabelle zusammen mit dem passenden
country
_
name
-Wert aus der
countries
-
Tabelle enthält.
Wir können Joins auch auf Tabellen wie
cities
anwenden, die einen zusam-
mengesetzten Primärschlüssel nutzen. Um einen zusammengesetzten Join
zu testen, wollen wir eine neue Tabelle mit einer Liste von Veranstaltungsor-
ten aufbauen.
Ein Veranstaltungsort existiert sowohl unter einer bestimmten Postleitzahl
(
postal_code
) als auch in einem bestimmten Land (
country
). Der
Fremdschlüs-
sel
muss aus zwei Spalten bestehen, der beide
cities
-
primary key
-Spalten
berücksichtigt. (
MATCH FULL
ist ein Constraint, der sicherstellt, dass beide
Werte existieren oder beide
NULL
sind.)
CREATE TABLE
venues (
venue
_
id SERIAL
PRIMARY KEY
,
name
varchar
(255),
street
_
address
text
,
type
char
(7) CHECK ( type in (
'public'
,
'private'
))
DEFAULT
'public'
,
postal
_
code
varchar
(9),
country
_
code
char
(2),
FOREIGN
KEY
(country
_
code, postal
_
code)
REFERENCES cities (country
_
code, postal
_
code) MATCH FULL
);
Die
venue
_
id
-Spalte ist ein typischer Primärschlüssel: automatisch inkre-
mentierte Integerwerte (1, 2, 3, 4 und so weiter...). Wir erzeugen diesen
Identifier mit dem Schlüsselwort
SERIAL
(MySQL kennt ein vergleichbares
Konstrukt namens
AUTO
_
INCREMENT
).
INSERT INTO
venues (name, postal
_
code, country
_
code)
VALUES
(
'Crystal Ballroom'
,
'97205'
,
'us'
);
Obwohl wir keinen
venue
_
id
-Wert angegeben haben, wird er beim Anlegen
der Zeile automatisch erzeugt.