Ján Fečík


osobná stránka · blog

Dátum: nedeľa, 24. novembra 2024
Čas: 08:41:37, 1732434097, @362
Meniny má: Emília, Milín
IP adresa: 3.133.152.26

Vysvetlenie a vizuálne zobrazenie SQL JOIN

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"

idmeno
1Larry Page
2Sergey Brin
3Elon Musk
4Bill Gates
6Michael Dell
7Mark Zuckerberg
8Jerry Yang
tabuľka "spolocnosti"

idspolocnost
1Google
3SpaceX
4Microsoft
5Apple
7Facebook

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.id

Výsledkom je prienik tabuliek "mena" a "spolocnosti".
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
1Larry Page1Google
3Elon Musk3SpaceX
4Bill Gates4Microsoft
7Mark Zuckerberg7Facebook

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.id
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
1Larry Page1Google
2Sergey Brinnullnull
3Elon Musk3SpaceX
4Bill Gates4Microsoft
6Michael Dellnullnull
7Mark Zuckerberg7Facebook
8Jerry Yangnullnull

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.id
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
1Larry Page1Google
3Elon Musk3SpaceX
4Bill Gates4Microsoft
nullnull5Apple
7Mark Zuckerberg7Facebook

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.id

V 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.id
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
1Larry Page1Google
3Elon Musk3SpaceX
4Bill Gates4Microsoft
7Mark Zuckerberg7Facebook
2Sergey Brinnullnull
6Michael Dellnullnull
8Jerry Yangnullnull
nullnull5Apple

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 NULL

Výsledkom je rozdiel množín.
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
2Sergey Brinnullnull
6Michael Dellnullnull
8Jerry Yangnullnull

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 NULL

Výsledkom je rozdiel množín.
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
nullnull5Apple

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 NULL

Výsledkom je symetrický rozdiel množín.
Vysvetlenie a vizuálne zobrazenie SQL JOINVrátené záznamy:

idmenoidspolocnost
2Sergey Brinnullnull
6Michael Dellnullnull
8Jerry Yangnullnull
nullmeno5Apple


Článok bol zobrazený 5045 krát a obsahuje 606 slov
Pridané 1. marca 2020