Levý spojení (SQL) - příklad, podrobný popis, chyby použití

Ve všech relačních databázích jsou všechny informace rozděleny do samostatných tabulek. Mnohé z tabulek mají mezi sebou pevná spojení v schématu. Nicméně, pomocí dotazů Sql je docela možné propojit data, která nejsou součástí schématu. Toho je dosaženo dokončením propojení připojení, které umožňuje vytvářet vztahy mezi libovolným počtem tabulek a připojit i zdánlivě rozptýlené data. V tomto článku budeme hovořit konkrétně o levém externím připojení. Než začnete s popisem tohoto typu připojení, přidáme do databáze některé tabulky.

Příprava požadovaných tabulek

Předpokládejme, že naše databáze obsahuje informace o lidech a jejich nemovitostech. Základní informace je založeno na třech tabulkách: lidé (lidé), nemovitosti (nemovitosti), realty_peoples (tabulka s vztahy, na které z lidí, které vlastnictví patří). Předpokládejme, že v tabulkách jsou ukládány následující údaje:




Lidé



id
) L_name



F_name



Middle_name



Borisovna


Ivanova


Darina 46
16072000



2


Pudin Vladislav


Nikolayevich



29011986



Eugenein
Alexander



Fedorovich



30041964
92)


Annina

(98 )
Láska



Pavlína





Nadežda



120)


, P.



14031992



6







Albertovich 151) 7



Suhanovskyy



George



A.

(166 )
25091976


,
8



Suhanovskaya



Julia



Yu



01102001

Nemovitost:

nemovitostí
(193 )

id hodnota



, adresa



1



Arkhangelsk, st. Voronina, 7 kv. 6



2



Arkhangelsk, st. Severodvinsk, 84 m2 9 pokojů 5



3



Arkhangelsk oblast, g. Severodvinsk, st. Lenin, 134 čtverečních metrů 85



4



Arkhangelsk oblast, s. Novodvynsk Str. Proletarská, 16 čtverečních metrů 137



5



р Arkhangelsk, pl. Teriokhin, 89 m2 13

U lidí vztahy - Typ nemovitosti:

Realty_peoples



id_peoples



id_realty

,
,
, typ



7



3



Celkem společném vlastnictví



8



3



Celkový společný majetek



3



, 5



objektu



7



1



Reality



5



4
(314 )

Společné částečné vlastnictví



6



4



vlastnictví společný podíl

, levý připojit (SQL) - popis [331 ]
Na levé připojení má následující syntaxi:

Table_A levý REGISTRACE table_B [{ON predikátu} | {USING list_stolbs}]

A to vypadá takto:
a tento výraz překládá jako „Vybrat vše bez výjimky řádek tabulky a tabulka přivést pouze odpovídající predikát on-line. Pokud tabulka nenajde pár řádků v tabulce A, vyplňte výsledné hodnoty sloupce Null. "


, často při provádění levé připojení ukazuje na využití použít pouze při názvy sloupců, které plánované pro připojení shodují.

Left připojit - příklady

s připojením nalevo vidíme-li všichni lidé v seznamu národů je realitní. K tomu, následovat příklad vlevo spojit 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ískat následující výsledky:
,
Zapros1



id hodnota



L_name



F_name



Middle_name



Datum narození



id_realty

,
,
, typ



1



Ivanova



Darya (391 )


)


2



Pugin



Vladislav



M.



29011986











3



Evga Devět



Alexander



, F



30041964



, 5



objektu



4



Annino



Láska

(477 )
, P.



31121989









(493








14031992



4



vlastnictví společný podíl



6 (523 )


Gerasimovka



Oleg



Albertovich

(537 )
29011985



4



vlastnictví Společný podíl



7



Suhanovskyy



George



A.



25091976 (567 )









George



A.



25091976


(598 ) 3



Celkový společný majetek



8



Suhanovskaya


,
Julia



Yu



01102001



3



Celkový společný majetek

Jak je možno vidět v Ivanov Darya, Puhyna Vladislav Annino a milovat žádná práva registrovaný majetek. A co bychom použili spojení Vnitřního spojení? Jak víte, že vylučuje nesouhlasné linky, a tři lidé z našeho konečného vzorku prostě spadl:

Zapros1



hodnota id



L_name



F_name








666) 3



Evhenyn



Alexander



, F

(681 )
30041964



, 5



objektu
,
,
,
5
,


Herasymovskaya



naděje



, P.



14031992

,
,
4



vlastnictví společný podíl



6



Gerasimovka



Oleg



Albertovich



29011985 (7 39)


4



vlastnictví společný podíl



7



Suhanovskyy



George



A.



25091976

(769 )
1



objektu



7



Suhanovskyy



George



A.



25091976



3



Celkový společný majetek



8



Suhanovskaya



Julia



Yu



01102001



3



Celkový společný majetek

Zdá se, že druhá možnost setkat jen náš problém. Pokud však budeme pokračovat v přidávání další tabulky, pak tři z výsledků budou nenávratně mizet. Proto v praxi při kombinaci mnoha tabulek jsou sloučeniny levé a pravé mnohem častěji používané než vnitřní spojení.
Pokračujte v zobrazení příkladů z levého spojení sql. Připojte tabulku s adresami našich objektůTyp nemovitosti:.

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 )
Nyní dostaneme nejen správný druh, ale také řeší vlastnosti:

Zapros1



id hodnota



L_name



F_name



Middle_name



Datum narození

(862 )
id_realty



typu



adres



1



Ivanova



Darya



B



16072000


)












2



Pugin



Vladislav



, N.



29011986















3

(942 )
Evhenyn



Alexander



, F



30041964



, 5



objektu



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



4



Annino



Láska



, P.



31121989















, 5
,


Herasymovskaya



, Hope



, P.



14031992



4
,


vlastnictví kmenovou akcii
(1029 )

Arkhangelsk oblast, s. Novodvynsk str. Proletarská, 16 čtverečních metrů 137



6



Gerasimovka



Oleg



Albertovich



29011985



4
,


vlastnictví kmenovou akcii



Arkhangelsk, Novodvinsk, st. Proletarská, 16 čtverečních metrů 137



, 7



Suhanovskyy



George



, A.



25091976



, 3



Celkem společném vlastnictví



Arkhangelsk oblast, g. Severodvinsk, st. Lenin, 134 čtverečních metrů 85



, 7



Suhanovskyy



George



, A.



25091976



, 1



objektu

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



, 8



Suhanovskaya



Julia



Y.



01102001



3
,


Total společném vlastnictví



Arkhangelsk oblast, g. Severodvinsk, st. Lenin, 134 čtverečních metrů 85
,
,

Left připojit - používat běžné chyby: Neplatná procedura tabulku

Hlavní chyba je dovoleno v levé vnější spojení tabulek, dvě:
  • False zvolený postup tabulky, z nichž ztracených dat.
  • Chyby při použití Kde v dotazu s tabulkami sloučení.
  • Zvažte první chybu. Před vyřešením problému je nutné jasně porozumět, co přesně chceme dosáhnout. Ve výše uvedeném příkladu jsme přinesli všechny jednotlivé lidi, ale úplně ztratil podrobnosti o číslo 2, ve kterém vlastník neníbyl nalezen.
    Jestliže jsme se přestěhovali do tabulky v dotazu místech a začne s «Zleva nemovitostí připojit Peoples» není vlastnost bychom ztratili nelze říci o lidech.
    Nicméně, to není nutné, se obávat, levé připojení, přepnutí na celou vnější, které zahrnují výsledek a utkání a neodpovídají linky. U vzorků objemových často velmi velké, a dalších dat ve skutečnosti k ničemu. Důležité je - pochopit, co chcete získat výsledek, všichni lidé se seznamem jejich dostupného majetku nebo seznam všech vlastností s jejich vlastníků (pokud existuje).

    Left připojit - využívání běžných chyb, správné dotazu při stanovování podmínek Stanovení

    Další problém spojený se ztrátou dat, a ne vždy na první pohled patrné. Vrátíme-li se dotaz, kdy jsme opustili použitím připojení přijímat data o všech lidech a jejich dostupných vlastností. Pamatovat následující pomocí LEFT JOIN SQL příklad:

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

    Předpokládejme, že chceme objasnit žádost a nezobrazuje data, jaký typ práva - „Vlastnosti“. Pokud se jednoduše připojit pomocí vlevo připojit SQL, příklad následuje:

    Je-li typ & lt; & gt; "Vlastnictví"

    , může dojít ke ztrátě dat na lidi, kteří nemají majetek, protože prázdný Null není ve srovnání takto:

    Zapros1



    ID hodnotu



    L_name



    F_name



    Middle_name


    (1198 ) narozeniny



    id_realty



    typu



    , 5
    ,


    Gerasimovská



    , Hope



    , P.



    14031992



    , 4



    vlastnictví kmenovou akcii



    6



    Gerasimovka



    Oleg



    Albertovich



    29011985



    , 4



    společný podíl vlastnictví



    , 7



    Suhanovskyy



    George



    , A.



    25091976



    3



    Total společném vlastnictví


    (1 294) 8



    Suhanovskaya



    Julia



    Y.

    (1309 )
    01102001



    3



    Total společném vlastnictví

    aby se zabránilo chybám, že rozum, to je nejlepší se zeptat Volba stav ihned po připojení. Navrhujeme zvážit následující zleva připojí SQL pří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 následujícím způsobem:

    Zapros1



    iD hodnota



    L_name



    F_name (1339 )


    Middle_name



    narozeniny



    id_realty



    , typ



    , 1



    Ivanov



    Darin


    (1370 ) B.



    16072000










    (1386 ) 2



    Pugin



    Vladyslav



    , N.



    29011986











    , 3



    Evhenyn



    , Alexander



    , F.



    30041964




    (1436 )





    , 4



    Annino



    Láska



    , P.



    31121989











    , 5
    ,


    Herasymovskaya



    , Hope



    , P. (1483 )


    14031992



    , 4



    , společný podíl jejich Play Time



    6
    ,


    Gerasimovka



    , Oleg



    Albertovich



    29011985



    4
    ,


    vlastnictví kmenovou akcii



    , ​​7



    Suhanovskyy



    George



    , A.



    25091976



    3



    Total společném vlastnictví



    8



    Suhanovskaya



    Julia



    , Y.


    (1570 ) 01102001


    (15 74) 3
    ,


    Total společném vlastnictví

    Tím, že po jednoduché s levou spojit sql příklad, máme seznam všech lidí, pohybující se dále v některých z nich nemovitostí v částečné /společné vlastnictví.
    Závěrem bych chtěl znovu zdůraznit, že výběr informací z databáze by měl být zpracován zodpovědně. Mnoho nuancí se před námi otevřelo s použitím levého spojení sql jednoduchým příkladem,vysvětlení, které - než začneme kompilovat i základní požadavek, je třeba důkladně pochopit, co přesně chceme získat jako výsledek. Hodně štěstí!

    Související publikace