Računalniki, Programiranje
Levi pridruži (SQL) - zgled, podroben opis, uporaba napake
V vsakem realnem relacijske baze podatkov, vse informacije razdeljen na posebni tabeli. Veliko tabel so določene v sistem komunikacije s seboj. Vendar pa se s pomočjo SQL poizvedb, je povsem mogoče, da dajo povezavo med podatki, ki niso vgrajeni v krog. To se naredi z izvajanjem pridružijo povezavo, ki vam omogoča, da graditi odnos med poljubno število tabel, in celo povezati navidezno različen informacije.
Ta članek bo govoril predvsem o levi zunanji pridružijo. Preden nadaljujete z opisom te vrste povezavo, dodajte v nekaterih tabelah zbirke podatkov.
Priprava potrebnih tabel
Na primer, v naši bazi podatkov, se podatki o ljudeh in njihovih nepremičnin. Povzetek, ki temelji na treh mizah: Ljudska (ljudi), Realty (nepremičnine), Realty_peoples (tabela odnosi, ljudje, ki iz tega, kar lastnina pripada). Predpostavimo naslednje podatke, ki so shranjeni v tabelah ljudi:
Peoples | ||||
id | L_name | F_name | Middle_name | Rojstni dan |
1 | Ivanova | Daria |
B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolajevič | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | ljubezen | P. | 1989/12/31 |
5 | Gerasimovsky | upam | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 |
Nepremičnine:
Realty | |
id | naslov |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkhangelsk regija, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
ljudje odnosi - nepremičnine:
Realty_peoples | ||
id_peoples | id_realty | tip |
7 | 3 | Skupaj skupno lastništvo |
8. | 3 | Skupaj skupno lastništvo |
3 | 5 | nepremičnine |
7 | 1 | nepremičnine |
5 | 4 | Skupni deli |
6 | 4 | Skupni deli |
Levo pridruži (SQL) - Opis
Leva spojina naslednjo sintakso:
Table_A LEVO PRIDRUŽITE table_B [{O predikatov} | {UPORABA spisok_ z tolbtsov}] |
In shematično kot sledi:
In je ta izraz preveden kot "Izberi vse, brez izjeme, vrstica tabele A in tabele B za prikaz samo ujemajoče se vrstice predikata. Če je tabela najdete v tabeli niza za parov A, potem pa izpolnite nastale stolpce Null - vrednote ".
Najbolj pogosto, ko je zapustil povezava navedeno ON, z uporabo se uporablja samo, če so imena stolpcev, ki je načrtovana za vzpostavitev povezave enako.
Levi pridruži - primeri uporabe
S povezavo na levi strani lahko vidimo, vsi ljudje s seznama, če je ljudska last. Če želite to narediti v levi pridruži SQL primer poizvedbe:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type IZ Peoples LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples; |
Z naslednjimi rezultati:
Query1 | ||||||
id | L_name | F_name | Middle_name | Rojstni dan | id_realty | tip |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolajevič | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | nepremičnine |
4 | Annina | ljubezen | P. | 1989/12/31 | ||
5 | Gerasimovsky | upam | P. | 1992/03/14 | 4 | Skupni deli |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Skupni deli |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 1 | nepremičnine |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 3 | Skupaj skupno lastništvo |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Skupaj skupno lastništvo |
Kot vidimo, Ivanova Darya Pugin Vladislav in Anninoy Lyubovi ni registrirano pravice nepremičnin.
In kaj bi mi prejeli, s pomočjo notranje pridruži Notranja pridružiti? Kot veste, se izključuje neusklajene vrstic, tako da tri od našega končnega vzorca preprosto bi padla:
Query1 | ||||||
id | L_name | F_name | Middle_name | Rojstni dan | id_realty | tip |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | nepremičnine |
5 | Gerasimovsky | upam | P. | 1992/03/14 | 4 | Skupni deli |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Skupni deli |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 1 | nepremičnine |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 3 | Skupaj skupno lastništvo |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Skupaj skupno lastništvo |
Zdi se, da je druga različica izpolnjuje tudi pogoje za naš problem. Vendar, če bomo začeli pritrdite na drugo, in še miza, trije ljudje iz rezultata že nepovratno izginilo. Zato je v praksi, ko se združuje več tabel veliko bolj pogosto uporabljajo levo in desno priključek kot Inner pridružijo.
Bo še naprej iskal na levi pridružijo SQL primere. Priložite tabele z naslovi naših hiš:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address IZ narodov LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty NA Realty.id = Realty_peoples.id_realty |
Zdaj smo dobili ne le neke vrste prava, temveč tudi naslov nepremičnine:
Query1 | |||||||
id | L_name | F_name | Middle_name | Rojstni dan | id_realty | tip | naslov |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolajevič | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | nepremičnine | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | ljubezen | P. | 1989/12/31 | |||
5 | Gerasimovsky | upam | P. | 1992/03/14 | 4 | Skupni deli | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Skupni deli | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 3 | Skupaj skupno lastništvo | Arkhangelsk regija, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 1 | nepremičnine | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Skupaj skupno lastništvo |
Arkhangelsk regija, Severodvinsk, st. Lenin, d. 134, q. 85 |
Levi pridružijo - tipično uporabo napake: neveljaven postopek mizo
Osnovne napake, ki na levem zunanjem pridruži mize, dva:
- Pravilno izbrani vrstni red tabel, za katere so bili podatki izgubili.
- Kje napake pri uporabi poizvedbo z pridružijo tabel.
Razmislite prvo napako. Pred odločitvijo o kakršnih koli težav, je treba jasno razumeti, da to, kar želimo, da bi dobili na koncu. V tem primeru zgoraj, smo vsak od ljudi, ampak popolnoma izgubila podatke o predmetu pod številko 2, katerega lastnik ni bil najden.
Če smo se preselili tabel v poizvedbi v nekaterih krajih, in bi začeli s «... Iz Realty leve pridruži ljudstvih ...» katero koli lastnost, da ne bi izgubili, vam ne bo povedal o ljudeh.
Ampak ne boji levi povezavo, preklopite na polno zunanji, ki je vključena v rezultate in ujemanje, in ne na ujemanje linij.
Konec koncev, obseg vzorca je pogosto zelo velik, in dodatno podatkov je dejansko neuporabna. Glavna stvar - da ugotovimo, kaj si želijo, da bi dobili rezultat: za vse ljudi s seznamom svojih razpoložljivih premoženja ali celoten seznam premoženja s svojimi lastniki (če obstaja).
Levi pridružijo - tipično uporabo napake: Zahteva je pravilno pri določanju pogojev v Kam
Druga napaka je povezana tudi z izgubo podatkov, in niso vedno takoj vidna.
Pojdimo nazaj na poizvedbo, ko smo zapustili preko povezave prejela podatke za vse ljudi in njihove obstoječe premoženje. Ne pozabite, naslednji z leve pridruži SQL primer:
IZ Peoples LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples; |
Recimo, da želimo pojasniti zahteve in ne izhodne podatke, v katerih se vrsta prava - "lastnina". Če smo preprosto dodajanje, z uporabo leve pridruži SQL primer pod naslednjimi pogoji:
...
Kadar tip <> "lastnina" |
bomo izgubili podatke o ljudeh, ki nimajo premoženja, saj je null vrednost null, ne glede na naslednji način:
Query1 | ||||||
id | L_name | F_name | Middle_name | Rojstni dan | id_realty | tip |
5 | Gerasimovsky | upam | P. | 1992/03/14 | 4 | Skupni deli |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Skupni deli |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 3 | Skupaj skupno lastništvo |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Skupaj skupno lastništvo |
Da bi preprečili napake, ki se pojavljajo zaradi tega, je najbolje, da takoj določi pogoj za izbiro ob povezavi. Predlagamo, da razmisli o naslednjih z leve pridruži SQL primer.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type IZ narodov LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples IN tip <> "lastnina") |
Posledica tega bo, kot sledi:
Query1 | ||||||
id | L_name | F_name | Middle_name | Rojstni dan | id_realty | tip |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolajevič | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | ljubezen | P. | 1989/12/31 | ||
5 | Gerasimovsky | upam | P. | 1992/03/14 | 4 | Skupni deli |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Skupni deli |
7 | Sukhanovskaya | žirija | A. | 1976/09/25 | 3 | Skupaj skupno lastništvo |
8. | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Skupaj skupno lastništvo |
Tako, tako, da sledite preprost levo pridružijo SQL primer, smo prejeli seznam vseh ljudi, še bolj, ena od teh lastnosti v kapitalski / skupnega lastništva.
Kot zaključek bi rad še enkrat, da je treba vzorec vseh informacij iz baze podatkov, ki jih je treba sprejeti odgovorno poudarjajo. Veliko odtenkov odprli pred nami z leve pridruži SQL preprost primer, od katerih je ena razlaga - preden začnete pisati celo osnovno poizvedbo, morate skrbno razumeti, kaj želimo, da bi dobili na koncu. Srečno!
Similar articles
Trending Now