JOINy v SQL Serveru: Typy s příklady
⚡ Chytré shrnutí
Funkce JOIN v SQL Serveru kombinuje řádky ze dvou nebo více tabulek na základě souvisejícího sloupce pomocí operací INNER, LEFT OUTER, RIGHT OUTER a FULL OUTER, které řídí, které shodné a neshodné řádky se zobrazí ve výsledku.
Co jsou spojení (Joins) v SQL Serveru?
Data lze načíst z více než jedné tabulky pomocí příkazu JOIN v SQL ServerJOIN kombinuje řádky ze dvou nebo více tabulek na základě souvisejícího sloupce mezi nimi, nejčastěji primární klíč sladěno s cizí klíčV SQL Serveru existují hlavně čtyři typy operací JOIN:
- VNITŘNÍ SPOJENÍ / jednoduché spojení
- LEVÝ VNĚJŠÍ SPOJENÍ / LEVÉ SPOJENÍ
- PRAVÉ VNĚJŠÍ SPOJENÍ / PRAVÉ SPOJENÍ
- ÚPLNÉ VNĚJŠÍ PŘIPOJENÍ
Níže uvedená tabulka shrnuje, které řádky vrací každý typ JOIN:
| Typ JOIN | Vrácené řádky |
| INNER JOIN | Pouze řádky, kde se shoduje podmínka spojení v obou tabulkách. |
| LEVÁ VNĚJŠÍ SPOJENÍ | Všechny řádky z levé tabulky plus odpovídající řádky z pravé tabulky (hodnoty NULL, pokud se žádné neshodují). |
| PRAVÝ VNĚJŠÍ SPOJ | Všechny řádky z pravé tabulky plus odpovídající řádky z levé tabulky (hodnoty NULL, pokud se žádné neshodují). |
| ÚPLNÉ VNĚJŠÍ PŘIPOJENÍ | Všechny řádky z obou tabulek, s hodnotami NULL všude, kde není splněna podmínka. |
Níže uvedené příklady používají dva Tabulky, Studenti a Poplatek, spojeni ve společném sloupci pro přijetí. Každá sekce vysvětluje jeden typ JOIN s jeho syntaxí, zpracovaným dotazem a výsledkem.
INNER JOIN
Tento typ SQL Server Funkce JOIN vrací řádky ze všech tabulek, ve kterých je podmínka spojení pravdivá. Syntaxe funkce je následující:
SELECT columns FROM table_1 INNER JOIN table_2 ON table_1.column = table_2.column;
K demonstraci použijeme následující dvě tabulky. V tabulce Studenti níže jsou uvedeni všichni studenti a jejich čísla přijetí:
Níže uvedená tabulka poplatků uvádí částku, kterou každé vstupné číslo zaplatilo:
Následující příkaz demonstruje INNER JOIN v SQL Serveru na příkladu:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students INNER JOIN Fee ON Students.admission = Fee.admission
Příkaz vrátí následující výsledek, který zobrazuje pouze čísla přijetí přítomná v obou tabulkách:
Můžeme zjistit, kteří studenti zaplatili školné. Použili jsme sloupec se společnými hodnotami v obou tabulkách, což je sloupec pro přijetí.
LEVÁ VNĚJŠÍ SPOJENÍ
Tento typ spojení vrátí všechny řádky z levé tabulky plus záznamy v pravé tabulce se shodnými hodnotami. Například:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students LEFT OUTER JOIN Fee ON Students.admission = Fee.admission
Kód vrací následující výsledek, keeping každý student, i když se neshoduje žádný záznam o poplatku:
Záznamy bez odpovídajících hodnot jsou v příslušných sloupcích nahrazeny hodnotami NULL.
PRAVÝ VNĚJŠÍ SPOJ
Tento typ spojení vrátí všechny řádky z tabulky napravo a pouze ty, které mají odpovídající hodnoty v tabulce nalevo. Například:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students RIGHT OUTER JOIN Fee ON Students.admission = Fee.admission
Příkaz pro OUTER JOINS v SQL Serveru vrací následující výsledek:
Důvodem výše uvedeného výstupu je, že všechny řádky v tabulce Poplatek jsou dostupné v tabulce Studenti, když jsou spárovány ve sloupci přijetí.
ÚPLNÉ VNĚJŠÍ PŘIPOJENÍ
Tento typ spojení vrací všechny řádky z obou tabulek s hodnotami NULL všude, kde podmínka JOIN není splněna. Například:
SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid FROM Students FULL OUTER JOIN Fee ON Students.admission = Fee.admission
Kód vrací následující výsledek pro dotazy FULL OUTER JOIN v SQL, kombinující všechny řádky z obou tabulek:







