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
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.
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
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.
Tablica_ LEFT JOIN table_B [{ON predikat} | {USING list_stolbs}]
I izgleda ovako shematski:
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
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:
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:
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!
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!