SQL-dotazy-JOIN-vysvetleni-a-graficke-znazorneni

SQL: dotazy JOIN – vysvětlení a grafické znázornění

Tabulky

Tabulka names:

id name
1 Larry Page
2 Sergey Brin
3 Elon Musk
4 Bill Gates
6 Michael Dell
7 Mark Zuckerberg
8 Jerry Yang

Tabulka companies:

company_id company
1 Google
3 SpaceX
4 Microsoft
5 Apple
7 Facebook

INNER JOIN vs OUTER JOIN

Princip dotazů INNER JOIN (vnitřní) a OUTER JOIN (vnější) je stejný. Liší se v tom, co se stane, když položka, na kterou se vazba odkazuje, neexistuje.

INNER JOIN (průnik množin)

Nejjednodušší typ spojení tabulek.
Vrací záznamy z levé tabulky které mají odpovídající
záznam v pravé tabulce.

SELECT *
FROM names
INNER JOIN companies ON names.id = companies.company_id

Výsledkem je průnik množin.

V = names ∩ companies

Vrácené záznamy:

id name company_id company
1 Larry Page 1 Google
3 Elon Musk 3 SpaceX
4 Bill Gates 4 Microsoft
7 Mark Zuckerberg 7 Facebook

Příklad použití:

Potřebujeme vypsat ta jména (z jedné tabulky)
která obsahují informaci o názvu společnosti (v druhé tabulce). Jména bez společnosti jsou vynechána.


LEFT JOIN

Nejpoužívanější typ spojení tabulek.
Vrací všechny záznamy z levé tabulky. K nim připojí odpovídající
záznamy z pravé tabulky.

SELECT *
FROM names
LEFT JOIN companies ON names.id = companies.company_id

Vrácené záznamy:

id name company_id company
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

Příklad použití:

Potřebujeme
vypsat všechna jména (z jedné tabulky) a k nim přiřadit informaci o názvu společnosti, pokud je dostupná (v druhé tabulce).

RIGHT JOIN

Opak spojení LEFT JOIN.
Vrací všechny záznamy z pravé tabulky a připojí k nim odpovídající
záznamy z levé tabulky, pokud existují.

SELECT *
FROM names
RIGHT JOIN companies ON names.id = companies.company_id

Vrácené záznamy:

id name company_id company
1 Larry Page 1 Google
3 Elon Musk 3 SpaceX
4 Bill Gates 4 Microsoft
null null 5 Apple
7 Mark Zuckerberg 7 Facebook

OUTER JOIN (sjednocení množin)

Nazýváno též FULL OUTER JOINFULL JOIN.
Vrací všechny záznamy z obou tabulek. Záznamy které odpovídají spojí.

SELECT *
FROM names
FULL OUTER JOIN companies ON names.id = companies.company_id

MySQL není FULL OUTER JOIN přímo k dispozici, ale můžeme jej simulovat pomocí UNION:

SELECT *
FROM names
  LEFT OUTER JOIN companies ON names.id = companies.company_id
UNION
SELECT *
FROM names
  RIGHT OUTER JOIN companies ON names.id = companies.company_id

Výsledkem je sjednocení množin.

V = names ∪ companies

Vrácené záznamy:

id name company_id company
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

Další typy spojení tabulek

Left Excluding JOIN (rozdíl množin)

Vrací ty záznamy z levé tabulky které nemají odpovídající záznam v pravé tabulce.

SELECT *
FROM names
 LEFT JOIN companies ON names.id = companies.company_id
WHERE companies.company_id IS NULL

Výsledkem je rozdíl množin.

C = names - companies

Vrácené záznamy:

id name company_id company
2 Sergey Brin null null
6 Michael Dell null null
8 Jerry Yang null null

Right Excluding JOIN (rozdíl množin)

Opak Left Excluding JOIN.
Vrací záznamy z pravé tabulky které nemají odpovídající záznam v levé tabulce.

SELECT *
FROM names
 RIGHT JOIN companies ON names.id = companies.company_id
WHERE names.id IS NULL

Výsledkem je rozdíl množin.

C = companies - names

Vrácené záznamy:

id name company_id company
null null 5 Apple

Outer Excluding JOIN

Není v MySQL.
Vrací záznamy z levé tabulky které nemají odpovídající záznam v pravé tabulce a
zároveň záznamy z pravé tabulky které nemají odpovídající
záznam v levé tabulce.

SELECT *
FROM names
FULL OUTER JOIN companies ON names.id = companies.company_id
WHERE names.id IS NULL OR companies.company_id IS NULL

Výsledkem je symetrický rozdíl (tzv. symetrická diference).

V = names ÷ companies

Vrácené záznamy:

id name company_id company
 2  Sergey Brin  null  null
 6  Michael Dell  null  null
 8  Jerry Yang  null  null
 null  null  5  Apple

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *