sql >> Databáze >  >> RDS >> Mysql

sql se připojí jako Vennův diagram

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.



  1. Kdy přepnout na větší instanci RDS

  2. Jak TAN() funguje v MariaDB

  3. Manipulace s daty a časovými razítky MySQL v Javě

  4. Mysql vložit do 2 tabulek