Skip to content

SQL-joins forklart

SQL-JOIN-typene sammenlignet: inner, outer, cross, self, lateral, natural — hva hver av dem returnerer, med et eksempel på én linje.

Joins kombinerer rader fra to tabeller over en felles nøkkel. Join-typen avgjør hvilke rader som overlever når nøkler treffer, mangler eller gjentas.

Referansetabell · 8 oppføringer
8 of 8 rows
Indre og ytre
Kun rader der ON-betingelsen matcher i begge tabellene. Rader uten match på noen av sidene blir forkastet.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Alle radene fra venstre tabell. Høyre kolonner er NULL der det ikke finnes noen match.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Alle radene fra høyre tabell. Venstre kolonner er NULL der det ikke finnes noen match.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Alle radene fra begge tabellene. Sider uten match fylles med NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Kryss og selv
Kartesisk produkt. Hver venstre rad kombineres med hver høyre rad. Ingen ON-klausul.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
En tabell forenet med seg selv via aliaser. Sammenligner rader innenfor én tabell.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;
Avansert
En subspørring i FROM, evaluert per ytre rad. Subspørringen kan referere til den ytre tabellens kolonner.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Forener på kolonner som deler navn. Ingen ON-klausul. Se opp for utilsiktede nøkkelkollisjoner.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;