Welcome to Our Website

SQL Tip: vlevo se připojí a kde klauzule … jsou opravdu ponechány?

X

Privacy & Cookies

tento web používá cookies. Pokračováním souhlasíte s jejich použitím. Další informace, včetně toho, jak ovládat soubory cookie.

Mám to!,

Inzeráty

jsou chvíle, kdy jsem recenzi SQL dotazů a najít lidi pomocí LEVÉ VNĚJŠÍ Spojení, ale pak použít tam, KDE ustanovení, která zase ty se připojí do VNITŘNÍ Spojení. Nedávno, když jsem se o tom zmínil někomu, že mi připomněl, že bych měl blog o it…so tady jsem blogování o tom. 🙂

nejprve, pokud nejste obeznámeni s různými připojeními, pokračujte a přečtěte si tento další Tip SQL, který jsem napsal., Nyní se pojďme dozvědět něco více o levém vnějším spojení(odkazuji na to jednoduše jako levý vstup odtud).

začněme s některými ukázkovými daty. Následující informace lze použít na začátku vašich vlastních dotazů, pokud se chystáte tyto testy spustit pro sebe. Jak vidíte, vytvoří dvě tabulky (proměnné tabulky).,

chceme-Li vrátit všechny záznamy v „Tabulka1“, bez ohledu na to, zda je přidružený záznam v „Tabulka2“ a zobrazit data z „Tabulka2“ když je přidružený záznam bychom napsat left JOIN, tak jako:

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID;

Výstup:

Nicméně, pokud nyní chceme přidat klauzuli where dotazu pouze získat data z „Tabulka2“, kde ID je menší než 4, které jsme mohli udělat něco jako toto:

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID < 4;

Výstup:

Ale…viděli jste, že jsme jen získat hodnoty tam, kde je odpovídající ID v obou tabulkách?, Hmmm … zdá se, že se chová strašně jako vnitřní spojení, že? To proto, že je. Nevěříš mi? Podívejte se na plán provádění po spuštění levého spojení s a bez podmínky WHERE. Zde je to, co uvidíte:

tak jak to můžeme obejít? No, protože děláte levé spojení, abyste mohli začít, zjevně potřebujete nebo chcete vrátit všechny záznamy z “ Table1 „bez ohledu na data v“Table2“., A pokud opravdu nechcete vrátit data pro určité záznamy v „Table2“, můžete tyto záznamy filtrovat ve svém predikátu JOIN („vyhledávací kritéria“ v části JOIN). Například poslední dotaz by být napsáno jako místo toho tohle:

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID AND tb2.columnID < 4;

Výstup:

Podívejte se, jak jsme se ještě dostat 5 záznamy z „Tabulka1“, ale ne data z „Tabulka2“, který nesplňoval naše kritéria? Vrací pouze NULLs pro data v této tabulce, která nesplňují kritéria. Docela úžasné, že?,

A…můžeme se podívat na plán spuštění znovu dokázat, že jsme vlastně pomocí left JOIN:

a Co když místo hodnoty někdo používá JE NULL stav místo? V tom případě to můžete použít v klauzuli WHERE.

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID IS NULL;

Výstup:

A pojďme se podívat na plán spuštění znovu:

Všimněte si, že to provede left join a pak filtruje data na NULL záznamy? To je to, co chceme dělat a upřímně řečeno, to je to, co jsme asi očekávali.

Co když místo toho použijeme NULL? No … to je další příběh., Zkazím překvapení a řeknu vám, že to udělá vnitřní spojení, stejně jako by to mělo skutečnou hodnotu. Pokud mi nevěříte, pokračujte a spusťte dotaz sami a podívejte se na plán popravy.

takže tam to máte; takto může nebo nemusí být levý spoj. Doufejme, že tyto informace vám pomohou psát lépe, nebo alespoň, informovanější dotazy.

reklamy

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *