Računala, Programiranje
Lijevo se pridruže (SQL) - primjer, detaljni opis, korištenje pogreške
U svakom stvarnom relacijske baze podataka, sve informacije se distribuira na posebnom stolu. Mnogi od stolova su izneseni u komunikacijskom sustavu jedni s drugima. Međutim, uz pomoć SQL upite sasvim je moguće staviti vezu između podataka, koje nisu obuhvaćene u krug. To je učinjeno izvođenjem pridružiti vezu, koja vam omogućuje da izgradite odnos između bilo koji broj tablica, pa čak i povezati naizgled različitih podataka.
Ovaj članak će govoriti upravo o lijevi vanjski pridružiti. Prije prelaska na opis ove vrste veze, dodati u nekim tablicama baze podataka.
Priprema potrebnih tablica
Na primjer, u našoj bazi ne postoji informacija o ljudima i njihovim nekretninama. Sažetak se temelji na tri tablice: narodi (ljudi), nekretnine (nekretnina), Realty_peoples (tablice odnose, ljudi koji od onoga što imovina pripada). Pretpostavimo sljedeće podatke spremljene u tablicama naroda:
narodi | ||||
id | L_NAME | F_name | Middle_name | rođendan |
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. | 1989/12/31 |
5 | Gerasimovsky | nadati se | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | porota | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 |
Nekretnine:
nekretnina | |
id | adresa |
1 | Arkhangelsk, ul. Voronin, d, 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9. BR. 5 |
3 | Arkhangelsk regija, Severodvinsk, sv. Lenjin, d, 134, q. 85 |
4 | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Odnosi ljudi - imovinska:
Realty_peoples | ||
id_peoples | id_realty | vrsta |
7 | 3 | Ukupno zajedničko vlasništvo |
8 | 3 | Ukupno zajedničko vlasništvo |
3 | 5 | svojstvo |
7 | 1 | svojstvo |
5 | 4 | Zajednički dijelovi |
6 | 4 | Zajednički dijelovi |
Lijevo pridružiti (SQL) - Opis
Lijevo spoj ima sljedeću sintaksu:
Table_A lijevi PRIDRUŽITE table_B [{ON kazneno} | {UPORABA spisok_ s tolbtsov}] |
A shematski kao što slijedi:
I ovaj izraz prevodi kao „Odaberi sve, bez izuzetka, linija tablice A i tablice B za prikaz samo odgovarajuće retke iz predikata. Ako je pronađena stol u string stol za parove A, a zatim ispunite nastale kolone Null - vrijednosti”.
Najčešće, kada je napustio veza naznačeno, korištenjem koristi samo kada su nazivi stupaca, koji se planira uspostaviti vezu su isti.
Lijevo se pridruže - primjeri korištenja
Uz priključak s lijeve strane možemo vidjeti, svi ljudi s popisa ako postoji naroda imovine. Da biste to učinili u lijevo pridružiti SQL upita primjer:
SELECT naroda. *, Realty_peoples.id_realty, Realty_peoples.type S Peoples lijevi PRIDRUŽITE Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Sa sljedećim rezultatima:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | rođendan | id_realty | vrsta |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Aleksandar | Federovich | 1964/04/30 | 5 | svojstvo |
4 | Annina | ljubav | P. | 1989/12/31 | ||
5 | Gerasimovsky | nadati se | P. | 1992/03/14 | 4 | Zajednički dijelovi |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Zajednički dijelovi |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 1 | svojstvo |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Ukupno zajedničko vlasništvo |
Kao što vidimo, Ivanova Darja Pugin Vladislav i Anninoy Lyubovi Ne registriran prava nekretnina.
A što bi smo dobili, koristite unutarnji pridružiti Unutarnja pridružiti? Kao što znate, to isključuje nepodudarne redaka, pa tri iz našeg konačnog uzorka jednostavno bi pao:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | rođendan | id_realty | vrsta |
3 | Evgenin | Aleksandar | Federovich | 1964/04/30 | 5 | svojstvo |
5 | Gerasimovsky | nadati se | P. | 1992/03/14 | 4 | Zajednički dijelovi |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Zajednički dijelovi |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 1 | svojstvo |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Ukupno zajedničko vlasništvo |
Čini se da je druga verzija je također ispunjava uvjete našeg problema. Međutim, ako počnemo priključiti na drugu, a drugi stol, tri osobe iz rezultata već nepovratno nestao. Stoga, u praksi, kada se kombiniraju više tablica mnogo češće koriste lijevi i desni priključak od unutarnjeg pridružiti.
Hoće li i dalje gledati na lijevo pridružiti sql primjera. Pričvrstite stol s adresama naših kuća:
SELECT naroda. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address IZ naroda LIJEVO PRIDRUŽITE Realty_peoples NA Peoples.id = Realty_peoples.id_peoples LIJEVO PRIDRUŽITE Realty NA Realty.id = Realty_peoples.id_realty |
Sada smo dobili ne samo neku vrstu zakona, ali i adresu nekretnine:
Query1 | |||||||
id | L_NAME | F_name | Middle_name | rođendan | id_realty | vrsta | adresa |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Aleksandar | Federovich | 1964/04/30 | 5 | svojstvo | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | ljubav | P. | 1989/12/31 | |||
5 | Gerasimovsky | nadati se | P. | 1992/03/14 | 4 | Zajednički dijelovi | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Zajednički dijelovi | Arkhangelsk regija, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno zajedničko vlasništvo | Arkhangelsk regija, Severodvinsk, sv. Lenjin, d, 134, q. 85 |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 1 | svojstvo | Arkhangelsk, ul. Voronin, d, 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Ukupno zajedničko vlasništvo |
Arkhangelsk regija, Severodvinsk, sv. Lenjin, d, 134, q. 85 |
Lijevo se pridruže - tipičnu uporabu pogreške: nevažeći stol postupak
Osnovne pogreške učinjene na lijevoj vanjskog pridružiti tablice, dva:
- Pravilno odabrani redoslijed stolova za koje se podaci izgubljeni.
- Gdje pogreške prilikom korištenja upit s pridružiti tablice.
Razmislite prvi pogrešku. Prije donošenja odluke bilo kakvih problema treba jasno razumjeti da ono što želimo dobiti na kraju. U ovom primjeru, uzeli smo svaki od ljudi, ali potpuno izgubio podatke o objektu pod brojem 2, čiji je vlasnik nije pronađen.
Ako smo se preselili tablice u upitu u nekim mjestima, i da će početi sa «... Iz nekretnina napustio pridružiti naroda ...» bilo jedno svojstvo, ne bismo izgubili, nećete reći o ljudima.
No, nemojte se bojati lijeve veze, prebaciti na puni vanjski, koji je uključen u rezultate, te usklađivanje, a ne prema zadanim linijama.
Uostalom, volumen uzorka je često vrlo velika, a dodatni podaci zapravo beskoristan. Glavna stvar - da shvatiti što želite da biste dobili rezultat: od svih ljudi s popisom svojih raspoloživih dobara ili cijeli popis imovine njihovim vlasnicima (ako ih ima).
Lijevo se pridruže - tipičnu uporabu pogreške: Zahtjev je ispravan prilikom određivanja uvjeta u WHERE
Druga greška je također povezan s gubitkom podataka, i nisu uvijek vidljivi odmah.
Vratimo se na upit kad smo otišli preko veze dobila podatke za sve ljude i njihove postojeće imovine. Zapamtite sljedeće s lijeve pridružiti SQL primjer:
S Peoples lijevi PRIDRUŽITE Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Pretpostavimo da želimo razjasniti zahtjev i ne emitira podatke, gdje je vrsta zakona - „vlasništvo”. Ako mi jednostavno dodati, koristeći napustio pridružiti SQL, primjer sljedećim uvjetima:
...
Gdje tipa <> „nekretnine” |
izgubit ćemo podatke o ljudima koji nemaju imovinu, jer je nulta vrijednost Null ne u odnosu na sljedeći način:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | rođendan | id_realty | vrsta |
5 | Gerasimovsky | nadati se | P. | 1992/03/14 | 4 | Zajednički dijelovi |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Zajednički dijelovi |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Ukupno zajedničko vlasništvo |
Kako bi spriječili pogreške iz pojavio iz tog razloga, najbolje je da postavite uvjet za izbor odmah nakon veze. Predlažemo da razmislite s lijeve sljedeće pridružiti SQL primjer.
SELECT naroda. *, Realty_peoples.id_realty, Realty_peoples.type IZ naroda LIJEVO PRIDRUŽITE Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples i tip <> "vlasništvo") |
Rezultat će biti sljedeći:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | rođendan | id_realty | vrsta |
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. | 1989/12/31 | ||
5 | Gerasimovsky | nadati se | P. | 1992/03/14 | 4 | Zajednički dijelovi |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | Zajednički dijelovi |
7 | Sukhanovskaya | porota | A. | 1976/09/25 | 3 | Ukupno zajedničko vlasništvo |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Ukupno zajedničko vlasništvo |
Dakle, slijedeći jednostavne lijevo pridružiti SQL primjer, dobili smo popis svih ljudi, kreće dalje, jedan od tih nekretnina u kapital / suvlasništva.
Kao zaključak Želio bih naglasiti još jednom da se uzorak bilo kakve informacije iz baze podataka treba uzeti odgovorno. Mnogi nijanse otvaraju pred nama s lijeve strane pridružiti SQL jednostavan primjer, od kojih je jedan objašnjenje - prije nego što počnete pisati čak i osnovne upit, morate pažljivo razumjeti ono što želimo dobiti na kraju. Sretno!
Similar articles
Trending Now