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.

  • 🔗 Účel: Operace JOIN načítá související data ze dvou nebo více tabulek porovnáním společného sloupce, obvykle klíče.
  • 🎯 VNITŘNÍ SPOJENÍ: Funkce INNER JOIN vrací pouze řádky, kde je podmínka spojení v obou tabulkách pravdivá.
  • ⬅️ LEVÝ VNĚJŠÍ SPOJENÍ: Funkce LEFT OUTER JOIN vrací každý řádek z levé tabulky a neshodující se sloupce v pravé tabulce vyplní hodnotou NULL.
  • ➡️ PRAVÝ VNĚJŠÍ SPOJENÍ: Funkce RIGHT OUTER JOIN vrací každý řádek z pravé tabulky a neshodující se sloupce v levé tabulce vyplní hodnotou NULL.
  • 🔄 ÚPLNÉ VNĚJŠÍ SPOJENÍ: Funkce FULL OUTER JOIN vrací všechny řádky z obou tabulek a používá hodnotu NULL všude, kde není splněna podmínka.
  • 🔑 Stav ZAPNUTO: Klauzule ON pojmenovává sloupce, které propojují tabulky, nejčastěji se jedná o pár primárního a cizího klíče.

JOINy ​​v SQL Serveru: Příklady INNER, LEFT, RIGHT a FULL OUTER JOIN

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í:

Tabulka studentů se sloupci Přijetí, Jméno a Příjmení

Níže uvedená tabulka poplatků uvádí částku, kterou každé vstupné číslo zaplatilo:

Tabulka poplatků s uvedením čísel přijímacích řízení a sloupcem amount_paid

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:

Výsledek INNER JOIN zobrazuje pouze studenty, jejichž přijetí se objevuje 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:

Výsledek LEVÉHO VNĚJŠÍHO SPOJENÍ uchováváping každý student má hodnotu NULL za bezkonkurenční poplatky

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:

Výsledek RIGHT OUTER JOIN keeping každý řádek Poplatek a odpovídající řádky Studenti

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:

Výsledek FULL OUTER JOIN kombinuje všechny řádky Students a Fee s hodnotami NULL pro mezery

Nejčastější dotazy

Funkce CROSS JOIN vrací kartézský součin dvou tabulek, přičemž každý řádek první tabulky spáruje s každým řádkem druhé tabulky. Nemá podmínku ON, takže tabulka s 10 a 5 řádky vytvoří 50 řádků.

Používá se SELF JOIN: tabulka je uvedena dvakrát s různými aliasy a poté je spojena v souvisejícím sloupci pro porovnání řádků ve stejné tabulce. Je to běžné pro hierarchická data, například pro porovnání každého zaměstnance s jeho manažerem.

Příkaz JOIN kombinuje sloupce z propojených tabulek vedle sebe a porovnává řádky na základě zadané podmínky. Příkaz UNION vertikálně stohuje výsledky dvou dotazů SELECT a přidává řádky. Příkaz JOIN rozšiřuje výsledek; příkaz UNION jej prodlužuje.

Ano. Klauzule ON může testovat několik sloupců spojených operátorem AND, například ON a.col1 = b.col1 AND a.col2 = b.col2. Složené podmínky jsou běžné, když jeden sloupec jednoznačně neidentifikuje řádek.

Klauzule ON definuje, jak se tabulky porovnávají, a aplikuje se během provádění operace join. Klauzule WHERE následně filtruje sloučený výsledek. U operací OUTER JOIN může přesunutí podmínky mezi nimi změnit vrácené řádky.

Ano. Zapsání JOIN bez prefixu se standardně vrátí na INNER JOIN, takže vrátí pouze odpovídající řádky. Přidání LEFT, RIGHT nebo FULL před OUTER JOIN změní, které neshodné řádky budou ve výsledku ponechány.

Ano. GitHub Copilot Můžete vytvářet dotazy INNER, LEFT, RIGHT a FULL OUTER JOIN z příkazového řádku v přirozeném jazyce. Vždy zkontrolujte podmínku ON a typ spojení, aby výsledná sada odpovídala vašemu záměru.

Asistenti umělé inteligence a strojového učení navrhují správný typ spojení, generují podmínky ON pro více tabulek a označují chybějící klíče nebo náhodné kartézské součiny. Mohou také doporučit indexy pro sloupce spojení. Vývojář každý návrh před spuštěním ověří.

Shrňte tento příspěvek takto: