Kompiuteriai, Programavimas
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šą iš 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:
- Teisingai pasirinktas lentelių tvarką, dėl kurių duomenys buvo prarasti.
- 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