sql >> Databasteknik >  >> RDS >> Mysql

sql ansluter som venn-diagram

Jag håller med Cade om begränsningarna för Venn-diagram här. En mer passande visuell representation kan vara detta.

Tabell

VÄLJ A.Färg, B.Färg FRÅN A KORS JOIN B SQL Fiddle

Korskopplingen (eller kartesiska produkten) ger ett resultat med varje kombination av raderna från de två tabellerna. Varje tabell har 4 rader så detta ger 16 rader i resultatet.

VÄLJ A.Färg, B.Färg FRÅN A INRE JOIN B PÅ A.Colour =B.Colour SQL-fiol

Den inre kopplingen returnerar logiskt alla rader från korskopplingen som matchar kopplingsvillkoret. I det här fallet gör fem det.

VÄLJ A.Färg, B.Färg FRÅN A INRE JOIN B ON A.Colour NOT IN ('Green','Blue') SQL-fiol

Det inre kopplingsvillkoret behöver inte nödvändigtvis vara ett likhetsvillkor och det behöver inte referera till kolumner från båda (eller ens någon av) tabellerna. Utvärdera A.Colour NOT IN ('Green','Blue') på varje rad i korset återgår sammanfogningen.

Ett inre kopplingsvillkor för 1=1 skulle utvärderas till sant för varje rad i korskopplingen så att de två är likvärdiga (SQL Fiddle ).

VÄLJ A.Färg, B.Färg FRÅN EN VÄNSTER YTTRE JOIN B PÅ A.Färg =B.Färg SQL-fiol

Yttre kopplingar utvärderas logiskt på samma sätt som inre kopplingar förutom att om en rad från den vänstra tabellen (för en vänster koppling) inte alls ansluter sig till några rader från den högra tabellen så bevaras den i resultatet med NULL värden för högerkolumnerna.

VÄLJ A.Färg, B.Färg FRÅN EN VÄNSTER YTTRE FOGA B PÅ A.Färg =B.Färg DÄR B.Färg ÄR NULL SQL Fiddle

Detta begränsar helt enkelt det föregående resultatet till att endast returnera de rader där B.Colour IS NULL . I det här specifika fallet kommer dessa att vara raderna som bevarades eftersom de inte hade någon matchning i den högra tabellen och frågan returnerar den enda röda raden som inte matchades i tabellen B . Detta är känt som en anti semi join.

Det är viktigt att välja en kolumn för IS NULL test som antingen inte är nullbart eller för vilket kopplingsvillkoret säkerställer att någon NULL värden kommer att exkluderas för att det här mönstret ska fungera korrekt och undvika att bara ta tillbaka rader som råkar ha en NULL värde för den kolumnen utöver de omatchade raderna.

VÄLJ A.Färg, B.Färg FRÅN EN HÖGER YTTRE JOIN B PÅ A.Colour =B.Colour SQL-fiol

Höger yttre kopplingar fungerar på samma sätt som yttre kopplingar till vänster förutom att de bevarar icke-matchande rader från den högra tabellen och null förlänger de vänstra kolumnerna.

VÄLJ A.Färg, B.Färg FRÅN EN HELT YTTRE JOIN B PÅ A.Colour =B.Colour SQL Fiddle

Fullständiga yttre kopplingar kombinerar beteendet hos vänster- och högerkopplingar och bevarar de icke-matchande raderna från både vänster och höger tabell.



  1. Vad är JDBC-motsvarigheten till Postgres \connect-kommando?

  2. Hur databaser används i e-handel

  3. ORA-00911:ogiltigt tecken

  4. Hur man filtrerar rader utan NULL i en kolumn