Personvern & Informasjonskapsler
Dette webområdet bruker cookies. Ved å fortsette, er du samtykker til deres bruk. Lære mer, herunder hvor å kontrollere informasjonskapsler.
Det er tider da jeg gjennomgang SQL-spørringer og søk etter personer ved hjelp av VENSTRE YTRE Sammenføyninger, men da bruk DER klausuler som slår de føyer seg inn i INDRE Sammenføyninger. Nylig som jeg har nevnt dette til noen de minnet meg på at jeg skulle blogge om det…så her er jeg blogge om det. 🙂
Først av alt, hvis du ikke er kjent med de ulike Sammenføyninger gå videre og lese denne andre SQL-Tips som jeg skrev., Nå, la oss komme for å lære litt mer om VENSTRE YTRE SAMMENFØYNING (jeg vil se det bare som VENSTRE MELD fra her på ut).
La oss starte med noen eksempler på data. Følgende kan brukes i begynnelsen av dine egne spørsmål hvis du kommer til å kjøre disse testene for deg selv. Som du kan se, det skaper to tabeller (tabell variabler).,
Hvis vi ønsker å returnere alle poster i «Table1» uavhengig av om det er et tilknyttet rekord i «Table2» og vise data fra «Table2» når det er et tilknyttet posten vil vi skrive en VENSTRE BLI med, for eksempel slik:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID;
Output:
Men hvis vi nå ønsker å legge til en WHERE-setningsdel til søket til bare få data fra «Table2» der ID-er mindre enn 4 vi kan gjøre noe sånt som dette:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID < 4;
Output:
Men…fikk du se at vi bare får de verdier der det er et matchende ID i begge tabellene?, Hmmm…det ser ut til å fungere veldig mye som en INDRE BLI med i høyre? Det er fordi den er. Ikke tro meg? Ta en titt på gjennomføringsplan etter å ha kjørt VENSTRE BLI med og uten der HVOR tilstanden. Her er hva du vil se:
Så hvordan kan vi komme rundt dette? Vel, siden du gjør en VENSTRE blir med til å begynne med, du trenger eller ønsker å returnere alle poster fra «Table1» uavhengig av dataene i «Table2»., Og hvis du virkelig ikke ønsker å returnere data for bestemte poster i «Table2» så kan du filtrere disse postene ut i din BLI med underliggende (den «søkekriterier» i den delen av DELTA). For eksempel, den siste spørringen ville bli skrevet som dette i stedet:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID AND tb2.columnID < 4;
Output:
Se hvordan vi fortsatt få 5 poster fra «Table1» men ikke data fra «Table2» som ikke oppfyller disse kriteriene? Det bare tilbake Nuller for data i tabellen som ikke oppfyller kriteriene. Ganske fantastisk ikke sant?,
Og…vi kan se på gjennomføringsplan igjen for å bevise at vi faktisk ved hjelp av en VENSTRE BLI med:
Hva om når i stedet for en verdi noen bruker ER NULL tilstand i stedet? Vel, i så fall kan du bruke den i WHERE-setningsdelen.
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID IS NULL;
Output:
Og, la oss se på den gjennomføringsplan igjen:
legg Merke til at den utfører venstre kan delta i og filtrerer data for NULL-poster? Det er hva vi vil den skal gjøre og ærlig, det er hva vi nok forventet at det skulle gjøre.
Hva hvis vi bruker IKKE ER NULL i stedet? Vel…det er en annen historie., Jeg vil ødelegge overraskelsen og bare fortelle deg at det vil gjøre en INDRE DELTA i, akkurat som det ville med en virkelig verdi. Hvis du ikke tror meg, gå foran og kjør spørringen på deg selv og ser på gjennomføringsplan.
Så, der har du det, det er hvordan a BLI med VENSTRE kan eller ikke kan faktisk være en LEFT JOIN. Forhåpentligvis vil denne informasjonen hjelper deg å skrive bedre, eller i det minste, mer informert spørringer.