Počítače, Programování
Left připojit (SQL) - příklad, podrobný popis, využití chyby
V nějakém skutečném relační databáze, všechny informace jsou rozděleny na samostatné tabulce. Mnohé z těchto tabulek jsou uvedeny v komunikačním systému s sebou. Nicméně, s pomocí SQL dotazů to je docela možné, aby spojení mezi údaji, které nejsou zakotveny v obvodu. To se provádí provedením připojení připojit, která vám umožní vybudovat vztah mezi libovolný počet stolů, a dokonce spojit zdánlivě nesourodé informace.
Tento článek se bude hovořit konkrétně o levé vnější spojení. Předtím, než se přistoupí k popisu tohoto typu připojení, přidejte v některých databázových tabulek.
Připravuje potřebné tabulky
Například v naší databázi, jsou informace o lidech a jejich nemovitostí. Souhrn založený na třech tabulkách: Peoples (lidé), nemovitostí (nemovitosti), Realty_peoples (stolní vztahy, lidé, kteří z toho, co nemovitosti náleží). Předpokládají se následující data uložená v tabulkách lidí:
Peoples | ||||
id | L_name | F_name | Middle_name | narozeniny |
1 | Ivanova | Daria | B. | 07/16/2000 |
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 |
3 | Evgenin | Alexander | Federovich | 04/30/1964 |
4 | Annina | milovat | P. | 31.12.1989 |
5 | Gerasimovsky | naděje | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 |
Nemovitostí:
nemovitost | |
id | adresa |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Vztahy lidí - nemovitostí:
Realty_peoples | ||
id_peoples | id_realty | typ |
7 | 3 | Celková spoluvlastnictví |
8 | 3 | Celková spoluvlastnictví |
3 | 5 | vlastnost |
7 | 1 | vlastnost |
5 | 4 | společné součásti |
6 | 4 | společné součásti |
Doleva připojit (SQL) - Popis
Opustil sloučenina má následující syntaxi:
Table_A LEFT JOIN table_B [{ON predikátu} | {POUŽITÍ spisok_ s tolbtsov}] |
A schematicky takto:
A tento výraz překládá jako „Vybrat vše bez výjimky, řádka tabulky A Tabulka B se zobrazí pouze odpovídající řádky predikátu. Pokud bylo zjištěno, že tabulka v tabulce řetězec pro páry A pak vyplňte výsledné sloupce Null - hodnoty“.
Nejvíce často, když se nechal připojení uveden ON, který používáte, je používán pouze v případě, že názvy sloupců, který je plánován pro navázání spojení jsou stejné.
LEFT JOIN - příklady použití
S připojením nalevo vidíme, všichni lidé ze seznamu, pokud tam Peoples vlastnost. Chcete-li to v levém připojit k SQL dotazu příklad:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Z Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
S následujícími výsledky:
Query1 | ||||||
id | L_name | F_name | Middle_name | narozeniny | id_realty | typ |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | vlastnost |
4 | Annina | milovat | P. | 31.12.1989 | ||
5 | Gerasimovsky | naděje | P. | 14.03.1992 | 4 | společné součásti |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | společné součásti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnost |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastnictví |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastnictví |
Jak vidíme, Ivanova Darya Pugin Vladislav a Anninoy Lyubovi No zapsána práva nemovitostí.
A to, co bychom získali pomocí vnitřní spojení Vnitřní připojit? Jak víte, že vylučuje neodpovídající řádky, tak tři z našeho konečného vzorku by se jednoduše klesl:
Query1 | ||||||
id | L_name | F_name | Middle_name | narozeniny | id_realty | typ |
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | vlastnost |
5 | Gerasimovsky | naděje | P. | 14.03.1992 | 4 | společné součásti |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | společné součásti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnost |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastnictví |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastnictví |
Mohlo by se zdát, že druhá verze také splňuje podmínky pro náš problém. Nicméně, pokud začneme připevnit na další a další stůl, tři lidé z výsledku již nenávratně pryč. Proto se v praxi, při kombinování více tabulek mnohem častěji používá levý a pravý připojení než vnitřní spojení.
Bude i nadále hledat na levé straně spojit sql příklady. Přiložit tabulku s adresami našich domech:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address Z Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Teď dostaneme nejen druh práva, ale také adresy nemovitosti:
Query1 | |||||||
id | L_name | F_name | Middle_name | narozeniny | id_realty | typ | adresa |
1 | Ivanova | Daria | B. | 07/16/2000 | |||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | |||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | vlastnost | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | milovat | P. | 31.12.1989 | |||
5 | Gerasimovsky | naděje | P. | 14.03.1992 | 4 | společné součásti | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | společné součásti | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastnictví | Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnost | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastnictví |
Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, q. 85 |
Left připojit - typické využití chyby: Neplatná procedura tabulku
Základní chyby učiněné v levé vnější spojení tabulek, z toho dvě:
- Správně vybraná pořadí tabulky, pro které byla data ztracena.
- Kde chyby při použití dotazu s spojení tabulek.
Vezměme si první chybu. Před rozhodnutím jakéhokoliv problému by mělo být jasné, že to, co chceme, aby se do konce roku. V tomto výše uvedeném příkladu jsme se každý jeden z lidí, ale úplně ztratila informace o objektu pod číslem 2, jehož vlastník nebyl nalezen.
Pokud jsme se přestěhovali do tabulek v dotazu v některých místech, a začne s «... Zleva nemovitostí připojit Peoples ...» jakoukoliv jednu vlastnost, nebyli bychom ztratili, budete vyprávět o lidech, ne.
Ale nemějte strach z levé připojení, přepnout na plný externí, která je zahrnuta do výsledků a přizpůsobení a ne odpovídající řádky.
Po tom všem, že objem vzorku je často velmi velké, a další údaje je vlastně k ničemu. Hlavní věc - přijít na to, co chcete získat výsledek: ze všech lidí se seznamem jejich dostupného majetku nebo celý seznam majetku s jejich vlastníků (pokud existuje).
Left připojit - typické využití chyby: Dotaz při stanovení podmínek v Kde je správný
Druhá chyba je také spojena se ztrátou dat, a nejsou vždy na první pohled patrné.
Vraťme se k dotazu, kdy jsme odjeli přes přípojky přijatých dat pro všechny lidi a jejich stávajícího majetku. Pamatovat na následující skutečnosti s levým spojit sql příklad:
Z Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Předpokládejme, že chceme objasnit žádost a není výstupní data, kde typ práva - „vlastnictví“. Kdybychom jednoduše připojit, Levým připojit SQL příklad za následujících podmínek:
...
Kde typ <> "Property" |
ztratíme údaje o lidech, kteří nemají žádný majetek, protože null hodnota Null není ve srovnání takto:
Query1 | ||||||
id | L_name | F_name | Middle_name | narozeniny | id_realty | typ |
5 | Gerasimovsky | naděje | P. | 14.03.1992 | 4 | společné součásti |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | společné součásti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastnictví |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastnictví |
Chcete-li zabránit chybám dochází z toho důvodu, že je nejlepší nastavit podmínku výběrového ihned po připojení. Navrhujeme zvážit následující s levou spojit sql příklad.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Z Peoples LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples AND typ <> "vlastnictví") |
Výsledek bude vypadat následovně:
Query1 | ||||||
id | L_name | F_name | Middle_name | narozeniny | id_realty | typ |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | ||
4 | Annina | milovat | P. | 31.12.1989 | ||
5 | Gerasimovsky | naděje | P. | 14.03.1992 | 4 | společné součásti |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | společné součásti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastnictví |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastnictví |
Tím, že po jednoduchých až po levé straně spojit sql příklad, jsme obdrželi seznam všech lidí, pohybující se dále, jeden z těchto vlastností v případě akciové / společného vlastnictví.
Na závěr bych chtěl znovu zdůraznit, že vzorek jakékoliv informace z databáze je třeba brát zodpovědně zdůraznit. Mnoho nuance otevřel před námi s levou spojit sql jednoduchý příklad, vysvětlení, z nichž jeden - předtím, než začnete psát ani základní dotaz, musíte pečlivě pochopit, co chceme dostat do konce roku. Hodně štěstí!
Similar articles
Trending Now