
Tři a více tabulek
Pokud potřebujeme získat data z více jak dvou tabulek, syntaxe zůstává stejná, pomocí výrazu JOIN připojíme další tabulku. Mějme tabulku RTG vyšetření, na kterých může být zjištěna u daného pacienta 0 až n zlomenin. Tabulka zlomenin je vázána s tabulkou rtg pomocí klíče vysetreni_id.
CREATE TABLE rtg
(
vysetreni_id NUMERIC(9),
patient_id VARCHAR(10),
)
CREATE TABLE zlomeniny
(
zlomenina_id NUMERIC(9),
vysetreni_id NUMERIC(9),
lokalizace VARCHAR(50)
)
Naplníme tabulky daty, pacient pat1 měl 2 vyšetření, jedno negativní, druhé ukázalo 2 zlomené kosti. Pacient pat2 měl jedno vyšetření bez nálezu.
INSERT INTO rtg (patient_id, vysetreni_id) VALUES ('pat1', 1);
INSERT INTO rtg (patient_id, vysetreni_id) VALUES ('pat1', 2);
INSERT INTO rtg (patient_id, vysetreni_id) VALUES ('pat2', 3);
INSERT INTO zlomeniny (zlomenina_id, vysetreni_id, lokalizace) VALUES (1, 2, 'femur');
INSERT INTO zlomeniny (zlomenina_id, vysetreni_id, lokalizace) VALUES (2, 2, 'ulna');
Vnitrřní spojení bychom provedli takto:
SELECT * FROM patients p LEFT JOIN rtg ON p.patient_id = rtg.patient_id LEFT JOIN zlomeniny z ON rtg.vysetreni_id = z.vysetreni_id
Výsledkem jsou pouhé 2 řádky, které obsahují popis dvou zlomeni pacienta pat1.
Pokud chceme získat přehled o všech pacientech, jejich RTG vyšetřeních a případně zjištěných zlomeninách musíme obě spojení definovat jako vnější:
SELECT * FROM patients p LEFT JOIN rtg ON p.patient_id = rtg.patient_id LEFT JOIN zlomeniny z ON rtg.vysetreni_id = z.vysetreni_id
V tomto případě je výsledkem 8 řádků, popis zlomenin je ovšem jen u dvou z nich, v ostatních řádcích ve sloupci popis je hodnota NULL.
Vnitřní spojení více tabulek můžeme provést i bez klauzule JOIN:
SELECT * FROM patients p, rtg, zlomeniny z WHERE p.patient_id = rtg.patient_id AND rtg.vysetreni_id = z.vysetreni_id
Obdobně postupujeme i při spojování většího množství tabulek. Maximálně možný počet spojovaných tabulek závisí na databázovém systému.