| Indre og ydre |
|---|
| Kun rækker, hvor ON-betingelsen matcher i begge tabeller. Rækker uden match på en af siderne droppes. | SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; |
| Alle rækker fra den venstre tabel. Højre kolonner er NULL, hvor intet match findes. | SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id; |
| Alle rækker fra den højre tabel. Venstre kolonner er NULL, hvor intet match findes. | SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id; |
| Alle rækker fra begge tabeller. Sider uden match udfyldes med NULL. | SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id; |
| Kryds og selv |
|---|
| Kartesisk produkt. Hver venstre række parres med hver højre række. Ingen ON-klausul. | SELECT u.name, o.total FROM users u CROSS JOIN orders o; |
| En tabel joined med sig selv via aliaser. Sammenligner rækker inden for é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; |
| Avanceret |
|---|
| En subquery i FROM evalueret pr. ydre række. Subqueryen kan referere til den ydre tabels kolonner. | SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o; |
| Joiner på kolonner med samme navn. Ingen ON-klausul. Pas på uønskede nøglekollisioner. | SELECT u.name, o.total FROM users u NATURAL JOIN orders o; |