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.