| 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; |