| Inner a outer |
|---|
| Pouze řádky, kde podmínka ON odpovídá v obou tabulkách. Nespárované řádky na kterékoliv straně se zahazují. | SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; |
| Všechny řádky levé tabulky. Pravé sloupce jsou NULL tam, kde neexistuje shoda. | SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id; |
| Všechny řádky pravé tabulky. Levé sloupce jsou NULL tam, kde neexistuje shoda. | SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id; |
| Všechny řádky obou tabulek. Nespárované strany se doplní hodnotou NULL. | SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id; |
| Cross a self |
|---|
| Kartézský součin. Každý levý řádek se spáruje s každým pravým. Bez klauzule ON. | SELECT u.name, o.total FROM users u CROSS JOIN orders o; |
| Tabulka spojená sama se sebou přes aliasy. Porovnává řádky v rámci jedné tabulky. | 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; |
| Pokročilé |
|---|
| Poddotaz ve FROM vyhodnocený pro každý vnější řádek. Poddotaz se může odkazovat na sloupce vnější tabulky. | SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o; |
| Spojuje podle sloupců se shodným názvem. Bez klauzule ON. Pozor na nechtěné kolize klíčů. | SELECT u.name, o.total FROM users u NATURAL JOIN orders o; |