Cyfrifiaduron, Rhaglennu
Chwith yn ymuno (SQL) - enghraifft, mae'r disgrifiad manwl, defnydd o'r gwall
Mewn unrhyw cronfa ddata berthynol go iawn, yr holl wybodaeth yn cael ei ddosbarthu ar fwrdd ar wahân. Mae llawer o'r tablau yn cael eu gosod allan yn y cynllun cyfathrebu â'i gilydd. Fodd bynnag, gyda chymorth SQL ymholiadau mae'n eithaf posibl i roi cysylltiad rhwng y data, nid hymgorffori yn y cylched. Gwneir hyn drwy berfformio ymuno gysylltiad, sy'n eich galluogi i adeiladu perthynas rhwng unrhyw nifer o dablau, a hyd yn oed cysylltu gwybodaeth sy'n ymddangos yn wahanol.
Bydd Mae'r erthygl hon yn sôn yn benodol am y allanol chwith ymuno. Cyn symud ymlaen at y disgrifiad o'r math hwn o gysylltiad, ychwanegu mewn rhai tablau cronfa ddata.
Paratoi'r tablau angenrheidiol
Er enghraifft, yn ein cronfa ddata, mae gwybodaeth am bobl a'u ystad go iawn. Crynodeb yn seiliedig ar y tri thabl: Pobl (pobl), Realty (ystad go iawn), Realty_peoples (perthynas bwrdd, pobl sydd o pa eiddo yn perthyn i). Tybiwch y data canlynol storio yn y tablau o bobl:
Pobl | ||||
id | L_name | F_name | Middle_name | Pen-blwydd |
1 | Ivanova | Daria | B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | cariad | P. | 1989/12/31 |
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 |
Eiddo tiriog:
Realty | |
id | cyfeiriad |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Arkhangelsk rhanbarth, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Arkhangelsk rhanbarth, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Cysylltiadau pobl - eiddo:
Realty_peoples | ||
id_peoples | id_realty | math |
7 | 3 | Cyfanswm perchnogaeth ar y cyd |
8 | 3 | Cyfanswm perchnogaeth ar y cyd |
3 | 5 | eiddo |
7 | 1 | eiddo |
5 | 4 | rhannau cyffredin |
6 | 4 | rhannau cyffredin |
Chwith ymuno (SQL) - Description
Mae cyfansoddyn gadael y chystrawen canlynol:
Table_A CHWITH YMUNWCH table_B [{AR predicate} | {DEFNYDDIO spisok_ gyda tolbtsov}] |
Ac schematically fel a ganlyn:
Ac mae ymadrodd hwn yn cael ei gyfieithu fel "Dewis Popeth, yn ddieithriad, llinell o Dabl A a B Tabl i arddangos dim ond y rhesi cyfateb y predicate. Os bydd y tabl Daethpwyd o hyd yn y tabl llinyn ar gyfer parau A, yna llenwch y colofnau sy'n deillio Null - gwerthoedd ".
Mae'r rhan fwyaf yn aml, pan fydd y cysylltiad adawodd ei nodi, gan ddefnyddio ei ddefnyddio dim ond pan fydd yr enwau golofn, sy'n cael ei gynllunio i wneud y cysylltiad yr un fath.
Chwith yn ymuno - enghreifftiau o ddefnydd
Gyda chysylltiad y chwith gwelwn, yr holl bobl o'r rhestr os oes eiddo Bobl. I wneud hyn yn y chwith ymuno enghraifft ymholiad sql:
Pobl SELECT. *, Realty_peoples.id_realty, Realty_peoples.type O'R CHWITH Bobl YMUNWCH Realty_peoples AR Peoples.id = Realty_peoples.id_peoples; |
Gyda'r canlyniadau canlynol:
Query1 | ||||||
id | L_name | F_name | Middle_name | Pen-blwydd | id_realty | math |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eiddo |
4 | Annina | cariad | P. | 1989/12/31 | ||
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 | 4 | rhannau cyffredin |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | rhannau cyffredin |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 1 | eiddo |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 3 | Cyfanswm perchnogaeth ar y cyd |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Cyfanswm perchnogaeth ar y cyd |
Wrth i ni weld, Ivanova Darya Pugin Vladislav a Anninoy Lyubovi Dim hawliau eiddo tiriog cofrestredig.
A beth fyddai i ni dderbyn, gan ddefnyddio mewnol ymuno Inner ymuno? Fel y gwyddoch, nid yw'n cynnwys rhesi nad ydynt yn cyfateb, felly byddai tri allan o'n sampl derfynol yn syml yn cael eu gollwng:
Query1 | ||||||
id | L_name | F_name | Middle_name | Pen-blwydd | id_realty | math |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eiddo |
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 | 4 | rhannau cyffredin |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | rhannau cyffredin |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 1 | eiddo |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 3 | Cyfanswm perchnogaeth ar y cyd |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Cyfanswm perchnogaeth ar y cyd |
Mae'n ymddangos fod yr ail fersiwn hefyd yn bodloni amodau ein problem. Fodd bynnag, os ydym yn dechrau i osod ar un arall, a bwrdd arall, tri o bobl o ganlyniad sydd eisoes wedi mynd tu hwnt i adfer. Felly, yn ymarferol, wrth gyfuno tablau lluosog a ddefnyddir yn llawer mwy aml cysylltiad Chwith a Hawl na Inner ymuno.
Byddwn yn parhau i edrych ar y chwith ymuno enghreifftiau sql. Atodwch tabl gyda chyfeiriadau o'n tai:
Pobl SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address O Bobl CHWITH YMUNWCH Realty_peoples AR Peoples.id = Realty_peoples.id_peoples CHWITH YMUNWCH Realty AR Realty.id = Realty_peoples.id_realty |
Nawr rydym yn cael nid yn unig yn fath o gyfraith, ond hefyd y cyfeiriad y ystad go iawn:
Query1 | |||||||
id | L_name | F_name | Middle_name | Pen-blwydd | id_realty | math | cyfeiriad |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eiddo | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | cariad | P. | 1989/12/31 | |||
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 | 4 | rhannau cyffredin | Arkhangelsk rhanbarth, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | rhannau cyffredin | Arkhangelsk rhanbarth, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 3 | Cyfanswm perchnogaeth ar y cyd | Arkhangelsk rhanbarth, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 1 | eiddo | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Cyfanswm perchnogaeth ar y cyd |
Arkhangelsk rhanbarth, Severodvinsk, st. Lenin, d. 134, q. 85 |
Chwith yn ymuno - y defnydd nodweddiadol o wall: annilys tabl weithdrefn
camgymeriadau sylfaenol a wnaed yn y allanol chwith ymuno tablau, dau:
- Gywir dewis trefn y tablau y mae data ei golli.
- Lle gwallau wrth ddefnyddio ymholiad gyda ymuno thablau.
Ystyriwch camgymeriad cyntaf. Dylai Cyn penderfyniad unrhyw broblem yn cael ei deall yn glir bod yr hyn yr ydym am ei gael yn y diwedd. Yn yr enghraifft uchod, rydym yn cymryd pob un o'r bobl, ond yn gwbl collodd y wybodaeth am y gwrthrych o dan y rhif 2, y mae ei berchennog ni chanfuwyd.
Os byddwn yn symud y tablau yn ymholiad mewn rhai mannau, a byddai'n dechrau gyda «... From Realty chwith ymuno Pobl ...» unrhyw un eiddo, ni fyddem wedi colli, ni fyddwch yn dweud wrth bobl am.
Ond peidiwch â bod ofn y cysylltiad chwith, newid i llawn allanol, sy'n cael ei gynnwys yn y canlyniadau a'r paru, ac nid y llinellau cyfateb.
Wedi'r cyfan, mae nifer y sampl yn aml yn fawr iawn, a data ychwanegol mewn gwirionedd yn dda i ddim. Y prif beth - i chyfrif i maes beth yr hoffech ei gael canlyniad: o'r holl bobl sydd â rhestr o'u heiddo sydd ar gael, neu y rhestr eiddo cyfan gyda'u perchnogion (os o gwbl).
Chwith yn ymuno - y defnydd nodweddiadol o wall: Cais yn gywir wrth osod amodau yn y Lle
Mae'r ail gwall hefyd yn gysylltiedig â cholli data, ac nid bob amser yn amlwg ar unwaith.
Gadewch i ni fynd yn ôl at y cwestiwn pan fyddwn yn gadael trwy gysylltiadau a dderbyniwyd data ar gyfer yr holl bobl a'u heiddo presennol. Cofiwch y canlynol gyda chwith ymuno enghraifft sql:
O'R CHWITH Bobl YMUNWCH Realty_peoples AR Peoples.id = Realty_peoples.id_peoples; |
Tybiwch ein bod yn awyddus i egluro y cais ac nid yw'n allbwn y data, lle mae'r math o gyfraith - "Eiddo". Os byddwn yn syml atodi, gan ddefnyddio chwith ymuno sql, yn enghraifft o'r amod canlynol:
...
Lle fath <> "Eiddo" |
byddwn yn colli'r data ar bobl nad oes ganddynt unrhyw eiddo, gan nad yw'r Null gwerth null ei gymharu fel a ganlyn:
Query1 | ||||||
id | L_name | F_name | Middle_name | Pen-blwydd | id_realty | math |
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 | 4 | rhannau cyffredin |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | rhannau cyffredin |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 3 | Cyfanswm perchnogaeth ar y cyd |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Cyfanswm perchnogaeth ar y cyd |
Er mwyn atal camgymeriadau rhag digwydd am y rheswm hwn, mae'n well gosod y cyflwr dethol yn syth ar ôl cysylltiad. Awgrymwn i ystyried y canlynol gyda'r chwith ymuno enghraifft sql.
Pobl SELECT. *, Realty_peoples.id_realty, Realty_peoples.type O Bobl CHWITH YMUNWCH Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples A math <> "Eiddo") |
Bydd y canlyniad fel a ganlyn:
Query1 | ||||||
id | L_name | F_name | Middle_name | Pen-blwydd | id_realty | math |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | cariad | P. | 1989/12/31 | ||
5 | Gerasimovsky | gobeithio | P. | 1992/03/14 | 4 | rhannau cyffredin |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | rhannau cyffredin |
7 | Sukhanovskaya | rheithgor | A. | 1976/09/25 | 3 | Cyfanswm perchnogaeth ar y cyd |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Cyfanswm perchnogaeth ar y cyd |
Felly, drwy ddilyn y syml i'r chwith ymuno esiampl sql, cawsom restr o'r holl bobl, gan symud ymhellach, un o'r eiddo hyn mewn ecwiti / perchnogaeth ar y cyd.
Fel casgliad hoffwn bwysleisio unwaith yn rhagor y mae angen eu cymryd gyfrifol sampl o unrhyw wybodaeth o'r gronfa ddata. Mae llawer o naws a agorwyd o'n blaenau gyda chwith ymuno Enghraifft syml sql, yr esboniad o'r rhain un - cyn i chi ddechrau ysgrifennu hyd yn oed ymholiad sylfaenol, rhaid i chi yn ofalus er mwyn deall yr hyn yr ydym am ei gael yn y diwedd. Pob lwc!
Similar articles
Trending Now