KompyutaProgramu

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:

  1. Usahihi kuchaguliwa amri ya meza ambao data waliopotea.
  2. 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

 

 

 

 

Newest

Copyright © 2018 sw.delachieve.com. Theme powered by WordPress.