Kompjutera, Programimi
Left bashkohen (SQL) - një shembull, përshkrim të detajuar, përdorimin e gabimit
Në çdo bazë të dhënash relacionale të vërtetë, i gjithë informacioni është shpërndarë në një tryezë të veçantë. Shumë nga tabelat janë të përcaktuara në skemën e komunikimit me njëri-tjetrin. Megjithatë, me ndihmën e SQL queries ajo është mjaft e mundur për të vënë një lidhje në mes të dhënave, jo të ngulitura në qark. Kjo është bërë duke kryer një lidhje të bashkuar, e cila ju lejon për të ndërtuar një marrëdhënie në mes çdo numër të tabelave, dhe madje edhe të lidhë informacionin në dukje të ndryshëm.
Ky artikull do të flasim në mënyrë specifike në lidhje e jashtme e majtë bashkohen. Para se të vazhdojmë me përshkrimin e këtij lloji të lidhjes, shtoni në disa tavolina bazës së të dhënave.
Përgatitjen e tabelave nevojshme
Për shembull, në database tonë, nuk ka informacion në lidhje me njerëzit dhe pasurive të tyre të vërtetë. Përmbledhje bazuar në tre tavolina: Peoples (njerëz), Realty (pasuri të patundshme), Realty_peoples (marrëdhëniet tavolinë, njerëzit që nga ajo pronë i takon). Supozojmë të dhënat e mëposhtme të ruajtura në tabelat e njerëzve:
Peoples | ||||
id | L_name | F_name | Middle_name | ditëlindje |
1 | Ivanova | Daria | B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | alexander | Federovich | 1964/04/30 |
4 | Annina | dashuri | P. | 1989/12/31 |
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 |
të pasurive të patundshme:
pasuri e patundshme | |
id | adresë |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | rajoni Arkhangelsk, Severodvinsk, st. Lenini, d. 134, q. 85 |
4 | rajoni Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Marrëdhëniet njerëzit - Pronës:
Realty_peoples | ||
id_peoples | id_realty | lloj |
7 | 3 | Pronësia Total përbashkët |
8 | 3 | Pronësia Total përbashkët |
3 | 5 | pronë |
7 | 1 | pronë |
5 | 4 | pjesët e përbashkëta |
6 | 4 | pjesët e përbashkëta |
Majtas bashkohen (SQL) - Përshkrimi
kompleks la ka sintaksë e mëposhtme:
Table_A LEFT JOIN table_B [{ON penale kryesore} | {PËRDORIMI spisok_ me tolbtsov}] |
Dhe skematike si më poshtë:
Dhe kjo shprehje përkthehet si "Zgjidh gjithë, pa përjashtim, linjë e Tabela A dhe Tabelën B të shfaqur vetëm rreshtat matching e kallëzues. Nëse tryezë u gjet në tabelën string për çifte një, pastaj plotësoni shtyllat rezultojnë Null - vlerat ".
Më shpesh, kur lidhja e la tregohet në, duke përdorur përdoret vetëm kur emrat e kolonave, e cila është planifikuar për të bërë lidhjen janë të njëjta.
Left bashkohet - shembuj të përdorimit
Me lidhjen e majtë ne mund të shohim, tërë populli, nga lista e në qoftë se nuk Peoples pronës. Për ta bërë këtë në të majtë të bashkohet shembull sql query:
Peoples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type NGA Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Me rezultatet e mëposhtme:
Query1 | ||||||
id | L_name | F_name | Middle_name | ditëlindje | id_realty | lloj |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | alexander | Federovich | 1964/04/30 | 5 | pronë |
4 | Annina | dashuri | P. | 1989/12/31 | ||
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 | 4 | pjesët e përbashkëta |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | pjesët e përbashkëta |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | pronë |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Pronësia Total përbashkët |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 | 3 | Pronësia Total përbashkët |
Siç e shohim, Ivanova Darya Pugin Vladislav dhe Anninoy Lyubovi No regjistruar drejtave të pasurive të patundshme.
Dhe çfarë do të kemi marrë, duke përdorur një brendshme të bashkohen Inner bashkohen? Siç e dini, ai përjashton jo-matching rreshtave, kështu që tre nga të mostrës tonë të fundit thjesht do të hiqet:
Query1 | ||||||
id | L_name | F_name | Middle_name | ditëlindje | id_realty | lloj |
3 | Evgenin | alexander | Federovich | 1964/04/30 | 5 | pronë |
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 | 4 | pjesët e përbashkëta |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | pjesët e përbashkëta |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | pronë |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Pronësia Total përbashkët |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 | 3 | Pronësia Total përbashkët |
Ajo do të duket se versioni i dytë gjithashtu i plotëson kushtet e problemit tonë. Megjithatë, në qoftë se ne fillojmë të bashkëngjitni në një tjetër, dhe një tjetër tavolinë, tre persona nga rezultati tashmë të zhdukur pakthyeshme. Prandaj, në praktikë, kur kombinuar tavolina të shumta përdorur shumë më shpesh Majtas dhe Djathtas lidhjes se Inner bashkohen.
Do të vazhdojë të shikojë në të majtë bashkohen shembuj SQL. Bashkangjit një tabelë me adresat e shtëpive tona:
Peoples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address nga popujt LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Tani ne të merrni jo vetëm një lloj të ligjit, por edhe adresën e pasurive të patundshme:
Query1 | |||||||
id | L_name | F_name | Middle_name | ditëlindje | id_realty | lloj | adresë |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | alexander | Federovich | 1964/04/30 | 5 | pronë | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | dashuri | P. | 1989/12/31 | |||
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 | 4 | pjesët e përbashkëta | rajoni Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | pjesët e përbashkëta | rajoni Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Pronësia Total përbashkët | rajoni Arkhangelsk, Severodvinsk, st. Lenini, d. 134, q. 85 |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 1 | pronë | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 | 3 | Pronësia Total përbashkët |
rajoni Arkhangelsk, Severodvinsk, st. Lenini, d. 134, q. 85 |
Left bashkohet - përdorimin tipik i gabimit: pavlefshëm tabelën e procedurës
gabimet themelore e bëra në e jashtme e majtë bashkohen tavolina, dy:
- Korrekt zgjedhur rendin e tabelave për të cilin kishte humbur të dhënave.
- Ku gabimet kur duke përdorur një pyetje me të bashkohen tavolina.
Konsideroni gabimin e parë. Para vendimit të ndonjë problemi duhet të kuptohet qartë se ajo që ne duam që të merrni në fund. Në këtë shembull e mësipërm, ne e mori çdo një të vetme e popullit, por krejtësisht të humbur të dhënat në lidhje me objektin nën numrin 2, pronari i të cilit nuk është gjetur.
Nëse kemi lëvizur tabelat në një pyetje në disa vende, dhe do të fillojë me «... Nga Realty majta bashkuar popujt ...» çdo një pronë, nuk do të kishim humbur, ju nuk do të thoni në lidhje me njerëzit.
Por nuk do të jetë i frikësuar e lidhjes majtë, të kaluar në të plotë të jashtme, e cila është përfshirë në rezultatet dhe të përputhen dhe nuk linjat përputhen.
Në fund të fundit, vëllimi i mostrës është shpesh shumë i madh, dhe të dhënat shtesë në fakt është e padobishme. Gjëja kryesore - për të kuptoj se çfarë ju doni të merrni një rezultat: të gjithë njerëzve me një listë të pronës së tyre në dispozicion ose të gjithë listën e pronës me pronarët e tyre (nëse ka).
Left bashkohet - përdorimin tipik i gabimit: Kërkesa është e saktë kur vendosjen e kushteve në ku
Gabimi i dytë është e lidhur edhe me humbjen e të dhënave, dhe nuk janë gjithmonë menjëherë të dukshme.
Le të kthehemi në pyetjen kur u larguam nëpërmjet lidhjeve të marrë të dhëna për të gjithë njerëzit dhe pronën e tyre ekzistuese. Mos harroni në vijim me të majtë bashkohen shembull sql:
NGA Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Supozoni se ne duam për të sqaruar kërkesën dhe nuk e prodhimit të të dhënave, ku lloji i ligjit - "Pronë". Në qoftë se ne thjesht append, duke përdorur la bashkohet SQL, një shembull i gjendjes në vijim:
...
Ku type <> "Pronë" |
Ne do të humbasin të dhënat për njerëzit që nuk kanë pronë, sepse Null vlera null nuk është krahasuar si më poshtë:
Query1 | ||||||
id | L_name | F_name | Middle_name | ditëlindje | id_realty | lloj |
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 | 4 | pjesët e përbashkëta |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | pjesët e përbashkëta |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Pronësia Total përbashkët |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 | 3 | Pronësia Total përbashkët |
Për të parandaluar gabimet ndodhin për këtë arsye, ajo është e mirë për të vendosur gjendjen e përzgjedhjes menjëherë pas lidhjes. Ne sugjerojmë të marrin në konsideratë në vijim me të majtë bashkohen shembull sql.
Peoples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type nga popujt LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples dhe tipi i <> "Prona") |
Rezultati do të jetë si më poshtë:
Query1 | ||||||
id | L_name | F_name | Middle_name | ditëlindje | id_realty | lloj |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | alexander | Federovich | 1964/04/30 | ||
4 | Annina | dashuri | P. | 1989/12/31 | ||
5 | Gerasimovsky | shpresoj | P. | 1992/03/14 | 4 | pjesët e përbashkëta |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | pjesët e përbashkëta |
7 | Sukhanovskaya | juri | A. | 1976/09/25 | 3 | Pronësia Total përbashkët |
8 | Sukhanovskaya | julia | Y. | 2001/01/10 | 3 | Pronësia Total përbashkët |
Kështu, duke ndjekur të thjeshtë në të majtë bashkohen shembull sql, ne kemi marrë një listë të të gjithë popullit, duke lëvizur më tej, një prej këtyre pronave në një të kapitalit / bashkëpronësi.
Si përfundim dua të theksoj edhe një herë se një mostër e çdo informacioni nga bazën e të dhënave duhet të merren me përgjegjësi. Shumë nuanca të hapura para nesh me të majtë bashkohen shembull sql thjeshtë, shpjegimi i cili një - para se të filloni të shkruani edhe themelore pyetje, ju duhet me kujdes për të kuptuar atë që ne duam që të merrni në fund. fat të mirë!
Similar articles
Trending Now