Souhlasím s Cadem ohledně omezení Vennových diagramů zde. Výstižnější vizuální reprezentace může být toto.
Tabulky
VYBERTE A.Colour, B.Colour Z PŘÍČNÉHO PŘIPOJENÍ B SQL Fiddle
Křížové spojení (nebo kartézský součin) vytváří výsledek s každou kombinací řádků ze dvou tabulek. Každá tabulka má 4 řádky, takže výsledkem je 16 řádků.
VYBERTE A.Colour, B.Colour Z VNITŘNÍHO SPOJENÍ B NA A.Colour =B.Colour SQL Fiddle
Vnitřní spojení logicky vrátí všechny řádky z křížového spojení, které odpovídají podmínce spojení. V tomto případě pět ano.
VYBERTE A.Colour, B.Colour Z VNITŘNÍHO SPOJENÍ B NA A.BARVA NENÍ V ('Zelená','Modrá') SQL Fiddle
Podmínka vnitřního spojení nemusí být nutně podmínkou rovnosti a nemusí odkazovat na sloupce z obou (nebo dokonce ani jedné) z tabulek. Hodnocení A.Colour NOT IN ('Green','Blue')
na každém řádku křížového spojení se vrátí.
Podmínka vnitřního spojení 1=1
by se vyhodnotil jako true pro každý řádek v křížovém spojení, takže oba jsou ekvivalentní (SQL Fiddle
).
VYBERTE A.Colour, B.Colour Z LEVÉHO VNĚJŠÍHO SPOJENÍ B NA A.Colour =B.Colour SQL Fiddle
Vnější spojení jsou logicky vyhodnocována stejným způsobem jako vnitřní spojení s tím rozdílem, že pokud se řádek z levé tabulky (u levého spojení) nespojí s žádnými řádky z pravé tabulky, je ve výsledku zachován pomocí NULL
hodnoty pro pravé sloupce.
VYBERTE A.Colour, B.Colour Z LEVÉHO VNĚJŠÍHO SPOJENÍ B ON A.Colour =B.Colour KDE B.Colour JE NULL SQL Fiddle
To jednoduše omezí předchozí výsledek tak, aby vrátil pouze řádky, kde B.Colour IS NULL
. V tomto konkrétním případě to budou řádky, které byly zachovány, protože se v tabulce vpravo neshodovaly a dotaz vrátí jediný červený řádek, který se v tabulce B
neshoduje. . Toto je známé jako anti semi join.
Je důležité vybrat sloupec pro IS NULL
test, který buď nemá hodnotu null, nebo u kterého podmínka spojení zajišťuje, že NULL
hodnoty budou vyloučeny, aby tento vzor fungoval správně a nedošlo k pouhému vracení řádků, které náhodou mají NULL
hodnotu pro tento sloupec navíc k neodpovídajícím řádkům.
VYBERTE A.Colour, B.Colour Z PRAVÉHO VNĚJŠÍHO SPOJENÍ B NA A.Colour =B.Colour SQL Fiddle
Pravá vnější spojení fungují podobně jako levá vnější spojení s tím rozdílem, že zachovávají neodpovídající řádky z pravé tabulky a nulové rozšiřují levé sloupce.
VYBERTE A.Colour, B.Colour Z ÚPLNÉHO VNĚJŠÍHO SPOJENÍ B NA A.Colour =B.Colour SQL Fiddle
Úplná vnější spojení kombinují chování levého a pravého spojení a zachovávají neshodné řádky z levé i pravé tabulky.