Kompyuta, Programu
Left kujiunga (SQL) - mfano, maelezo ya kina, matumizi ya makosa
Mali uhusiano database yoyote, taarifa zote ni kusambazwa kwenye meza tofauti. Wengi wa meza ni umeelezwa katika mpango wa mawasiliano na kila mmoja. Hata hivyo, kwa msaada wa SQL inawezekana kabisa kuweka uhusiano kati ya data, si iliyoingia katika mzunguko. Hii inafanyika kwa kufanya kujiunga uhusiano, ambayo utapata kujenga uhusiano kati ya idadi yoyote ya meza, na hata kuungana habari inaonekana tofauti.
Makala hii itakuwa kuzungumza hasa kuhusu nje ya kushoto kujiunga. Kabla ya kuendelea na maelezo ya aina hii ya uhusiano, kuongeza katika meza baadhi database.
Maandalizi meza muhimu
Kwa mfano, katika database yetu, kuna taarifa kuhusu watu na mali zao halisi. Summary kulingana na meza tatu: Watu (watu), Realty (mali isiyohamishika), Realty_peoples (mahusiano ya meza, watu ambao kutokana na kile mali ni mali ya). Kudhani data zifuatazo kuhifadhiwa katika meza ya watu:
watu | ||||
id | L_name | F_name | Middle_name | Kuzaliwa |
1 | Ivanova | Daria | B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | upendo | P. | 1989/12/31 |
5 | Gerasimovsky | matumaini | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 |
Majengo:
Realty | |
id | mahali |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkhangelsk kanda, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkhangelsk kanda, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Uhusiano watu - mali:
Realty_peoples | ||
id_peoples | id_realty | aina |
7 | 3 | Jumla umiliki wa pamoja |
8 | 3 | Jumla umiliki wa pamoja |
3 | 5 | mali |
7 | 1 | mali |
5 | 4 | sehemu ya kawaida |
6 | 4 | sehemu ya kawaida |
Kushoto kujiunga (SQL) - Maelezo
Kushoto kiwanja ina syntax zifuatazo:
Table_A LEFT JOIN table_B [{ON predicate} | {KUTUMIA spisok_ kwa tolbtsov}] |
Na schematically kama ifuatavyo:
Na msemo huu ni kutafsiriwa kama "Chagua zote, bila ubaguzi, mstari wa Meza ya A na B Meza ya kuonyesha tu vinavyolingana safu ya kiarifu. Kama meza ya kupatikana katika meza kamba kwa jozi A, kisha jaza nguzo kusababisha Null - maadili ".
Mara nyingi, wakati uhusiano kushoto unahitajika ON, kwa kutumia hutumiwa tu wakati majina ya safu, ambayo imepangwa kufanya uhusiano ni sawa.
Left kujiunga - mifano ya matumizi
Pamoja na uhusiano wa kushoto tunaweza kuona, watu wote katika orodha kama kuna Watu mali. Ili kufanya hivyo katika upande wa kushoto kujiunga sql swala mfano:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Watu LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Pamoja na matokeo yafuatayo:
Query1 | ||||||
id | L_name | F_name | Middle_name | Kuzaliwa | id_realty | aina |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | mali |
4 | Annina | upendo | P. | 1989/12/31 | ||
5 | Gerasimovsky | matumaini | P. | 1992/03/14 | 4 | sehemu ya kawaida |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | sehemu ya kawaida |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | mali |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Jumla umiliki wa pamoja |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Jumla umiliki wa pamoja |
Kama tunavyoona, Ivanova Darya Pugin Vladislav na Anninoy Lyubovi No amesajiliwa haki ya mali isiyohamishika.
Na kitu gani tumepokea, kwa kutumia wa ndani kujiunga Inner kujiunga? Kama unavyojua, ni haihusishi safu zisizo vinavyolingana, hivyo tatu kati ya sampuli yetu ya mwisho itakuwa tu kudondoshwa:
Query1 | ||||||
id | L_name | F_name | Middle_name | Kuzaliwa | id_realty | aina |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | mali |
5 | Gerasimovsky | matumaini | P. | 1992/03/14 | 4 | sehemu ya kawaida |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | sehemu ya kawaida |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | mali |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Jumla umiliki wa pamoja |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Jumla umiliki wa pamoja |
Inaonekana kwamba toleo la pili pia hukutana hali ya tatizo letu. Hata hivyo, kama sisi kuanza kuambatisha kwenye nyingine, na meza nyingine, watu watatu kutoka kwa matokeo tayari irretrievably gone. Kwa hiyo, katika mazoezi, wakati kuchanganya meza nyingi mara nyingi zaidi kutumika kushoto na kulia uhusiano ya Ndani kujiunga.
Itaendelea kuangalia kwa upande wa kushoto kujiunga mifano sql. Ambatanisha meza kwa anwani ya nyumba yetu:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address FROM Watu LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Sasa sisi kupata si tu aina ya sheria, lakini pia pepe ya mali isiyohamishika:
Query1 | |||||||
id | L_name | F_name | Middle_name | Kuzaliwa | id_realty | aina | mahali |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | mali | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | upendo | P. | 1989/12/31 | |||
5 | Gerasimovsky | matumaini | P. | 1992/03/14 | 4 | sehemu ya kawaida | Arkhangelsk kanda, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | sehemu ya kawaida | Arkhangelsk kanda, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Jumla umiliki wa pamoja | Arkhangelsk kanda, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | mali | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Jumla umiliki wa pamoja |
Arkhangelsk kanda, Severodvinsk, st. Lenin, d. 134, q. 85 |
Left kujiunga - matumizi ya kawaida ya kosa: utaratibu batili meza
makosa Basic unafanywa kwa nje kushoto kujiunga meza, mbili:
- Usahihi kuchaguliwa amri ya meza ambao data waliopotea.
- Pale makosa wakati wa kutumia hoja na kujiunga meza.
Fikiria kosa la kwanza. Kabla ya uamuzi wa tatizo lolote lazima ieleweke wazi kwamba kile sisi wanataka kupata katika mwisho. Katika mfano huu hapo juu, sisi alichukua kila moja ya watu, lakini kabisa wamepoteza kuhusu kitu chini ya namba 2, ambavyo mmiliki haikupatikana.
Kama sisi wakiongozwa meza katika hoja katika baadhi ya maeneo, na ingekuwa kuanza na «... From Realty kushoto kujiunga Peoples ...» yoyote mali moja, tunataka wamepoteza, huwezi kuwaambia kuhusu watu.
Lakini si kuwa na hofu ya uhusiano wa kushoto, kubadili kamili ya nje, ambayo ni pamoja na katika matokeo na vinavyolingana, na si mistari vinavyolingana.
Baada ya yote, kiasi cha sampuli ni mara nyingi kubwa sana, na data za ziada kwa kweli maana. Jambo kuu - kwa kufikiri nini unataka kupata Matokeo: ya watu wote na orodha ya mali zao zilizopo au zima orodha ya mali na wamiliki wao (kama ipo).
Left kujiunga - matumizi ya kawaida ya kosa: Ombi ni sahihi wakati wa kuweka hali ya katika wapi
makosa ya pili pia kuhusishwa na hasara ya data, na si mara zote mara moja dhahiri.
Hebu kurejea swala wakati sisi kushoto kupitia miunganisho ya kupokea data kwa watu wote na mali zao zilizopo. Kumbuka yafuatayo na kushoto kujiunga mfano sql:
FROM Watu LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Tuseme tunataka kufafanua ombi hilo na hana pato data, ambapo aina ya sheria - "Mali". Kama sisi tu ambatisha, kwa kutumia wa kushoto kujiunga sql, mfano wa hali ya zifuatazo:
...
Ambapo aina <> "Mali" |
sisi kupoteza data kwa watu wasio na mali, kwa sababu null thamani Null si ikilinganishwa kama ifuatavyo:
Query1 | ||||||
id | L_name | F_name | Middle_name | Kuzaliwa | id_realty | aina |
5 | Gerasimovsky | matumaini | P. | 1992/03/14 | 4 | sehemu ya kawaida |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | sehemu ya kawaida |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Jumla umiliki wa pamoja |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Jumla umiliki wa pamoja |
Kuzuia makosa kutokea kwa sababu hii, ni bora kuweka hali ya uteuzi mara moja baada ya kuunganisha. Tunashauri kuzingatia yafuatayo na kushoto kujiunga mfano sql.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Watu LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples NA aina <> "Mali") |
Matokeo yake yatakuwa kama ifuatavyo:
Query1 | ||||||
id | L_name | F_name | Middle_name | Kuzaliwa | id_realty | aina |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina |
upendo | P. | 1989/12/31 | ||
5 | Gerasimovsky | matumaini | P. | 1992/03/14 | 4 | sehemu ya kawaida |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | sehemu ya kawaida |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Jumla umiliki wa pamoja |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Jumla umiliki wa pamoja |
Hivyo, kwa kufuata rahisi kwa upande wa kushoto kujiunga mfano sql, sisi kupokea orodha ya watu wote, kuhamia zaidi, moja ya mali hizi kwa usawa / umiliki wa pamoja.
Kama hitimisho Ningependa kusisitiza kwa mara nyingine tena kwamba sampuli ya maelezo yoyote kutoka database haja ya kuchukuliwa kwa uwajibikaji. nuances wengi kufunguliwa mbele sisi na kushoto kujiunga mfano rahisi sql, maelezo ya ambayo mtu - kabla ya kuanza kuandika hata swala msingi, lazima makini kuelewa tunataka kupata katika mwisho. bahati njema!
Similar articles
Trending Now