Počítače, Programovanie
Left pripojiť (SQL) - príklad, podrobný opis, využitie chyby
V nejakom skutočnom relačnej databázy, všetky informácie sú rozdelené na samostatné tabuľke. Mnohé z týchto tabuliek sú uvedené v komunikačnom systéme so sebou. Avšak, s pomocou SQL dotazov to je celkom možné, aby spojenie medzi údajmi, ktoré nie sú zakotvené v obvode. To sa vykonáva prevedením pripojenia pripojiť, ktorá vám umožní vybudovať vzťah medzi ľubovoľný počet stolov, a dokonca spojiť zdanlivo nesúrodé informácie.
Tento článok sa bude hovoriť konkrétne o ľavej vonkajšie spojenie. Predtým, než sa pristúpi k opisu tohto typu pripojenia, pridajte v niektorých databázových tabuliek.
Pripravuje potrebné tabuľky
Napríklad v našej databáze, sú informácie o ľuďoch a ich nehnuteľností. Súhrn založený na troch tabuľkách: Peoples (ľudia), nehnuteľností (nehnuteľnosti), Realty_peoples (stolný vzťahy, ľudia, ktorí z toho, čo nehnuteľnosti patrí). Predpokladajú sa nasledovné dáta uložené v tabuľkách ľudí:
Peoples | ||||
id | L_name | F_name | Middle_name | narodeniny |
1 | Ivanova | Daria | B. | 07/16/2000 |
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 |
3 | Evgenin | alexander | Federov | 04/30/1964 |
4 | Annina | milovať | P. | 31.12.1989 |
5 | Gerasimovsky | nádeje | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 |
nehnuteľností:
nehnuteľnosť | |
id | adresa |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkhangelsk región, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkhangelsk región, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhin, d. 89, q. 13 |
Vzťahy ľudí - nehnuteľností:
Realty_peoples | ||
id_peoples | id_realty | typ |
7 | 3 | Celková spoluvlastníctva |
8 | 3 | Celková spoluvlastníctva |
3 | 5 | vlastnosť |
7 | 1 | vlastnosť |
5 | 4 | spoločné súčasti |
6 | 4 | spoločné súčasti |
Doľava pripojiť (SQL) - Opis
Opustil zlúčenina má nasledujúcu syntax:
Table_A LEFT JOIN table_B [{ON predikátu} | {POUŽITIE spisok_ s tolbtsov}] |
A schematicky takto:
A tento výraz prekladá ako "Vybrať všetko bez výnimky, riadok tabuľky A Tabuľka B sa zobrazí len zodpovedajúce riadky predikátu. Ak bolo zistené, že tabuľka v tabuľke reťazec pre páry A potom vyplňte výsledné stĺpca Null - hodnoty ".
Najviac často, keď sa nechal pripojenie uvedený ON, ktorý používate, je používaný iba v prípade, že názvy stĺpcov, ktorý je plánovaný pre nadviazanie spojenia sú rovnaké.
LEFT JOIN - príklady použitia
S pripojením naľavo vidíme, všetci ľudia zo zoznamu, ak tam Peoples vlastnosť. Ak to chcete v ľavom pripojiť k SQL dotazu príklad:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Z Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
S nasledujúcimi výsledkami:
Query1 | ||||||
id | L_name | F_name | Middle_name | narodeniny | id_realty | typ |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | ||
3 | Evgenin | alexander | Federov | 04/30/1964 | 5 | vlastnosť |
4 | Annina | milovať | P. | 31.12.1989 | ||
5 | Gerasimovsky | nádeje | P. | 14.03.1992 | 4 | spoločné súčasti |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 | 4 | spoločné súčasti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnosť |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastníctva |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastníctva |
Ako vidíme, Ivanova Darya Pugin Vladislav a Anninoy Lyuba No zapísaná práva nehnuteľností.
A to, čo by sme získali pomocou vnútorné spojenie Vnútorné pripojiť? Ako viete, že vylučuje nezodpovedajúce riadky, tak tri z nášho konečnej vzorky by sa jednoducho klesol:
Query1 | ||||||
id | L_name | F_name | Middle_name | narodeniny | id_realty | typ |
3 | Evgenin | alexander | Federov | 04/30/1964 | 5 | vlastnosť |
5 | Gerasimovsky | nádeje | P. | 14.03.1992 | 4 | spoločné súčasti |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 | 4 | spoločné súčasti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnosť |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastníctva |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastníctva |
Mohlo by sa zdať, že druhá verzia tiež spĺňa podmienky pre náš problém. Avšak, ak začneme pripevniť na ďalšie a ďalšie stôl, traja ľudia z výsledku už nenávratne preč. Preto sa v praxi, pri kombinovaní viacerých tabuliek oveľa častejšie používa ľavý a pravý pripojenie než vnútorné spojenie.
Bude aj naďalej hľadať na ľavej strane spojiť sql príklady. Priložiť tabuľku s adresami našich domoch:
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 |
Teraz dostaneme nielen druh práva, ale aj adresy nehnuteľnosti:
Query1 | |||||||
id | L_name | F_name | Middle_name | narodeniny | id_realty | typ | adresa |
1 | Ivanova | Daria | B. | 07/16/2000 | |||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | |||
3 | Evgenin | alexander | Federov | 04/30/1964 | 5 | vlastnosť | Arkhangelsk, pl. Terekhin, d. 89, q. 13 |
4 | Annina | milovať | P. | 31.12.1989 | |||
5 | Gerasimovsky | nádeje | P. | 14.03.1992 | 4 | spoločné súčasti | Arkhangelsk región, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 | 4 | spoločné súčasti | Arkhangelsk región, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastníctva | Arkhangelsk región, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 1 | vlastnosť | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastníctva |
Arkhangelsk región, Severodvinsk, st. Lenin, d. 134, q. 85 |
Left pripojiť - typické využitie chyby: Neplatné procedúra tabuľku
Základné chyby urobené v ľavej vonkajšie spojenie tabuliek, z toho dve:
- Správne vybraná poradie tabuľky, pre ktoré boli dáta stratená.
- Kde chyby pri použití dotazu s spojenie tabuliek.
Zoberme si prvú chybu. Pred rozhodnutím akéhokoľvek problému by malo byť jasné, že to, čo chceme, aby sa do konca roka. V tomto vyššie uvedenom príklade sme sa každý jeden z ľudí, ale úplne stratila informácie o objekte pod číslom 2, ktorého vlastník nebol nájdený.
Ak sme sa presťahovali do tabuliek v dotaze v niektorých miestach, a začne s «... Z ľava nehnuteľností pripojiť Peoples ...» akúkoľvek jednu vlastnosť, neboli by sme stratili, budete rozprávať o ľuďoch, nie.
Ale nemajte strach z ľavej pripojenia, prepnúť na plný externé, ktorá je zahrnutá do výsledkov a prispôsobiť a nie zodpovedajúce riadky.
Po tom všetkom, že objem vzorky je často veľmi veľké, a ďalšie údaje je vlastne k ničomu. Hlavná vec - prísť na to, čo chcete získať výsledok: zo všetkých ľudí so zoznamom ich dostupného majetku alebo celý zoznam majetku s ich vlastníkov (ak existuje).
Left pripojiť - typické využitie chyby: Otázka pri stanovení podmienok v Kde je správny
Druhá chyba je tiež spojená so stratou dát, a nie sú vždy na prvý pohľad zrejmé.
Vráťme sa k dotazu, kedy sme odišli cez prípojky prijatých dát pre všetkých ľudí a ich existujúceho majetku. Pamätať na nasledujúce skutočnosti s ľavým spojiť sql príklad:
Z Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Predpokladajme, že chceme objasniť žiadosť a nie je výstupné dáta, kde typ práva - "vlastníctvo". Keby sme jednoducho pripojiť, Ľavým pripojiť SQL príklad za nasledovných podmienok:
...
Kde typ <> "Property" |
stratíme údaje o ľuďoch, ktorí nemajú žiadny majetok, pretože null hodnota NULL nie je v porovnaní takto:
Query1 | ||||||
id | L_name | F_name | Middle_name | narodeniny | id_realty | typ |
5 | Gerasimovsky | nádeje | P. | 14.03.1992 | 4 | spoločné súčasti |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 | 4 | spoločné súčasti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastníctva |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastníctva |
Ak chcete zabrániť chybám dochádza z toho dôvodu, že je najlepšie nastaviť podmienku výberového ihneď po pripojení. Navrhujeme zvážiť nasledujúce s ľavou spojiť sql prí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 <> "vlastníctvo") |
Výsledok bude vyzerať nasledovne:
Query1 | ||||||
id | L_name | F_name | Middle_name | narodeniny | id_realty | typ |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolajevič | 29.01.1986 | ||
3 | Evgenin | alexander | Federov | 04/30/1964 | ||
4 | Annina | milovať | P. | 31.12.1989 | ||
5 | Gerasimovsky | nádeje | P. | 14.03.1992 | 4 | spoločné súčasti |
6 | Gerasimovsky | Oleg | Albertová | 01/29/1985 | 4 | spoločné súčasti |
7 | Sukhanovskaya | porota | A. | 09/25/1976 | 3 | Celková spoluvlastníctva |
8 | Sukhanovskaya | Julie | Y. | 01.10.2001 | 3 | Celková spoluvlastníctva |
Tým, že po jednoduchých až po ľavej strane spojiť sql príklad, sme dostali zoznam všetkých ľudí, pohybujúce sa ďalej, jeden z týchto vlastností v prípade akciovej / spoločného vlastníctva.
Na záver by som chcel ešte raz zdôrazniť, že vzorka akékoľvek informácie z databázy treba brať zodpovedne zdôrazniť. Mnoho nuansy otvoril pred nami s ľavou spojiť sql jednoduchý príklad, vysvetlenie, z ktorých jeden - predtým, než začnete písať ani základnú otázku, musíte starostlivo pochopiť, čo chceme dostať do konca roka. Veľa šťastia!
Similar articles
Trending Now