Privacy & Cookies
Ez az oldal cookie-kat használ. A folytatással elfogadja a használatukat. Tudjon meg többet, beleértve a cookie-k vezérlését is.
vannak esetek, amikor felülvizsgálat SQL lekérdezéseket, illetve megtalálja az embereket, használja a BAL KÜLSŐ Csatlakozik, de akkor használható, AHOL a rendelkezést, amely viszont azok csatlakozik a BELSŐ Csatlakozik. Nemrégiben, ahogy említettem ezt valakinek, emlékeztettek arra, hogy blogolnom kell it…so itt blogolok róla. 🙂
először, ha nem ismeri a különböző csatlakozásokat, olvassa el ezt a másik SQL tippet, amelyet írtam., Most tanuljunk egy kicsit többet a bal külső csatlakozásról (egyszerűen úgy hivatkozom rá, hogy a bal csatlakozik innen).
kezdjük néhány mintaadattal. A következő lehet használni az elején a saját lekérdezések, ha fogsz futtatni ezeket a teszteket magad. Mint látható, két táblát hoz létre (táblázat változók).,
Ha azt akarjuk, hogy visszatérjen a rekordok “Table1” függetlenül attól, hogy van egy kapcsolódó rekord “Table2” mutasd meg az adatokat, a “Table2” ha van egy kapcsolódó rekord írtunk egy BAL CSATLAKOZNI, így:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID;
Teljesítmény:
Azonban ha most szeretnénk, AHOL kikötés, hogy a lekérdezés, hogy csak az adatokat “Table2”, ahol az AZONOSÍTÓ kevesebb, mint 4, lehet, csinálunk valamit, mint ez:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID < 4;
Teljesítmény:
De látta, hogy csak az értékek, ha van egy megfelelő ID mind az asztaloknál?, Hmmm … úgy tűnik, hogy jár egy szörnyű sok, mint egy belső JOIN jobb? Azért, mert az. Nem hiszel nekem? Vessen egy pillantást a végrehajtási terv futtatása után a bal oldali csatlakozzon a hol feltétel nélkül. Itt van, amit látni fog:
tehát hogyan lehet megkerülni ezt? Nos, mivel bal oldali csatlakozást végez, először is nyilvánvalóan szüksége van rá, vagy vissza akarja adni az összes rekordot a “Table1” – ből, függetlenül a “Table2″adataitól., És ha tényleg nem akarod visszaadni bizonyos rekordok adatait a “Table2” – ben, akkor kiszűrheted ezeket a rekordokat a JOIN predikátumodban (a “keresési feltételek” a csatlakozás ON részében). Például az utolsó lekérdezés lenne írva, mint ez helyett:
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID AND tb2.columnID < 4;
Output:
nézze meg, hogyan még mindig kap az 5 rekordok “Table1″, de nem az adatokat” Table2″, hogy nem felel meg a kritériumoknak? Csak NULLs-t ad vissza a táblázatban szereplő adatokhoz, amelyek nem felelnek meg a kritériumoknak. Elég félelmetes, igaz?,
és…újra megnézhetjük a végrehajtási tervet annak bizonyítására, hogy valójában bal oldali csatlakozást használunk:
mi lenne, ha egy érték helyett valaki az IS NULL állapotot használja? Nos, ebben az esetben használhatja ezt a hol záradékban.
SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID IS NULL;
kimenet:
és nézzük meg újra a végrehajtási tervet:
figyeljük meg, hogy végrehajtja a bal oldali csatlakozást, majd szűri a NULL rekordok adatait? Ezt akarjuk csinálni, és őszintén szólva, valószínűleg erre számítottunk.
mi van, ha nem használjuk NULL helyett? Nos … ez egy másik történet., Elrontom a meglepetést, és csak azt mondom, hogy egy belső csatlakozást fog csinálni, mint ahogy egy tényleges értékkel. Ha nem hiszel nekem, menj előre és fuss a lekérdezés magad, és nézd meg a végrehajtási tervet.
tehát ott van; így lehet, hogy a bal oldali csatlakozás valójában bal oldali csatlakozás. Remélhetőleg ez az információ segít jobban írni, vagy legalábbis, tájékozott lekérdezések.