SQL JOIN-típusok összehasonlítva: inner, outer, cross, self, lateral, natural — mit ad vissza mindegyik, egy-egy soros példával.
Az illesztések két tábla sorait kapcsolják össze egy közös kulcs alapján. Az illesztés típusa dönti el, mely sorok maradnak meg, amikor a kulcsok egyeznek, hiányoznak vagy ismétlődnek.
Referenciatáblázat · 8 bejegyzés
SQL illesztésekExplained
8 of 8 rows
Belső és külső
Csak azok a sorok, ahol az ON feltétel mindkét táblában illeszkedik. A nem illeszkedő sorok mindkét oldalon kiesnek.
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
A bal oldali tábla összes sora. A jobb oldali oszlopok ott NULL értékűek, ahol nincs egyezés.
SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
A jobb oldali tábla összes sora. A bal oldali oszlopok ott NULL értékűek, ahol nincs egyezés.
SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Mindkét tábla összes sora. A nem illeszkedő oldalak NULL értékkel egészülnek ki.
SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Kereszt- és önillesztés
Descartes-szorzat. Minden bal oldali sor minden jobb oldali sorral párosodik. Nincs ON záradék.
SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Egy tábla illesztve önmagához aliasok segítségével. Egy táblán belüli sorokat hasonlít össze.
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;
Speciális
A FROM-ban szereplő allelekérdezés, külső soronként kiértékelve. Az allelekérdezés hivatkozhat a külső tábla oszlopaira.
SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Azonos nevű oszlopokon illeszt. Nincs ON záradék. Vigyázz a nem szándékos kulcsütközésekre.
SELECT u.name, o.total FROM users u NATURAL JOIN orders o;