KompiuteriaiProgramavimas

Kairysis prisijungti (SQL) - pavyzdys, išsamus aprašymas, naudojimo klaidos

Bet kokioje realioje reliacinėje duomenų bazėje visa informacija platinama atskirose lentelėse. Daugelis lentelių sukūrė santykius grandinėje viena su kita. Tačiau, naudojant SQL užklausas, visiškai įmanoma susieti duomenis, kurie nėra schema. Tai atliekama vykdant prisijungimo prie operacijos, kuri leidžia jums sukurti ryšius tarp bet kurio skaičiaus lentelių ir prijungti net atrodo skirtingus duomenis.

Šiame straipsnyje mes konkrečiai kalbėsime apie kairįjį išorinį ryšį. Prieš pradėdami apibūdinti tokio tipo ryšį, pridedame keletą lentelių į duomenų bazę.

Pasirengimas reikiamoms lentelėms

Pavyzdžiui, mūsų duomenų bazėje yra informacijos apie žmones ir jų nekilnojamąjį turtą. Pagrindinė informacija yra pagrįsta trimis lentelėmis: tautos (žmonės), nekilnojamasis turtas (nekilnojamasis turtas), realty_peoples (lentelė su santykiu, kam žmonėms priklauso nekilnojamasis turtas). Tarkime, lentelėse žmonėms saugomi šie duomenys:

Tautos

Id

L_name

F_name

Middle_name

Gimtadienis

1

Ivanova

Daria

Borisovna

16.07.2000

2

Pugin

Vladislavas

Nikolajičas

29.01.1986

3

Evgeniin

Aleksandras

Федорович

30.04.1964

4

Annina

Meilė

Pavlovna

12/31/1989

5

Герасимовская

Tikiuosi

Pavlovna

03/14/1992

6-asis

Герасимовский

Olegas

Albertyvič

29.01.1985

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

8-asis

Сухановская

Julija

Jurijevna

2001/01/10

Nekilnojamas turtas:

Nekilnojamasis turtas

Id

Adresas

1

Archangelskas, g. Voronina, 7, ap 6

2

Archangelskas, g. Severodvinskaya, 84, Apt. 9, kambarys. 5

3

Архангельская обл., Северодвинск, ul. Lenina, d. 134, apt. 85

4

Arkhangelsko sritis, Novodvinskas, ul. Proletarskaya, 16, Apt. 137

5

Archangelskas, pl. Terekinas, d. 89, apt. 13-oji

Dėl santykių žmonės yra nekilnojamasis turtas:

Realty_peoples

Id_peoples

Id_realty

Tipas

7-asis

3

Bendra bendra nuosavybė

8-asis

3

Bendra bendra nuosavybė

3

5

Nuosavybės teisė

7-asis

1

Nuosavybės teisė

5

4

Bendra nuosavybė

6-asis

4

Bendra nuosavybė

Kairysis prisijungti (Sql) - aprašymas

Kairysis jungtis turi tokį sintaksę:

Table_A KAINA LYGTIS table_B [{ON predikatas } | {NAUDOTI sąrašą stulpelių }]

Ir atrodo taip:

Ir ši frazė yra išversta kaip "Išskirti visas iš A lentelės be išimties eilutes ir išskirti tik tas eilutes, kurios atitinka predikatą iš B lentelės. Jei lentelėje B lentelėje nėra eilučių pora, tada užpildykite nulinius stulpelius su reikšmėmis ".

Dažniausiai, kai atliekamas kairysis ryšys, nurodomas ON, USING naudojamas tik tada, kai stulpelių pavadinimai, kuriems numatytas ryšys, yra vienodi.

Kairysis prisijungti - naudojimo pavyzdžiai

Su kairiojo ryšio pagalba mes galime pamatyti, ar visi žmonės iš žmonių sąrašo turi nekilnojamąjį turtą. Norėdami tai padaryti, atlikite tokį pavyzdį kairėje prisijunkite sql:

PASIRINKITE Žmones. *, Realty_peoples.id_realty, Realty_peoples.type

Iš žmonių į kairę įjunkite Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Ir mes gauname tokį rezultatą:

Prašymas1

Id

L_name

F_name

Middle_name

Gimtadienis

Id_realty

Tipas

1

Ivanova

Daria

Borisovna

16.07.2000

2

Pugin

Vladislavas

Nikolajičas

29.01.1986

3

Evgeniin

Aleksandras

Федорович

30.04.1964

5

Nuosavybės teisė

4

Annina

Meilė

Pavlovna

12/31/1989

5

Герасимовская

Tikiuosi

Pavlovna

03/14/1992

4

Bendra nuosavybė

6-asis

Герасимовский

Olegas

Albertyvič

29.01.1985

4

Bendra nuosavybė

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

1

Nuosavybės teisė

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

3

Bendra bendra nuosavybė

8-asis

Сухановская

Julija

Jurijevna

2001/01/10

3

Bendra bendra nuosavybė

Kaip matote, Ivanova Daria, Pugin Vladislav ir Annina Lyubov neturi registruotų teisių į nekilnojamąjį turtą.

Ir ką mes galėtume panaudoti vidinį prisijungimą prie vidinio prisijungimo? Kaip žinote, tai apima neatitinkančias eilutes, taigi trys žmonės iš mūsų galutinio imties tiesiog iškrenta:

Prašymas1

Id

L_name

F_name

Middle_name

Gimtadienis

Id_realty

Tipas

3

Evgeniin

Aleksandras

Федорович

30.04.1964

5

Nuosavybės teisė

5

Герасимовская

Tikiuosi

Pavlovna

03/14/1992

4

Bendra nuosavybė

6-asis

Герасимовский

Olegas

Albertyvič

29.01.1985

4

Bendra nuosavybė

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

1

Nuosavybės teisė

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

3

Bendra bendra nuosavybė

8-asis

Сухановская

Julija

Jurijevna

2001/01/10

3

Bendra bendra nuosavybė

Atrodytų, kad antroji galimybė taip pat atitinka mūsų užduoties sąlygas. Tačiau, jei mes ir toliau pridėti daugiau lentelių, trys žmonės iš rezultato jau nebebus tinkamai išnyks. Todėl praktikoje, derinant kelis stalus, "Left" ir "Right" jungtys dažniau naudojamos kaip "Inner join".

Mes ir toliau svarstome pavyzdžius su kairiuoju prisijungti prie sql. Prisijunkite prie stalo su mūsų nekilnojamojo turto adresais:

SELECT People. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address

Iš tautų

Į kairę įjunkite Realty_peoples ĮJUNGTA Peoples.id = Realty_peoples.id_peoples

Kairysis prisijungia prie nekilnojamojo turto Realty.id = Realty_peoples.id_realty

Dabar gauname ne tik teisę formą, bet ir nekilnojamojo turto adresus:

Prašymas1

Id

L_name

F_name

Middle_name

Gimtadienis

Id_realty

Tipas

Adresas

1

Ivanova

Daria

Borisovna

16.07.2000

2

Pugin

Vladislavas

Nikolajičas

29.01.1986

3

Evgeniin

Aleksandras

Федорович

30.04.1964

5

Nuosavybės teisė

Archangelskas, pl. Terekinas, d. 89, apt. 13-oji

4

Annina

Meilė

Pavlovna

12/31/1989

5

Герасимовская

Tikiuosi

Pavlovna

03/14/1992

4

Bendra nuosavybė

Arkhangelsko sritis, Novodvinskas, ul. Proletarskaya, 16, Apt. 137

6-asis

Герасимовский

Olegas

Albertyvič

29.01.1985

4

Bendra nuosavybė

Arkhangelsko sritis, Novodvinskas, ul. Proletarskaya, 16, Apt. 137

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

3

Bendra bendra nuosavybė

Архангельская обл., Северодвинск, ul. Lenina, d. 134, apt. 85

7-asis

Сухановский

Jurijus

Андреевич

25.09.1976

1

Nuosavybės teisė

Archangelskas, g. Voronina, 7, ap 6

8-asis

Сухановская

Julija

Jurijevna

2001/01/10

3

Bendra bendra nuosavybė

Archangelskas regionas, Severodvinskas, Šv. Lenin, 134 d., Q. 85

Kairysis prisijungti - tipiškas naudojimo klaidos: Neteisingas procedūros lentelę

Pagrindiniai padarytos klaidos kairėje išorinėje prisijungti lenteles, du:

  1. Teisingai pasirinktas lentelių tvarką, dėl kurių duomenys buvo prarasti.
  2. Kur klaidos naudojant užklausą su prisijungti prie lenteles.

Apsvarstykite pirmoji klaida. Prieš bet kokios problemos sprendimą turėtų būti aiškiai suprantama, kad tai, ką mes norime gauti pabaigoje. Šiame pavyzdyje aukščiau, mes priėmėme kiekvieną vieną iš žmonių, bet visiškai prarado informaciją apie objekto numeris 2, kurio savininkas buvo nerastas.

Jei mes perkelti lenteles užklausoje kai kuriose vietose, ir būtų pradėti "... Nuo Nekilnojamas turtas paliktas prie Žmonės ...» jokio vieną turtą, mes nebūtume prarasta, jūs negalite pasakyti apie žmones.

Tačiau nereikia išsigąsti kairiojo ryšį, pereiti į visiškai išorės, kuri yra įtraukta į rezultatus ir atitikimo, o ne atitikimo linijas.

Galų gale, iš bandinio tūris dažnai yra labai didelis, ir papildomų duomenų iš tikrųjų yra nenaudingas. Svarbiausia - išsiaiškinti, ką norite gauti rezultatą: iš visų žmonių su savo turimą turtą, sąrašą ar visą turto sąrašą su jų savininkams (jei toks yra).

Kairysis prisijungti - tipiškas naudojimo klaidos: Prašymas yra teisinga, nustatant sąlygas, WHERE

Antroji klaida taip pat yra susijęs su duomenų praradimo, ir ne visada iš karto aišku.

Grįžkime į užklausą, kai mes palikome per jungtis gavo duomenis apie visų žmonių ir jų esamo turto. Įsiminti taip su kairėje prisijungti SQL pavyzdį:

IŠ Žmonės KAIRĖN JOIN Realty_peoples APIE Peoples.id = Realty_peoples.id_peoples;

Tarkime, mes norime paaiškinti prašymą ir nėra išėjimo duomenis, kur teisinės tipas - "turtas". Jei mes tiesiog pridėti, naudojant paliko prisijungti SQL, kad, šią sąlygą pavyzdį:

...

Kur tipo <> "Nuosavybė"

mes prarasime duomenis apie žmones, kurie neturi jokio turto, nes nulinės vertės Null yra ne palyginti taip:

Query1

tapatybės

L_NAME

F_name

Middle_name

gimimo diena

id_realty

tipas

5

Gerasimovsky

viltis

P

1992/03/14

4

Dažnas dalys

6

Gerasimovsky

Olegas

Albertovich

1985/01/29

4

Dažnas dalys

7

Sukhanovskaya

žiuri

A.

1976/09/25

3

Iš viso bendros nuosavybės

8

Sukhanovskaya

Julija

Y.

01.10.2001

3

Iš viso bendros nuosavybės

Norėdami išvengti klaidų pasikartojimui dėl šios priežasties, ji yra geriausia iš karto nustatyti atrankos sąlygą ant ryšio. Siūlome apsvarstyti šiuos su kairėje prisijungti SQL pavyzdį.

SELECT Žmonės. *, Realty_peoples.id_realty, Realty_peoples.type

IŠ tautų

KAIRYSIS JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples ir tipas <> "turtas")

Rezultatas bus toks:

Query1

tapatybės

L_NAME

F_name

Middle_name

gimimo diena

id_realty

tipas

1

Ivanova

daria

B.

2000/07/16

2

Pugin

Vladislavas

Donatas

1986/01/29

3

Evgenin

Aleksandras

Federovich

1964/04/30

4

Annina

meilė

P

1989/12/31

5

Gerasimovsky

viltis

P

1992/03/14

4

Dažnas dalys

6

Gerasimovsky

Olegas

Albertovich

1985/01/29

4

Dažnas dalys

7

Sukhanovskaya

žiuri

A.

1976/09/25

3

Iš viso bendros nuosavybės

8

Sukhanovskaya

Julija

Y.

01.10.2001

3

Iš viso bendros nuosavybės

Taigi, vadovaudamiesi paprasta kairėje prisijungti SQL Pavyzdžiui, mes gavo visų žmonių sąrašą, toliau juda, viena iš šių savybių nuosavybės / jungtinės nuosavybės.

Apibendrinant norėčiau dar kartą, kad reikia imtis atsakingai jokiai informaciją iš duomenų bazės pavyzdys pabrėžti. Daug niuansų atidaryti priešais mus su kairėje prisijungti SQL paprastą pavyzdį, paaiškinimas, iš kurių vienas - prieš pradėdami rašyti net pagrindinę užklausą, turite atidžiai suprasti, ką norime gauti į pabaigos. Sėkmės!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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