Vnitřní spojení a vnější spojení jsou dva užitečné způsoby spojení databázových tabulek a dotazování na data z více tabulek. V tomto článku se podíváme na rozdíl mezi vnitřním a vnějším spojením v SQL.
Vnitřní spojení
Vnitřní spojení vrátí řádky ze dvou nebo více tabulek, kde alespoň jeden sloupec má stejnou hodnotu ve všech tabulkách. Pokud neexistují žádné společné hodnoty, nebudou vráceny žádné řádky.
Zde je syntaxe vnitřního spojení:
select * from table1 INNER JOIN table2 on table1.column_name = table2.column_name; OR select * from table1 JOIN table2 on table1.column_name = table2.column_name;
Vnější spojení
Vnější spojení vrátí řádky ze dvou nebo více tabulek, kde má alespoň jeden sloupec společnou hodnotu, a také řádky, kde podmínka spojení selže. Existují 3 typy vnějších spojení:
Levý vnější spoj
V tomto případě jsou ve výsledku zachovány všechny řádky levé tabulky, v případě, že se podmínky spojení shodují s jinými tabulkami, jsou vráceny hodnoty jejich sloupců, jinak jsou pro tyto sloupce vráceny hodnoty null. Zde je syntaxe levého vnějšího spojení.
select * from table1 LEFT OUTER JOIN table2 on table1.column_name = table2.column_name;
Vnější spojení vpravo
V tomto případě jsou ve výsledku zachovány všechny řádky pravé tabulky, v případě, že se podmínky spojení shodují s jinými tabulkami, jsou vráceny hodnoty jejich sloupců, jinak jsou pro tyto sloupce vráceny hodnoty null.
Zde je syntaxe pravého vnějšího spojení
select * from table1 RIGHT OUTER JOIN table2 on table1.column_name = table2.column_name;
Úplné vnější spojení
V tomto případě jsou vráceny všechny řádky obou tabulek. Pokud je splněna podmínka spojení, sloupce se naplní hodnotami obou tabulek. Pokud podmínka spojení selže, hodnoty jedné z tabulek se vyplní do sloupců a zbytek se vyplní jako hodnoty null.
Rozdíl mezi vnitřním a vnějším spojením v SQL
Zde jsou klíčové rozdíly mezi vnitřním spojením a vnějším spojením.
Vnitřní spojení
- Vrátí pouze řádky se společnými hodnotami sloupců.
- Můžete použít klauzuli INNER JOIN nebo JOIN. Oba mají stejný účinek
- Vrátí hodnotu null, pokud mezi dvěma (nebo více) tabulkami nejsou žádné odpovídající hodnoty sloupců
- Inner Join je rychlejší než Outer Join
- Je užitečné provádět vyhledávání ve více tabulkách
- V matematickém vyjádření vrací průnik dvou množin (tabulek)
Vnější spojení
- Vrací hodnoty z jedné nebo více tabulek, i když neexistují žádné odpovídající hodnoty sloupců
- U řádků bez odpovídajících atributů vrátí pro zbývající sloupce hodnotu null
- Úplné vnější spojení a Úplné spojení mají stejný účinek.
- Je pomalejší než vnitřní spojení
- Používá se k získání úplných informací ve dvou nebo více tabulkách
- Úplné vnější spojení není v MySQL podporováno. Je k dispozici v PostgreSQL, SQL Server, Oracle a dalších populárních databázích.
Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Zkuste to ještě dnes!