Tento článok popisuje a vysvetľuje jednoduchým spôsobom SQL JOIN a tiež najefektívnejší spôsob, ako ktorý SQL JOIN použiť. Veci majú asi niekedy väčší zmysel ak sa prezentujú polopate, ako nejakým krkolomným popisom v ktorom by zablúdil aj Bludný Holanďan. Je to teda popis siedmich rôznych spôsobov ako vrátiť údaje z dvoch tabuliek v databáze.
Výmena iPhone X za iPhone 15 Pro · Vysávanie hrou...žiadna špina nemá šancu
Reč bude konkrétne o týchto siedmych JOIN-och:
1. INNER JOIN
2. LEFT JOIN
3. RIGHT JOIN
4. OUTER JOIN (nenachádza sa v MySQL)
5. LEFT JOIN EXCLUDING INNER JOIN
6. RIGHT JOIN EXCLUDING INNER JOIN
7. OUTER JOIN EXCLUDING INNER JOIN (nenachádza sa v MySQL)
Na začiatok si vytvoríme tabuľku "mena" a tabuľku "spolocnosti" a do nich vložíme nasledujúce záznamy, ktoré sa nachádzajú nižšie pre reálne vyskúšanie si príkladov v článku.
tabuľka "mena"
id | meno | 1 | Larry Page | 2 | Sergey Brin | 3 | Elon Musk | 4 | Bill Gates | 6 | Michael Dell | 7 | Mark Zuckerberg | 8 | Jerry Yang |
| tabuľka "spolocnosti"
id | spolocnost | 1 | Google | 3 | SpaceX | 4 | Microsoft | 5 | Apple | 7 | Facebook |
|
INNER JOIN vs OUTER JOIN
Princíp dotazov INNER JOIN (vnútorný) a OUTER JOIN (vonkajší) je rovnaký. Líšia sa len v tom, že čo sa stane ak položka na ktorú se odkazuje neexistuje.
1. INNER JOIN (prienik množín)
Jedná sa o najjednoduchší typ spojenia tabuliek. INNER JOIN vracia záznamy z ľavej tabuľky, ktorá má odpovedajúci záznam v pravej tabuľke.
SELECT * FROM mena INNER JOIN spolocnosti ON mena.id = spolocnosti.idVýsledkom je prienik tabuliek "mena" a "spolocnosti".Vrátené záznamy:
id | meno | id | spolocnost |
1 | Larry Page | 1 | Google |
3 | Elon Musk | 3 | SpaceX |
4 | Bill Gates | 4 | Microsoft |
7 | Mark Zuckerberg | 7 | Facebook |
INNER JOIN použijeme ak potrebujeme vypísať mena z jednej tabuľky (mena), ktoré obsahujú informácie o názve spoločností v druhej tabuľke (spolocnosti). Mena bez spoločností sú vynechané.
2. LEFT JOIN
Najviac používaný typ spájania tabuliek, kedy sa vrátia všetky záznamy z ľavej tabuľky (mena) a k ním sa pripoja odpovedajúce záznamy z pravej tabuľky (spolocnosti).
SELECT * FROM mena LEFT JOIN spolocnosti ON mena.id = spolocnosti.idVrátené záznamy:
id | meno | id | spolocnost |
1 | Larry Page | 1 | Google |
2 | Sergey Brin | null | null |
3 | Elon Musk | 3 | SpaceX |
4 | Bill Gates | 4 | Microsoft |
6 | Michael Dell | null | null |
7 | Mark Zuckerberg | 7 | Facebook |
8 | Jerry Yang | null | null |
LEFT JOIN použijeme ak potrebujeme vypísať všetky mena z jednej tabuľky (mena) a k nim priradiť informácie o názve spoločností, pokiaľ je dostupná v druhej tabuľke (spolocnosti).
3. RIGHT JOIN
Jedná sa o opak LEFT JOIN a vráti všetky záznamy z pravej tabuľky (spolocnosti) a pripojí k ním odpovedajúce záznamy z ľavej tabuľky (mena), pokiaľ samozrejme existujú.
SELECT * FROM mena RIGHT JOIN spolocnosti ON mena.id = spolocnosti.idVrátené záznamy:
id | meno | id | spolocnost |
1 | Larry Page | 1 | Google |
3 | Elon Musk | 3 | SpaceX |
4 | Bill Gates | 4 | Microsoft |
null | null | 5 | Apple |
7 | Mark Zuckerberg | 7 | Facebook |
4. OUTER JOIN (zjednotenie množín)
Nazýva sa aj ako FULL OUTER JOIN či FULL JOIN a vráti všetky záznamy z oboch tabuliek, ktoré odpovedajú spojeniu.
SELECT * FROM mena FULL OUTER JOIN spolocnosti ON mena.id = spolocnosti.idV MySQL nie je FULL OUTER JOIN priamo k dispozícií, ale môžeme ho simulovať pomocou UNION:
SELECT * FROM mena LEFT OUTER JOIN spolocnosti ON mena.id = spolocnosti.id
UNION
SELECT * FROM mena RIGHT OUTER JOIN spolocnosti ON mena.id = spolocnosti.idVrátené záznamy:
id | meno | id | spolocnost |
1 | Larry Page | 1 | Google |
3 | Elon Musk | 3 | SpaceX |
4 | Bill Gates | 4 | Microsoft |
7 | Mark Zuckerberg | 7 | Facebook |
2 | Sergey Brin | null | null |
6 | Michael Dell | null | null |
8 | Jerry Yang | null | null |
null | null | 5 | Apple |
5. LEFT JOIN EXCLUDING INNER JOIN (rozdiel množín)
Vráti záznamy z ľavej tabuľky (mena), ktoré nemajú odpovedajúci záznam v pravej tabuľke (spolocnosti).
SELECT * FROM mena LEFT JOIN spolocnosti ON mena.id = spolocnosti.id WHERE spolocnosti.id IS NULLVýsledkom je rozdiel množín.Vrátené záznamy:
id | meno | id | spolocnost |
2 | Sergey Brin | null | null |
6 | Michael Dell | null | null |
8 | Jerry Yang | null | null |
6. RIGHT JOIN EXCLUDING INNER JOIN
Jedná sa o opak LEFT JOIN EXCLUDING INNER JOIN a vráti záznamy z pravej tabuľky (spolocnosti), ktoré nemajú odpovedajúci záznam v ľavej tabuľke (mena).
SELECT * FROM mena RIGHT JOIN spolocnosti ON mena.id = spolocnosti.id WHERE mena.id IS NULLVýsledkom je rozdiel množín.Vrátené záznamy:
id | meno | id | spolocnost |
null | null | 5 | Apple |
7. OUTER JOIN EXCLUDING INNER JOIN
Nenachádza sa v MySQL, ale vráti záznamy z ľavej tabuľky (mena), ktoré nemajú odpovedajúci záznam v pravej tabuľke (spolocnosti) a zároveň záznamy z pravej tabuľky (spolocnosti), ktoré nemajú odpovedajúci záznam v ľavej tabuľke (mena).
SELECT * FROM mena FULL OUTER JOIN spolocnosti ON mena.id = spolocnosti.id WHERE mena.id IS NULL OR spolocnosti.id IS NULLVýsledkom je symetrický rozdiel množín.Vrátené záznamy:
id | meno | id | spolocnost |
2 | Sergey Brin | null | null |
6 | Michael Dell | null | null |
8 | Jerry Yang | null | null |
null | meno | 5 | Apple |
Článok bol zobrazený 5045 krát a obsahuje 606 slov
Pridané 1. marca 2020