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
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
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
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.
Left připojit - využívání běžných chyb, správné dotazu při stanovování podmínek Stanovení
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í.