Ľavý spoj (SQL) - príklad, podrobný popis, chyby použitia

V každej skutočnej relačnej databáze sú všetky informácie distribuované v samostatných tabuľkách. Mnohé z tabuliek majú medzi sebou pevné odkazy v schéme. Pomocou dotazov pre šablóny však je celkom možné prepojiť údaje, ktoré nie sú zahrnuté do schémy. To sa dosiahne dokončením pripojenia pripojenia, ktoré vám umožní vytvoriť vzťahy medzi ľubovoľným počtom tabuliek a pripojiť aj zdanlivo rozptýlené dáta. V tomto článku budeme hovoriť konkrétne o ľavom vonkajšom pripojení. Predtým, než začneme popis tohto typu pripojenia, pridáme do databázy niekoľko tabuliek.

Príprava požadovaných tabuliek

Predpokladajme, že naša databáza obsahuje informácie o ľuďoch a ich nehnuteľnostiach. Základné informácie sú založené na troch tabuľkách: ľudia (ľudia), nehnuteľnosti (realitné), realty_peoples (tabuľka s vzťahmi, ku ktorým ľuďom patrí majetok). Predpokladajme, že tabuľky ukladá tieto dáta na ľudí:




, Peoples



hodnota id


(15 ) L_name



F_name



Middle_name



Dátum narodenia



Borisovna


1


Ivanova
46)
, 16072000



, 2



Pugin



Vladyslav
(61 )

, N.



, 29011986



3



Evhenyn



Alexander



F



, 30041964



4



Annina

(98 )
Láska



Pavlína





Nadežda



120)


Pavlovna



14031992






Albertovič 151) 7



Suhanovskyy



George



A.

(166



Julia



25091976




Yu



01102001

Nehnuteľnosť:

nehnuteľností
(193 )







1

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



2



Arkhangelsk, st. Severodvinsk, 84 m2 9 izieb 5



3



Arkhangelsk, Severodvinsk, vul. Lenin, 134 m² 85



4



región Arkhangelsk, Novodvinsk r. Proletarskaya, 16 m2 137



5



р Arkhangelsk, pl. Teriokhin, 89 m2 13

U ľudí vzťahy - Typ nehnuteľnosti:

Realty_peoples



id_peoples



id_realty

,
,
, typ



7



3



Celkom spoločnom vlastníctve





Všeobecné spoločné vlastníctvo






3



, 5



objektu



7



1



Reality



5



4
(314 )

Spoločné čiastočné vlastníctvo



6



4



vlastníctvo spoločný podiel

, ľavý pripojiť (SQL) - opis [331 ]
Na ľavej pripojenie má nasledujúcu syntax:

Table_A ľavý REGISTRÁCIE table_B [{ON predikátu} | POUŽITIE spysok_stolbtsov {}]
,
, a schematicky takto:
a tento výraz prekladá ako "Vybrať všetko bez výnimky riadok tabuľky a tabuľka priviesť iba zodpovedajúce predikát on-line. Ak tabuľka nenájde pár pre riadky v tabuľke A, vyplňte výsledné hodnoty stĺpcov Null. "


, často pri vykonávaní ľavej pripojení ukazuje na využitie použiť len pri názvy stĺpcov, ktoré plánované pre pripojenie zhodujú.

Left pripojiť - príklady

s pripojením naľavo vidíme ak všetci ľudia v zozname národov je realitná. K tomu, nasledovať príklad vľavo spojiť sql dotazu:

SELECT * Peoples, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples ;.

a získať nasledujúce výsledky:
,
Zapros1



id hodnota



L_name



F_name



Middle_name



Dátum narodenia



id_realty

,
,
, typ



1



Ivanova



Darya (391 )


)


2



Pugin



Vladislav



M.



29011986











3



Evga Deväť



Alexander



, F



30041964



, 5



objektu



4



Annino



Láska

(477 )
, P.



31121989









(493 )
, 5



Herasymovskaya



nádeje



, P.



14031992



4



vlastníctvo spoločný podiel



6 (523 )


Gerasimovka



Oleg



Albertová

(537 )
29011985



4



vlastníctvo Spoločný podiel



7



Suhanovskyy



George



A.



25091976 (567 )


1



objektu



7



Suhanovskyy



George



A.



25091976


(598 ) 3



Celkový spoločný majetok



8



Suhanovskaya


,
Julia



Yu



01102001



3



Celkový spoločný majetok

Ako je možno vidieť v Ivanov Darya, Puhyna Vladislav Annino a milovať žiadne práva registrovaný majetok. Čo sme používali prepojenie vnútornej pripojiť? Ako viete, že vylučuje nesúhlasné linky, a traja ľudia z nášho konečnej vzorky proste spadol:

Zapros1



hodnota id



L_name



F_name








666) 3



Evhenyn



Alexander



, F

(681 )
30041964



, 5



objektu
,
,
,
5
,


Herasymovskaya



nádeje



, P.



14031992

,
,
4



vlastníctvo spoločný podiel



6



Gerasimovka



Oleg



Albertová



29011985 (7 39)


4



vlastníctvo spoločný podiel



7





25091976



)
1



objektu



7



Suhanovskyy



George



A.



25091976



3



Celkový spoločný majetok



8



Suhanovskaya



Julia



Yu



01102001



3



Celkový spoločný majetok

Zdá sa, že druhá možnosť stretnúť len náš problém. Ak však budeme pokračovať v pridávaní ďalšej tabuľky, potom tri z výsledkov budú nenávratne miznú. Preto v praxi sa pri kombinácii mnohých tabuliek používajú ľavé a pravé zlúčeniny oveľa bežnejšie než vnútorné spojenie.
Pokračovať v zobrazovaní príkladov z ľavého pripojenia sql. Priložte tabuľku s adresami našich objektovTyp nehnuteľnosti :.

SELECT * Peoples, Realty_peoples.id_realty, Realty_peoples.type, Realty.address FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty (836 )
Teraz dostaneme nielen správny druh, ale tiež rieši vlastnosti:

Zapros1



id hodnota



L_name



F_name



Middle_name



Dátum narodenia

(862 )
id_realty



typu



adries



1



Ivanova



Darya



B



16072000

(894 )












2



Pugin



Vladislav



, N.



29011986















3

(942 )
Evhenyn



Alexander



, F



30041964



, 5



objektu



, d. Arkhangelsk, pl. Terekhin, d. 89 metrov štvorcových. 13



4



Annino



Láska



, P.



31121989















, 5
,


Herasymovskaya



, Hope



, P.



14031992



4
,


vlastníctvo kmeňovú akciu
(1029 )

Arkhangelsk oblasť, s. Novodvynsk str. Proletárov, d. 16 metrov štvorcových. 137



6



Gerasimovka



Oleg



Albertová



29011985



4
,


vlastníctvo kmeňovú akciu



Arkhangelsk, Novodinsk, st. Proletarskaya, 16 m2 137



, 7



Suhanovskyy



George



, A.



25091976



, 3



Celkom spoločnom vlastníctve



región Arkhangelsk, Severodvinsk, vul. Lenin, 134 m² 85



, 7



Suhanovskyy



George



, A.



25091976



, 1



objektu

(1126 )
Arkhangelsk, st. Voronina, 7 kv. 6



, 8



Suhanovskaya



Julia



Y.



01102001



3
,


Total spoločnom vlastníctve



región Arkhangelsk, Severodvinsk, vul. Lenin, 134 m² 85
,
,

Left pripojiť - používať bežné chyby: Neplatné procedúra tabuľku

Hlavné chyba je dovolené v ľavej vonkajšie spojenie tabuliek, dve:
  • False zvolený postup tabuľky, ktoré strate údajov.
  • Chyby pri použití Kde v dopyte s tabuľkami zlúčenia.
  • Zvážte prvú chybu. Pred vyriešením problému je potrebné jasne pochopiť, čo presne chceme získať nakoniec. Vo vyššie uvedenom príklade sme všetkých priviedli k jednej osobe, ale úplne stratili informácie o objekte pod číslom 2, ktorého vlastník nemábol nájdený.
    Ak sme sa presťahovali do tabuľky v dotaze miestach a začne s «Z ľava nehnuteľností pripojiť Peoples» nie je vlastnosť by sme stratili nemožno povedať o ľuďoch.
    Avšak, to nie je nutné, sa obávať, ľavé pripojenie, prepnutie na celú vonkajšiu, ktoré zahŕňajú výsledok a stretnutia a nezodpovedajú linky. Koniec koncov, objem vzoriek je často veľmi veľký a zbytočné údaje nemajú naozaj nič spoločné. Dôležité je - pochopiť, čo chcete získať výsledok, všetci ľudia so zoznamom ich dostupného majetku alebo zoznam všetkých vlastností s ich vlastníkov (ak existuje).

    Left pripojiť - využívanie bežných chýb, správne dopytu pri stanovovaní podmienok Stanovenie

    Ďalší problém spojený so stratou dát, a nie vždy na prvý pohľad zrejmé. Vrátime sa k žiadosti, keď sme pomocou ľavého spojenia obdržali údaje o všetkých ľuďoch a ich majetku. Pamätať nasledujúce pomocou LEFT JOIN SQL príklad:

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

    Predpokladajme, že chceme vysvetliť dotaz a nezobrazovať údaje, kde typ zákona je "Vlastnosť". Ak jednoducho pridáme pomocou ľavej spojenia sql nasledujúcu podmienku:

    Kde typ & lt; & gt; "Vlastníctvo"

    , môže dôjsť k strate dát na ľudí, ktorí nemajú majetok, keďže prázdny Null nie je v porovnaní takto:

    Zapros1



    ID hodnotu



    L_name



    F_name



    Middle_name


    (1198 ) narodenín



    id_realty



    typu



    , 5
    ,


    Gerasimovská



    , Hope



    , P.



    14031992



    , 4



    vlastníctvo kmeňovú akciu



    6



    Gerasimovka



    Oleg



    Albertová



    29011985



    , 4



    spoločný podiel vlastníctva



    , 7



    Suhanovskyy



    George



    , A.



    25091976



    3



    Total spoločnom vlastníctve


    (1 294) 8



    Suhanovskaya



    Julia



    Y.

    (1309 )
    01102001



    3



    Total spoločnom vlastníctve

    aby sa zabránilo chybám, že rozum, to je najlepšie sa opýtať Voľba stav ihneď po pripojení. Navrhujeme zvážiť nasledujúce zľava pripojí SQL príklad.

    SELECT Peoples *, Realty_peoples.id_realty, Realty_peoples.type Z Peoples LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples a typ & lt; & gt; "Property").

    V dôsledku toho bude nasledujúcim spôsobom:

    Zapros1



    iD hodnota



    L_name



    F_name (1339 )


    Middle_name



    narodenín



    id_realty



    , typ



    , 1



    Ivanov



    Darin


    (1370 ) B.



    16072000










    (1386 ) 2



    Pugin



    Vladyslav



    , N.



    29011986







    Eugenein



    , Alexander



    , F.



    30041964




    (1436 )





    , 4



    Annino



    Láska



    , P.



    31121989











    , 5
    ,


    Herasymovskaya



    , Hope



    , P. (1483 )


    14031992



    , 4



    , spoločný podiel ich Play Time



    6
    ,


    Gerasimovka



    , Oleg



    Albertová



    29011985



    4
    ,


    vlastníctvo kmeňovú akciu



    , ​​7



    Suhanovskyy



    George



    , A.



    25091976



    3



    Total spoločnom vlastníctve



    8



    Suhanovskaya



    Julia



    , Y.


    (1570 ) 01102001


    (15 74) 3
    ,


    Total spoločnom vlastníctve

    Tým, že po jednoduchej s ľavou spojiť sql príklad, máme zoznam všetkých ľudí, ktorí sa pohybujú ďalej v niektorých z nich nehnuteľností v čiastočné /spoločné vlastníctvo.
    Na záver by som chcel opäť zdôrazniť, že výber informácií z databázy by sa mal zaobchádzať zodpovedne. Mnohé nuansy sa pred nami otvorili s použitím ľavého spojenia sql jednoduchým príkladom,vysvetľujú, že jeden - pred začatím montážou aj základná požiadavka, musíte starostlivo pochopiť, čo chceme dostať výsledok. Veľa šťastia!

    Súvisiace publikácie