Računala, Programiranje
Lijeva se pridruže (SQL) - primjer, detaljan opis, upotreba greške
U bilo kojoj stvarnoj relacionoj bazi podataka, sve informacije se distribuiraju na zasebnim tabelama. Mnoge tabele su uspostavile odnose u krugu zajedno. Međutim, koristeći Sql upite, sasvim je moguće napraviti vezu između podataka koji nisu sadržani u šemi. Ovo se postiže obavljanjem operacije pridruživanja pridruživanja, što vam omogućava da izgradite odnose između bilo kog broja tabela i povežete čak i naizgled različite podatke.
U ovom članku ćemo govoriti konkretno o levoj spoljnoj vezi. Pre nego što počnemo opisati ovu vrstu veze, dodali smo nekoliko tabela u bazu podataka.
Priprema potrebnih tabela
Na primer, u našoj bazi podataka nalaze se informacije o ljudima i njihovoj nepokretnosti. Osnovne informacije se zasnivaju na tri tabele: narodi (ljudi), nekretnine (nekretnine), nekretnine (stanovi sa odnosom, kome ljudi pripadaju nekretnine). Pretpostavimo da su u tabelama složeni sljedeći podaci za ljude:
Ljudi | ||||
Id | L_name | F_name | Middle_name | Rođendan |
1 | Ivanova | Daria | Borisovna | 16.07.2000 |
2 | Pugin | Vladislav | Nikolayevich | 29.01.1986 |
3 | Evgeniin | Alexander | Fedorovič | 30.04.1964 |
4 | Annina | Ljubav | Pavlovna | 31.12.1989 |
5 | Gerasimovskaya | Nadam se | Pavlovna | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 29.01.1985 |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 |
8 | Sukhanovskaya | Julia | Yuryevna | 10.1.2001 |
Nekretnina:
Realty | |
Id | Adresa |
1 | Arkhangelsk, ul. Voronina, 7, ap.6 |
2 | Arkhangelsk, ul. Severodvinskaya, 84, Apt. 9, soba. 5 |
3 | Arkhangelsk region, Severodvinsk, ul. Lenina, d. 134, apt. 85 |
4 | Arkhangelsk Region, Novodvinsk, ul. Proletarskaja, 16, Apt. 137 |
5 | Arkhangelsk, pl. Terekhin, d. 89, Apt. 13 |
Za odnose, ljudi su nekretnine:
Realty_peoples | ||
Id_peoples | Id_realty | Tip |
7 | 3 | Zajedničko zajedničko vlasništvo |
8 | 3 | Zajedničko zajedničko vlasništvo |
3 | 5 | Vlasništvo |
7 | 1 | Vlasništvo |
5 | 4 | Zajedničko vlasništvo |
6 | 4 | Zajedničko vlasništvo |
Levi spoj (Sql) - opis
Leva veza ima sledeću sintaksu:
Table_A LEFT JOIN table_B [{ON predikat } | {USING lista iz kolona }] |
I to izgleda ovako:
I ovaj izraz je preveden kao "Izaberi sve redove iz tabele A bez izuzetka, a izlazi samo linije koje odgovaraju predikatu iz tabele B. Ako u tabeli B nije bilo para za redove tablice A, onda popunite rezultirajuće Null kolone sa vrijednostima ".
Najčešće, kada se vrši leva veza, ON je specificiran, USING se koristi samo kada su imena kolona za koje je zakazana veza iste.
Levi spoj - primjeri korištenja
Uz pomoć leve veze možemo videti da li svi ljudi na listi naroda imaju nekretninu. Da biste to uradili, izvršite sledeći primer u levom pridruživanju sql:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type OD NARODA LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
I dobićemo sledeći rezultat:
Request1 | ||||||
Id | L_name | F_name | Middle_name | Rođendan | Id_realty | Tip |
1 | Ivanova | Daria | Borisovna | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolayevich | 29.01.1986 | ||
3 | Evgeniin | Alexander | Fedorovič | 30.04.1964 | 5 | Vlasništvo |
4 | Annina | Ljubav | Pavlovna | 31.12.1989 | ||
5 | Gerasimovskaya | Nadam se | Pavlovna | 14.03.1992 | 4 | Zajedničko vlasništvo |
6 | Gerasimovsky | Oleg | Albertovich | 29.01.1985 | 4 | Zajedničko vlasništvo |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 1 | Vlasništvo |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 3 | Zajedničko zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Yuryevna | 10.1.2001 | 3 | Zajedničko zajedničko vlasništvo |
Kao što vidite, Ivanova Darya, Pugin Vladislav i Annina Lyubov nemaju registrovana prava na nekretninama.
I šta bi koristili unutrašnji priključak Unutrašnjost? Kao što znate, on isključuje neusklađene linije, tako da bi tri osobe iz našeg finalnog uzorka jednostavno pale:
Request1 | ||||||
Id | L_name | F_name | Middle_name | Rođendan | Id_realty | Tip |
3 | Evgeniin | Alexander | Fedorovič | 30.04.1964 | 5 | Vlasništvo |
5 | Gerasimovskaya | Nadam se | Pavlovna | 14.03.1992 | 4 | Zajedničko vlasništvo |
6 | Gerasimovsky | Oleg | Albertovich | 29.01.1985 | 4 | Zajedničko vlasništvo |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 1 | Vlasništvo |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 3 | Zajedničko zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Yuryevna | 10.1.2001 | 3 | Zajedničko zajedničko vlasništvo |
Čini se da druga opcija ispunjava i uslove našeg zadatka. Međutim, ako nastavimo da dodamo sve više i više tabela, tri osobe iz rezultata će već nepovratno nestati. Stoga, u praksi, prilikom kombinovanja višestrukih tabela, levi i desni priključci se mnogo češće koriste od Inner pridruživanja.
Nastavljamo da razmatramo primere sa levim pridruživanjem sql. Pridružite se tablici sa adresama naših osobina:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address OD NARODA LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Sada dobijamo ne samo oblik desnice, već i adrese nekretnina:
Request1 | |||||||
Id | L_name | F_name | Middle_name | Rođendan | Id_realty | Tip | Adresa |
1 | Ivanova | Daria | Borisovna | 16.07.2000 | |||
2 | Pugin | Vladislav | Nikolayevich | 29.01.1986 | |||
3 | Evgeniin | Alexander | Fedorovič | 30.04.1964 | 5 | Vlasništvo | Arkhangelsk, pl. Terekhin, d. 89, Apt. 13 |
4 | Annina | Ljubav | Pavlovna | 31.12.1989 | |||
5 | Gerasimovskaya | Nadam se | Pavlovna | 14.03.1992 | 4 | Zajedničko vlasništvo | Arkhangelsk Region, Novodvinsk, ul. Proletarskaja, 16, Apt. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 29.01.1985 | 4 | Zajedničko vlasništvo | Arkhangelsk Region, Novodvinsk, ul. Proletarskaja, 16, Apt. 137 |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 3 | Zajedničko zajedničko vlasništvo | Arkhangelsk region, Severodvinsk, ul. Lenina, d. 134, apt. 85 |
7 | Sukhanovsky | Jurij | Andreevič | 25.09.1976 | 1 | Vlasništvo | Arkhangelsk, ul. Voronina, 7, ap.6 |
8 | Sukhanovskaya | Julia | Yuryevna | 10.1.2001 | 3 | Zajedničko zajedničko vlasništvo |
Arhangelsk regija, Severodvinsk, st. Lenjin, d. 134, q. 85 |
Lijevo se pridruže - tipična upotreba greške: invalid sto postupak
Osnovne greške na lijevom vanjskom pridruže stolova, dva:
- Pravilno izabran reda stolova za koje je izgubljen podaci.
- Gdje greške kada se koristi upit sa pridruže stolovima.
Razmislite o prva greška. Prije odluke o svakom problemu treba jasno shvatiti da je ono što mi želimo da se na kraju. U ovom primjeru gore, uzeli smo svaki jedan od ljudi, ali potpuno izgubila informacije o predmetu pod brojem 2, čiji je vlasnik nije pronađen.
Ako smo se uselili tabele u upitu u nekim mjestima, i da će početi sa «... Od Realty ostavio pridruže naroda ...» bilo koje imovine, ne bismo izgubili, nećete reći o ljudima.
Ali, ne boj se lijeve veza, pređite na punu vanjski, koji je uključen u rezultate i odgovarajuće, a ne usklađivanje linija.
Uostalom, volumen uzorka je često vrlo velika, a dodatne podatke je zapravo beskorisno. Glavna stvar - da shvatim ono što želite da biste dobili rezultat: od svih ljudi sa listom svojih raspoloživih imovine ili cjelokupna lista imovine s njihovim vlasnicima (ako ih ima).
Lijevo se pridruže - tipična upotreba greške: Zahtjev je u pravu kad stvaranje uslova u Gdje
Drugi greška je takođe povezana sa gubitkom podataka, i nisu uvijek odmah vidljivo.
Vratimo se na upit kada smo otišli preko veze dobila podatke za sve ljude i njihove postojeće imovine. Ne zaboravite sljedeće s lijevim pridruže SQL primjer:
IZ naroda LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples; |
Pretpostavimo da želimo razjasniti zahtjev i ne izlaz podataka, gdje je vrsta zakona - "Imovina". Ako se jednostavno dodati, koristeći lijevi pridruže SQL, primjer sljedeće stanje:
...
Gdje tip <> "Imovina" |
ćemo izgubiti podatke o ljudima koji nemaju imovinu, jer null vrijednost Null ne u odnosu na sljedeći način:
Query1 | ||||||
id | L_name | F_name | Middle_name | rođendan | id_realty | tip |
5 | Gerasimovsky | nada | P. | 1992/03/14 | 4 | zajedničkim dijelovima |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | zajedničkim dijelovima |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno suvlasništvu |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Ukupno suvlasništvu |
Da biste spriječili greške iz javljaju iz tog razloga, najbolje je da se odmah nakon skupa veze stanje izbor. Predlažemo da razmotre sljedeće levom pridruže sql primjer.
SELECT naroda. *, Realty_peoples.id_realty, Realty_peoples.type IZ naroda LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples i tip <> "Imovina") |
Rezultat će biti kako slijedi:
Query1 | ||||||
id | L_name | F_name | Middle_name | rođendan | id_realty | tip |
1 | ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Aleksandar | Federovich | 1964/04/30 | ||
4 | Annina |
ljubav | P. | 31.12.1989 | ||
5 | Gerasimovsky | nada | P. | 1992/03/14 | 4 | zajedničkim dijelovima |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | zajedničkim dijelovima |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno suvlasništvu |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Ukupno suvlasništvu |
Na taj način, slijedeći jednostavne lijevo pridruže SQL primjer, dobili smo listu svih ljudi, kreće dalje, jedan od ta svojstva u vlasničke / zajedničko vlasništvo.
Kao zaključak bih još jednom naglasiti da treba uzeti odgovorno uzorak bilo koje informacije iz baze podataka naglasiti. Mnogi nijanse otvorio pred nama s lijevim pridruže SQL jednostavan primjer, od kojih je jedan objašnjenje - prije nego što počnete pisati ni osnovne upita, morate pažljivo da shvatite ono što želimo da se na kraju. Sretno!
Similar articles
Trending Now