Levo pridružitev (SQL) - primer, podroben opis, napake pri uporabi

V vsaki pravi relacijski bazi podatkov so vse informacije razdeljene v ločene tabele. Mnoge tabele imajo med seboj fiksne povezave v shemi. Vendar pa je s pomočjo SQL poizvedb mogoče povsem povezati podatke, ki niso vključeni v shemo. To se doseže z dokončanjem povezave za operacijo povezovanja, ki vam omogoča, da zgradite odnose med poljubnim številom tabel in povežete celo na videz razpršene podatke. V tem članku bomo govorili posebej o levi zunanji povezavi. Preden nadaljujete z opisom te vrste povezave, bomo v bazo podatkov dodali nekaj tabel.

Priprava zahtevanih tabel

Recimo, da naša baza podatkov vsebuje informacije o ljudeh in njihovih nepremičninah. Osnovne informacije temeljijo na treh tabelah: Ljudje (ljudje), Realty (nepremičnine), Realty_peoples (tabela z odnosi, na katero od ljudi, ki jim pripada). Recimo, da so v tabelah shranjeni naslednji podatki:




Ljudje



id



) L_name



F_name



Middle_name



Rojstni dan




Borisovna


1



Ivanova



Darina 46
16072000



2



Pudin



Vladislav

)

Nikolayevich



29011986



3



Eugenein



Alexander



Fedorovich



30041964



4



Annina


)
Ljubezen



Pavlivna





Nadežda (



120)


Pavlovna



14031992



6







Albertovič 151) 7



Sukhanovski



Jurij



Andriyovich


)



Julia



25091976





Yuriivna



01102001

Nepremičnine:

Realty

)



naslov



1


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



2



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



3



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



4



Regija Arkhangelsk, Novodvinsk r., St. Proletarskaya, 16 sq. M. 137



5



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

Povezava ljudje - nekretnine:

Realty_peoples



id_peoples



id_realty 254)

type



7



3



Splošna skupna last





Splošno skupno last






3



5



Lastništvo



7

299)
1



nepremičnine



5



4

)

Skupna delna lastnina




Levo združevanje (Sql) - opis





]
Leva povezava ima naslednjo sintakso:

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

In izgleda shematično:
In ta izraz je preveden kot "Izberi vse brez izjeme, vrstica iz tabele, in A v tabeli B, ki izide le ujemanje niza predikatov." Če tabela ne najde para za vrstice v tabeli A, potem izpolnite nastale vrednosti stolpca Null. "


Najpogosteje, ko se izvrši leva povezava, se ON ONING uporablja samo, če so imena stolpcev, za katera je načrtovana povezava, sovpadala.

Levi pridruži - primeri uporabe

S pomočjo leve povezave lahko vidimo, ali imajo vsi ljudje na seznamu Ljudje nepremičnine. Če želite to narediti, naredite naslednje v levem primeru sql poizvedbe:

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

In dobimo naslednji rezultat:

Query1



id



L_name



F_name



Middle_name



Rojstni dan



id_realty
376)

tip



1



Ivanov



Darina
)


)


2



Pugin



Vladislav



Nikolayevich



29011986















Evga Devet



Alexander



Fedorovich



30041964



5


462) Lastništvo



4



Annina



Ljubezen







31121989





















6


14031992



4






Gerasimovsky



Oleg



Albertovich


)
29011985



4



Skupna delna lastnina



7
552)

Sukhanovsky



Yuriy



Andriyovich



25091976
)









Yuriy



Andriyovich



25091976



)



Splošna skupna lastnina



8



Sukhanovskaya

613)
Julia







01102001



3



Splošna skupna lastnina

Kot vidimo, Ivanova Darija, Pugina Vladislav in Annina Lyubov nimajo registriranih pravic do nepremičnin. In kaj bi dobili s povezavo Inner join? Kot veste, izključuje neustrezne vrstice, zato so trije ljudje v našem končnem vzorcu preprosto izpadli:

Query1



id



L_name



F_name








666) 3



Eugenein



Alexander



Fedorovich


)
30041964



5



nepremičnine



5





Pavlovna



14031992
712)

4



Skupna zasebna lastnina



6



Gerasimovski



29011985














Skupno delno lastništvo



7


764)

25091976



)




7



Sukhanovsky



Yuriy



Andriyovich



25091976



3
800)

Splošna skupna lastnina



8



Sukhanovska



















01102001



Splošna skupna lastnina

Zdi se, da druga možnost enako izpolnjuje pogoje naše naloge. Če pa še dodamo še eno tabelo, bodo trije rezultati nepovratno izginili. Zato je v praksi, ko kombiniramo veliko tabel, levo in desno spojino veliko pogosteje uporabljeno kot Inner join.
Še naprej si oglejte primere iz levega pridruženega sql. Priložite tabelo z naslovi naših objektovNepremičnine:.

SELECT Peoples *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address IZ Ljudske LEVO PRIDRUŽITE Realty_peoples NA Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty NA Realty.id = Realty_peoples.id_realty (836 )
Zdaj smo dobili ne le prave vrste, ampak obravnava tudi lastnosti:

Zapros1



id vrednost



L_name



F_name



Middle_name



rojstva

(862 )
id_realty



tipa



naslov



1



Ivanova



Darja



B.



16.072.000

(894 )












2



Pugin



Vladislav



N.



29.011.986















3

(942 )
Evhenyn



Alexander



, F.



30041964



5



nepremičnine



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



4



ANNINO



Ljubezen



P.



31.121.989















5



Herasymovskaya



Hope



, P.



14031992



, 4



lastništvo Skupni delež
(1029 )

Arkhangelsk regijo, str. Novodvynsk str. Proletarskaya, 16 sq. M. 137



6



Gerasimovka



Oleg



Albertovich












29011985

Regija Arkhangelsk, mesto Novodvinsk, ul. Proletarskaya, 16 sq. M. 1076


7



Sukhanovsky



Yuriy


1079)



25091976



3




Splošne skupne nepremičnine



Arkhangelska regija, Severodvinsk, vul. Lenin, 134 m2 Sukhanovski



Jurij







1111) Andreevich



25091976



1



nepremičnine


)
Arkhangelsk, st. Voronina, 7 kv. 6



8



Sukhanovskaya



Julia


1143) Yuriivna



01102001



3








Arkhangelsk regija, Severodvinsk, vul. Lenin, 134 m2 85

Levi priključek - tipične napake pri uporabi: napačna naročanje tabel

Glavne dovoljene napake v levi zunanji povezavi tabele sta dve:
  • Nepravilno izbrani vrstni red tabel, zaradi katerega izgubljenih podatkov.
  • Napake pri uporabi Where v poizvedbi s spajanjem tabel. Razmislite o prvi napaki. Pred reševanjem problema je treba jasno razumeti, kaj točno želimo na koncu. V zgornjem primeru smo vse pripeljali do ene same osebe, vendar smo popolnoma izgubili podatke o predmetu pod številko 2, katerega lastnik nenajdeno.
    Če postavimo tabele v poizvedbo na kraje, in začnemo z "Od Realty se pridruži ljudstvom", ne bomo izgubili nobenih nepremičnin, ki jih ne bomo povedali o ljudeh.
    Vendar pa ni smiselno, strah pred levo povezavo, premakniti se na celotno zunanjo, ki bo posledično vključevala in sovpadala, in se ne ujemata s črtami. Navsezadnje je obseg vzorcev pogosto zelo velik, nepotrebni podatki pa dejansko niso nič. Glavna stvar je, da ugotovite, kaj želite kot rezultat: vsi ljudje s seznamom lastnosti, ki so jim na voljo, ali seznam vseh lastnosti z njihovimi lastniki (če obstajajo).

    Levo združevanje - tipične napake pri uporabi: pravilnost poizvedbe pri nastavitvi izbirnih pogojev

    Drugi problem je izguba podatkov in ni vedno takoj očitna. Vrnili se bomo na prošnjo, ko smo s pomočjo leve povezave dobili podatke o vseh ljudeh in njihovi lastnini. Ne pozabite naslednje z uporabo levega primerka pridružite sql:

    FROM PEOPLE LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

    Recimo, da želimo pojasniti poizvedbo in ne prikazati podatkov, kjer je vrsta prava »lastnost«. Če preprosto dodamo levo povezavo sql, sledi naslednji pogoj:

    Kje je tip & lt; & gt; "Lastnost"

    potem bomo izgubili podatke o ljudeh, ki nimajo nepremičnin, ker se prazna vrednost Null ne primerja, kot sledi:

    Query1



    id








    F_name



    srednji_



    )








    Gerasimovska



    Hope



    P.



    14.031.992



    4



    lastništvo Skupni delež



    6



    Gerasimovka



    , Oleg



    Albertovich



    29.011.985



    4



    Skupno delež lastnost



    7



    Suhanovskyy



    George



    A.



    25.091.976



    3



    Celotna skupno lastništvo


    (1 294) 8



    Suhanovskaya



    Julija



    Y.

    (1309 )
    01102001



    3



    Total skupno lastništvo

    da bi preprečili napake, da so razlog, da je najbolje, da se posvetujte pogoj izbire takoj na povezavi. Predlagamo, da razmislimo o naslednjem iz levega primera pridružite sql.

    Izbira ljudska *, Realty_peoples.id_realty, Realty_peoples.type IZ ljudskim LEVO JOIN Realty_peoples O (Peoples.id = Realty_peoples.id_peoples IN vrsta & lt; & gt; "lastnina").

    Posledica bo kot sledi:

    Zapros1



    iD vrednost



    L_name



    F_name (1339






    rojstni dan



    id_realty



    type



    1



    Ivanov



    Darin


    (1370 ) B.



    16.072.000










    (1386 ) 2



    Pugin



    Vladyslav



    N.



    29.011.986







    Eugenein












    30041964





    )





    4








    ljubezen
    1452)

    Pavlovna



    31121989








    1468)

    5



    Gerasimovskaya



    Nadiya



    Pavlovna
    )


    14031992



    4







    Oleg









    Gerasimovski 1510) Albertovich



    29011985



    4



    Skupna delna lastnina





    Andriyovich






    1540)

    25091976



    3



    Splošna skupna last



    8









    ) 01102001


    (15 74) 3



    Splošna skupna lastnina

    Tako smo s preprostim primerom levega pridruženega sql-a dobili seznam vseh ljudi, ki so predstavili še enega, od tega nepremičnine v delno /skupno lastništvo.
    Na koncu bi rad še enkrat poudaril, da je treba izbor informacij iz baze podatkov obravnavati odgovorno. Pred nami so se odprle številne nianse z uporabo levega pridruženega sql preprost primer,razlaga katere - preden začnemo sestavljati celo osnovno zahtevo, moramo temeljito razumeti, kaj želimo dobiti kot rezultat. Vso srečo!
  • Sorodne publikacije