Skip to content

SQL-joins förklarade

SQL-JOIN-typerna jämförda: inner, outer, cross, self, lateral, natural — vad varje typ returnerar, med ett exempel på en rad.

Joins kombinerar rader från två tabeller på en gemensam nyckel. Join-typen avgör vilka rader som överlever när nycklar matchar, saknas eller upprepas.

Referenstabell · 8 poster
8 of 8 rows
Inner och outer
Endast rader där ON-villkoret matchar i båda tabellerna. Rader utan match på någon av sidorna kastas bort.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Alla rader från den vänstra tabellen. Höger kolumner är NULL där ingen match finns.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Alla rader från den högra tabellen. Vänster kolumner är NULL där ingen match finns.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Alla rader från båda tabellerna. Sidor utan match fylls ut med NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cross och self
Kartesisk produkt. Varje vänsterrad paras med varje högerrad. Ingen ON-klausul.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
En tabell joind med sig själv via alias. Jämför rader inom en och samma 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;
Avancerat
En subfråga i FROM som evalueras per yttre rad. Subfrågan kan referera till den yttre tabellens kolumner.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Joins på kolumner som delar namn. Ingen ON-klausul. Se upp för oavsiktliga nyckelkollisioner.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;