Inner och Vänster Yttre Gå med där Klausul vs ON-klausul

Filtreringsresultat med [ON] -klausulen och [Where] -klausulen med hjälp av LEFT OUTER JOIN och INNER JOIN är en mycket kraftfull teknik.

En INRE KOPPLING ger rader som matchar värdena i gemensamma kolumner på två eller flera tabeller med en operatör som (=) lika.

en VÄNSTER GÅ MED eller VÄNSTER UTGÅENDE GÅNG ger alla raderna från vänstra bordet med matchade rader från båda tabellerna. När en rad i det vänstra bordet inte har några matchande rader i det högra tabellen innehåller den associerade resultatuppsatta raden nullvärden för alla valda listkolumner som kommer från det högra tabellen.

Nu ska vi visa hur dessa fungerar.

Vi ska skapa två tabeller: FRUKT och FRUIT_COLOR.

OM OBJECT_ID ('FRUIT') ÄR INTE NULL DROP TABLE FRUIT; GÅ CREATE TABLE FRUIT (namn VARCHAR (25), färg INT); GÅ OM OBJECT_ID ('FRUIT_COLOR') ÄR INTE NULL DROP TABLE FRUIT_COLOR; GÅ CREATE TABLE FRUIT_COLOR (id INT, namn VARCHAR (25)); GÅ


När det gäller strukturen hos de skapade tabellerna har FRUIT_COLOR-tabellen en unik kolumn (ID) och färg (namn) s.

FRUIT-tabellen består av frukt (namn) s och respektive (färg).

Jag har inte skapat några primära nycklar och utländska nyckelrelationer för att hålla det enkelt, men du kan lätt förstå den primära nyckeln FRUIT_COLOR (ID) är en främmande nyckel till FRUIT (färg).

Populera dessa tabeller med viss data.

INSERT till FRUIT_COLOR VALUES (1, 'orange'); INSERT till FRUIT_COLOR VALUES (2, 'yellow'); INSERT till FRUIT_COLOR VALUES (3, 'red'); INSERT till FRUIT_COLOR VALUES (4, 'blue'); GÅ INSERT IN FRUKTVÄRDEN ("banan", 2); INSERT till FRUIT VALUES ('mango', 2); INSERT IN FRUKTVÄRDEN ("orange", 1); INSERT IN FRUKTVÄRDEN ("äpple", 3); INSERT IN FRUKTVÄRDEN ("druvor", null); INSERT IN FRUKTVÄRDEN ('avokado', null); GÅ VÄLJ * från FRUIT; VÄLJ * från FRUIT_COLOR; GÅ

Vi kommer att demonstrera olika scenarier med en vänster yttre anslutning.

Fråga 1.1 - En vanlig, enkel vänster yttre anslutning

VÄLJ * FRÅN FRUIT F VÄNSTER yttre anslutning FRUIT_COLOR FC ON F.color = FC.id; GÅ


Som vi vet konceptet om en VÄNSTER YTTRE JOIN, vet vi att det kommer att visa alla rader från vänstra bordet. I det här fallet är FRUIT det vänstra bordet, och om någon matchning hittas med rätt tabell som heter FRUIT_COLOR, kommer den att visa matchande rader. Annars kommer det att returnera NULL.

I exemplet ovan har druvor och avokadoer sin färg som NULL, så NULL-jämförelsen misslyckas och returnerar NULL.

Fråga 1.2 - En vänster yttre Anslut med varförhållandet

VÄLJ * FRÅN FRÅN F VÄNSTER yttre anslutning FRUIT_COLOR FC PÅ F.color = FC.id VAR F.name = 'äpple'; GÅ


När vi lägger till en var-klausul med en vänster yttre anslutning, beter sig den som ett inre sammanfogning, där filtret appliceras efter ON-klausulen, vilket bara visar de raderna som har frukt med namnet "äpple".

Fråga 1.3 - En vänster yttre Anslut med ON-klausulen

VÄLJ * från FRUIT F VÄNSTER yttre anslutning FRUIT_COLOR FC ON F.color = FC.id OCH F.name = 'äpple'; GÅ


I frågan ovan blir de flesta förvirrade om hur denna fråga utvärderas. Du kan se resultaten nedanför alla raderna från vänstra bordet ingår i resultatuppsättningen som en vanlig vänster yttre anslutningsfråga som vi såg i fråga 1.1, men från den andra tabellen (dvs. fruit_color) visas endast de raderna som visar matcha villkoret f.name = 'äpple'. Annars visas den som NULL.

Detta är användbart när du filtrerar data med en vänster yttre anslutning. [ON] -klausulen kan vara användbar när vi behöver returnera alla rader från det vänstra bordet och endast de raderna från det rätta bordet som matchar villkoret för On-klausulen.


- Fråga 1.4 - En innerlig del i Var-klausulen

VÄLJ * FRÅN FRUIT F INNER ansluta FRUIT_COLOR FC ON F.color = FC.id VAR F.namn = 'orange'; GÅ


- Fråga 1.5 - En inre Anslut med ON-klausulen

VÄLJ * FRÅN FRUIT F INNER ansluta FRUIT_COLOR FC ON F.color = FC.id OCH F.name = 'orange'; GÅ


Du kan se både fråga 1.4 och fråga 1.5, med hjälp av ett inre sammanfogning, returnera samma resultat eftersom det inte spelar någon roll var du filtrerar raderna med ett inre sammanfogning. Med antingen on-klausulen eller var-klausulen kommer båda fallen att ge dig samma resultat.