Skip to content

SQL-joins uitgelegd

SQL-JOIN-typen vergeleken: inner, outer, cross, self, lateral, natural — wat elk type teruggeeft, met een voorbeeld van één regel.

Joins combineren rijen uit twee tabellen op een gedeelde sleutel. Het join-type bepaalt welke rijen overblijven als sleutels matchen, ontbreken of herhalen.

Referentietabel · 8 items
8 of 8 rows
Inner en outer
Alleen rijen waar de ON-voorwaarde in beide tabellen matcht. Rijen zonder match aan een van beide kanten vallen weg.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Alle rijen uit de linker tabel. Rechter kolommen zijn NULL waar geen match bestaat.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Alle rijen uit de rechter tabel. Linker kolommen zijn NULL waar geen match bestaat.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Alle rijen uit beide tabellen. Zijden zonder match worden opgevuld met NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cross en self
Cartesisch product. Elke linker rij wordt gekoppeld aan elke rechter rij. Geen ON-clausule.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Een tabel gejoind met zichzelf via aliassen. Vergelijkt rijen binnen één tabel.SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Geavanceerd
Een subquery in FROM, geëvalueerd per buitenrij. De subquery kan verwijzen naar kolommen van de buitenste tabel.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Joint op kolommen die een naam delen. Geen ON-clausule. Pas op voor onbedoelde sleutelbotsingen.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;