Lijevo pridruživanje (SQL) - primjer, detaljan opis, pogreške u korištenju

U bilo kojoj stvarnoj relacijskoj bazi podataka, sve informacije se distribuiraju u odvojenim tablicama. Mnoge tablice imaju fiksne veze u shemi jedna s drugom. Međutim, uz pomoć SQL upita moguće je povezati podatke koji nisu uključeni u shemu. To se postiže dovršavanjem povezivanja operacije povezivanja, što vam omogućuje da izgradite odnose između bilo kojeg broja tablica i povežete čak i naizgled razbacane podatke. U ovom članku ćemo govoriti konkretno o lijevoj vanjskoj vezi. Prije nego što nastavimo s opisom ove vrste veze, dodat ćemo neke tablice u bazu podataka.

Priprema potrebnih tablica

Pretpostavimo da naša baza podataka sadrži podatke o ljudima i njihovim nekretninama. Osnovne informacije temelje se na trima tablicama: Ljudi (ljudi), Realty (nekretnine), Realty_peoples (tablica s odnosima, na koju od osoba kojima pripada imovina). Pretpostavimo da su sljedeći podaci u tablicama pohranjeni od strane ljudi:




Ljudi



id



) L_name



F_name



Middle_name



rođendan




Borisovna


1



Ivanova



46
16072000



2







Vladislav

)

Nikolayevich



29011986



3



Eugenein



Alexander



Fedorovich



30041964



4



Annina


)
Ljubav



Pavlivna









120)


Pavlovna



14031992



6







Albertovich 151) 7



Sukhanovski



Jurij



Andriyovich


)



Julia



25091976





Yuriivna



01102001

Nekretnine:

Nekretnine





adresa



1


208) Arkhangelsk, st. Voronina, 7 kv. 6







Arkhangelsk, st. Severodvinsk, 84 m² 9 soba 5



3



Arhangelska regija, Severodvinsk, vul. Lenjin, 134 m2. 85



4

Proletarskaya, 16 sq. 137



5



r. Arkhangelsk, pl. Teriokhin, 89 m2. 13

Veza ljudi - nekretnine:

Realty_peoples



id_peoples



id_realty
254)

type



7



3









opće zajedničko vlasništvo






3



5



Vlasništvo



7

299)
1



Nekretnine



5



4

)

Zajednička parcijalna imovina




Lijevo spajanje (sql) - opis





]
Lijeva veza ima sljedeću sintaksu:

Tablica_ LEFT JOIN table_B [{ON predikat} | {USING list_stolbs}]

I izgleda ovako shematski:
I ovaj izraz je preveden kao "Odaberi sve bez iznimke, red iz tablice, a A u tablici B samo izlaz podudaranja niza predikata. Ako tablica ne pronađe par za retke u tablici A, ispunite dobivene vrijednosti stupca Null. "


Najčešće, kada se izvršava lijeva veza, ON USING se koristi samo kada se nazivi stupaca za koje se veza planira podudara.

Lijevo pridruživanje - primjeri uporabe

Uz pomoć lijeve veze vidimo da li svi ljudi na popisu Naroda imaju nekretnine. Da biste to učinili, učinite sljedeće u lijevom spojenom primjeru sql upita:

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type OD LJUDI LEFT JOIN Realty_peoples ON

Dobivamo sljedeći rezultat:

Query1



id



L_name



F_name








rođendan



id_realty
376)

tip



1



Ivanov



)


)


2








Vladislav



Nikolayevich



29011986















Evga Devet



Alexander







30041964



5


462) Vlasništvo



4



Annina



Ljubav


)




31121989





















6


14031992



4






Gerasimovski



Oleg



Albertovich


)
29011985



4







7
552)

Sukhanovsky



Yuriy



Andriyovich



25091976
)









Yuriy



Andriyovich



25091976



)



Opće zajedničko vlasništvo



8



Sukhanovskaya

613)
Julia



Yuriivna



01102001



3



Opće zajedničko vlasništvo

Kao što vidimo, Ivanova Darija, Pugina Vladislav i Annina Lyubov nemaju registrirano pravo na nekretninama. A što bismo dobili koristeći Inner join vezu? Kao što znate, ona isključuje nepodudarne linije, tako da su tri osobe u našem konačnom uzorku jednostavno odustale:

Query1



id



L_name



F_name








666) 3



Eugenein



Alexander



Fedorovich

)
30041964



5



Objekti



5





Pavlovna



14031992
712

4



Zajednički privatni posjed



6



Gerasimovsky



29011985














Zajedničko djelomično vlasništvo



7


764)

25091976



)




7



Sukhanovski



Yuriy



Andriyovich



25091976




800)

Opće zajedničko vlasništvo



8



Sukhanovskaya












Yuriivna



01102001



Opće zajedničko vlasništvo

Čini se da druga opcija jednako ispunjava uvjete našeg zadatka. Međutim, ako nastavimo dodavati još jednu tablicu, tri rezultata će nepovratno nestati. Stoga se u praksi, kada se kombinira mnogo tablica, lijevi i desni spoj mnogo češće koriste od Inner spoja.
Nastavite prikazati primjere s lijevog pridruženog sql-a. Priložite tablicu s adresama naših objekataSvojstvo.

SELECT Peoples *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address OD narodi ostavili PRIDRUŽITE Realty_peoples ON Peoples.id = Realty_peoples.id_peoples lijevi PRIDRUŽITE Realty O Realty.id = Realty_peoples.id_realty (836 )
Sada smo dobili ne samo pravo vrste, ali također rješava svojstva:

Zapros1



id vrijednost



L_NAME



F_name



Middle_name



rođenja

(862 )
id_realty



tip



adresu



1



Ivanova



Darja



B.



16072000


)












2
,
,

Pugin



Vladislav



, N.



29011986















3

(942 )
Evhenyn



Alexander



F.



30041964



5



objekta



d. Arkhangelsk, pl. Teriokhin, 89 m2. 13



4



Annino



Love



P.



31121989










(







, P.



14031992



4



vlasništvo Zajednički udio
(1029 )

Regija Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16 sq. 137



6



Gerasimovka



Oleg



Albertovich












29011985

Regija Arkhangelsk, grad Novodvinsk, ul. Proletarskaya, 16 sq. 1076


7



Sukhanovski



Jurij


1079)



25091976



3








Arkhangelsk region, Severodvinsk, vul. Lenjin, 134 m2. Sukhanovsky



Jurij







1111) Andreevich



25091976



1



Nekretnine


)
Arkhangelsk, st. Voronina, 7 kv. 6



8



Sukhanovska



Julija


1143) Yuriivna



01102001



3



Opći poslovi



Arkhangelsk region, Severodvinsk, vul. Lenjin, 134 m2. 85

Lijevo spajanje - tipične pogreške uporabe: netočna narudžba tablice Glavne pogreške dopuštene u lijevom vanjskom priključku tablice su dvije:
  • Neispravno odabran redoslijed tablica, zbog kojeg izgubljeni podaci.
  • Pogreške pri korištenju Gdje u upitu s tablicama spajanja. Razmotrimo prvu grešku. Prije rješavanja problema potrebno je jasno razumjeti što točno želimo dobiti na kraju. U gornjem primjeru, sve smo doveli do jedne osobe, ali smo potpuno izgubili podatke o objektu pod brojem 2 čiji vlasnik nijeje pronađen.
    Ako stavimo tablice u upit na mjestima, a mi bismo počeli s "Od Realty pridružiti narodima", ne bismo izgubili nikakvu nekretninu, što nećemo reći o ljudima.
    Međutim, nije vrijedno, preplašiti se lijeve veze, premjestiti se na cjelokupni vanjski, koji će kao rezultat uključiti i podudarati se, i ne podudaraju se s crtama. Uostalom, volumen uzoraka je često vrlo velik, a nepotrebni podaci zapravo ne predstavljaju ništa. Glavno je da shvatite što želite kao rezultat: svi ljudi koji imaju popis svojstava koji su im na raspolaganju, ili popis svih nekretnina s njihovim vlasnicima (ako ih ima).

    Lijevo spajanje - tipične pogreške upotrebe: ispravnost upita kada su postavljeni uvjeti odabira Drugi problem je gubitak podataka i nije uvijek odmah vidljiv. Vratit ćemo se na zahtjev, kada smo uz pomoć lijeve veze primili podatke o svim ljudima i njihovoj imovini. Zapamtite sljedeće uz korištenje lijevog priključka sql primjer:

    OD LJUDI LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

    Pretpostavimo da želimo razjasniti upit i ne prikazati podatke, gdje je vrsta prava "vlasništvo". Ako jednostavno dodamo, pomoću lijevog pridruženog sql-a, sljedeći uvjet:

    Gdje je vrsta & lt; & gt; "Svojstvo"

    tada ćemo izgubiti podatke o ljudima koji nemaju nekretninu, jer se prazna Null vrijednost ne uspoređuje na sljedeći način:

    Query1



    id



















    )








    Gerasimovskaja





    14031992



    4


    1233)
    Uobičajeno djelomično vlasništvo



    6



    Gerasimovski



    Oleg









    29011985



    4



    Objekat



    7



    Sukhanovsky



    Jurij


    1278)



    25091976



    3





    (1 294) 8



    Sukhanovskaya



    Julia



    Yuriivna





    Da biste spriječili pojavu pogrešaka iz tog razloga, najbolje je pitati uvjet odabira odmah na spoju. Predlažemo da razmotrimo sljedeće iz lijevog pridružite sql primjer.

    SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type OD LJUDI LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples I upišite
    Query1



    id



    L_name



    F_name
    )






    rođendan



    id_realty



    tip



    1



    Ivanov



    Darina



    ) Borisovna



    16072000











    ) 2



    Pugin



    Vladislav



    Nikolayevich



    29011986







    Eugenein












    30041964





    )





    4








    1452)

    Pavlovna



    31121989








    1468)

    5



    Gerasimovskaya



    Nadiya



    Pavlovna
    )


    14031992



    4







    Oleg









    gerasimovski 1510) Albertovich



    29011985



    4



    Zajednička djelomična imovina





    Andriyovich






    1540)

    25091976



    3



    Opće zajedničko vlasništvo



    8









    ) 01102001


    (15 74) 3



    Opće zajedničko vlasništvo

    Dakle, izvođenjem jednostavnog primjera lijevog pridruživanja sql, dobili smo popis svih ljudi, donoseći još jedan, od kojih su nekretnine u djelomično /zajedničko vlasništvo.
    u omjeru
    Kao zaključak, želio bih još jednom naglasiti da se odabir informacija iz baze podataka treba tretirati odgovorno. Mnoge nijanse otvorene pred nama uz korištenje lijevog pridružiti sql jednostavan primjer,objašnjenje od kojega - prije nego što počnemo sastavljati čak i elementarni zahtjev, treba temeljito razumjeti što zapravo želimo dobiti kao rezultat. Sretno!

  • Povezane publikacije