Datori, Programmēšana
Kreisais pievienoties (SQL) - piemērs, detalizētu aprakstu, izmantošanu kļūdu
Jebkurā reālajā relāciju datu bāzi, visa informācija tiek izplatīta atsevišķā tabulā. Daudzi no tabulas ir izklāstītas komunikācijas shēmā ar otru. Tomēr, ar palīdzību SQL vaicājumus tas ir pilnīgi iespējams ievietot saiti starp datiem, kas nav iestrādāta ķēdē. Tas tiek darīts, veicot pievienoties savienojumu, kas ļauj veidot attiecības starp jebkādu skaitu tabulas, un pat savienot šķietami nesavienojamu informāciju.
Šis raksts būs runāt konkrēti par kreiso ārējā pievienoties. Pirms aprakstam šāda veida savienojumu, pievienojiet dažas datu bāzes tabulām.
Sagatavošanās nepieciešamās tabulas
Piemēram, mūsu datu bāzē ir informācija par cilvēkiem un viņu nekustamo īpašumu. Kopsavilkums balstās uz trim galdiem: Peoples (personām), Realty (nekustamais īpašums), Realty_peoples (galda attiecības, cilvēki, kuri no tā, kas pieder īpašums). Pieņemsim šādus saglabāti tabulās tautas dati:
Peoples | ||||
id | L_name | F_name | Middle_name | dzimšanas diena |
1 | Ivanova | Daria | B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | mīlestība | P. | 1989/12/31 |
5 | Gerasimovsky | cerēt | P. | 1992/03/14 |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 |
Nekustamais īpašums:
nekustams īpašums | |
id | adrese |
1 | Arkhangelsk, ul. Voroņins, 7 d., Kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, 84 d., Q. 9 BR. 5 |
3 | Arkhangelsk apgabals, Severodvinska, st. Lenin, 134 d., Q. 85 |
4 | Arkhangelsk apgabals, Novodvinsk, ul. Proletarshaya, 16 d., Q. 137 |
5 | Arkhangelsk, pl. Terekhina, 89 d., Q. 13 |
Attiecību cilvēki - īpašumu:
Realty_peoples | ||
id_peoples | id_realty | tips |
7 | 3 | Kopā kopīpašuma |
8 | 3 | Kopā kopīpašuma |
3 | 5 | īpašums |
7 | 1 | īpašums |
5 | 4 | Bieži daļas |
6 | 4 | Bieži daļas |
Kreisais pievienoties (SQL) - Apraksts
Kreisais savienojums ir šādu sintaksi:
Table_A LEFT JOIN table_B [{ON plānotā} | {USING spisok_ ar tolbtsov}] |
Un shematiski šādi:
Un šis izteiciens tiek tulkots kā "Atlasīt visu bez izņēmuma, līnija A tabulas un B tabulā, lai parādītu tikai atbilstošas rindas predikatīvajā. Ja tabula tika atrasts stīgu tabulā pāriem A, tad aizpildiet rezultātā kolonnas Null - vērtības ".
Visbiežāk, kad atstāja savienojums ir norādīts, izmantojot lieto tikai tad, ja kolonnu nosaukumiem, kas tiek plānots, lai izveidotu savienojumu, ir tas pats.
Kreisais pievienoties - piemērus lietošanas
Ar pieslēgumu no kreisās, mēs varam redzēt, visi cilvēki no saraksta, ja tur Peoples īpašums. Lai to izdarītu kreisi pievienoties sql vaicājumu piemērs:
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type NO Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Ar šādiem rezultātiem:
Query1 | ||||||
id | L_name | F_name | Middle_name | dzimšanas diena | id_realty | tips |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | īpašums |
4 | Annina | mīlestība | P. | 1989/12/31 | ||
5 | Gerasimovsky | cerēt | P. | 1992/03/14 | 4 | Bieži daļas |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 | 4 | Bieži daļas |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 1 | īpašums |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 3 | Kopā kopīpašuma |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Kopā kopīpašuma |
Kā mēs redzam, Ivanova Darja Pugin Vladislavs un Anninoy Lyubovi Nav reģistrēta nekustamā īpašuma tiesības.
Un ko gan mēs esam saņēmuši, izmantojot iekšējo pievienoties Inner pievienoties? Kā jūs zināt, tas izslēdz neatbilstīgus rindas, tāpēc trīs no mūsu gala parauga būtu vienkārši samazinājies:
Query1 | ||||||
id | L_name | F_name | Middle_name | dzimšanas diena | id_realty | tips |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | īpašums |
5 | Gerasimovsky | cerēt | P. | 1992/03/14 | 4 | Bieži daļas |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 | 4 | Bieži daļas |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 1 | īpašums |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 3 | Kopā kopīpašuma |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Kopā kopīpašuma |
Šķiet, ka otrais variants arī atbilst nosacījumiem mūsu problēmu. Tomēr, ja mēs sākam pievienot uz citu, un vēl galds, trīs cilvēki no rezultāta jau neatgriezeniski pagājis. Tādēļ praksē, kad apvienojot vairākas tabulas daudz biežāk izmanto kreiso un labo savienojums nekā Inner pievienoties.
Turpinās meklēt pa kreisi pievienoties SQL piemērus. Pievienojiet tabulu ar adresēm mūsu māju:
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type, Realty.address NO tautu LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Tagad mēs ne tikai veida likumu, bet arī adresi nekustamo īpašumu:
Query1 | |||||||
id | L_name | F_name | Middle_name | dzimšanas diena | id_realty | tips | adrese |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | īpašums | Arkhangelsk, pl. Terekhina, 89 d., Q. 13 |
4 | Annina | mīlestība | P. | 1989/12/31 | |||
5 | Gerasimovsky | cerēt | P. | 1992/03/14 | 4 | Bieži daļas | Arkhangelsk apgabals, Novodvinsk, ul. Proletarshaya, 16 d., Q. 137 |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 | 4 | Bieži daļas | Arkhangelsk apgabals, Novodvinsk, ul. Proletarshaya, 16 d., Q. 137 |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 3 | Kopā kopīpašuma | Arkhangelsk apgabals, Severodvinska, st. Lenin, 134 d., Q. 85 |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 1 | īpašums | Arkhangelsk, ul. Voroņins, 7 d., Kv.6 |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Kopā kopīpašuma |
Arkhangelsk apgabals, Severodvinska, st. Lenin, 134 d., Q. 85 |
Kreisais pievienoties - tipisku lietošanu kļūda: nederīga procedūras tabula
Pamata pieļautās kļūdas kreisajā ārējā pievienoties galdi, divi:
- Pareizi izvēlēta tabulas pasūtījumu, kuram dati tika zaudēts.
- Ja kļūdas, izmantojot vaicājumu ar pievienoties tabulas.
Apsveriet pirmā kļūda. Pirms lēmuma par jebkuru problēmu, būtu skaidri jāsaprot, ka tas, ko mēs vēlamies, lai beigās. Augstāk Šajā piemērā, mēs ņēmām katru vienu no cilvēkiem, bet pilnībā zaudēja informāciju par objektu ar numuru 2, kura īpašnieks netika atrasts.
Ja mēs pārcēlās tabulas ir vaicājums, dažās vietās, un tas sākas ar «... No Realty kreisās pievienoties tautu ...» jebkuru vienu īpašumu, mēs nebūtu zaudējuši, jums nebūs pastāstīt par cilvēkiem.
Bet nav jābaidās no kreisās savienojumu, pāriet uz pilnīgu ārējās, kas ir iekļauta rezultātus un saskaņošanas, un nevis saskaņošanas līnijas.
Galu galā, apjoms parauga bieži ir ļoti liels, un papildu dati ir faktiski bezjēdzīgi. Galvenais - lai noskaidrotu, ko jūs vēlaties, lai iegūtu rezultātu: visu cilvēku sarakstu ar to pieejamā īpašuma vai visa īpašuma sarakstu ar to īpašniekiem (ja tādi ir).
Kreisais pievienoties - tipisku lietošanu kļūda: pieprasījums ir pareizi nosakot nosacījumus WHERE
Otrā kļūda ir saistīta arī ar datu zudumu, un ne vienmēr ir uzreiz redzams.
Atgriezīsimies pie vaicājumu, kad mēs pa kreisi, izmantojot savienojumu saņemti dati par visiem cilvēkiem un viņu esošo īpašumu. Iegaumējiet ar kreiso pievienoties sql piemērs:
NO Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Pieņemsim, ka mēs vēlamies, lai noskaidrotu pieprasījumu un nav izejas datus, kur likuma veids - "Īpašums". Ja mēs vienkārši pievienot, izmantojot pa kreisi pievienoties SQL, piemērs par šādu nosacījumu:
...
Ja tipa <> "Īpašums" |
mēs zaudēsim datus par cilvēkiem, kuriem nav īpašumu, jo vērtība Null Null nav salīdzināma šādi:
Query1 | ||||||
id | L_name | F_name | Middle_name | dzimšanas diena | id_realty | tips |
5 | Gerasimovsky | cerēt | P. | 1992/03/14 | 4 | Bieži daļas |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 | 4 | Bieži daļas |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 3 | Kopā kopīpašuma |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Kopā kopīpašuma |
Lai nepieļautu kļūdas šī iemesla dēļ, tas ir labākais, lai nekavējoties atlases stāvokli uz savienojumu. Mēs iesakām izskatīt šādus ar kreiso pievienoties sql piemērs.
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type NO tautu LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples un ierakstiet <> "Property") |
Rezultāts būs šāds:
Query1 | ||||||
id | L_name | F_name | Middle_name | dzimšanas diena | id_realty | tips |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | mīlestība | P. | 1989/12/31 | ||
5 | Gerasimovsky | cerēt | P. | 1992/03/14 | 4 | Bieži daļas |
6 | Gerasimovsky | Oļegs | Albertovich | 1985/01/29 | 4 | Bieži daļas |
7 | Sukhanovskaya | žūrija | A. | 1976/09/25 | 3 | Kopā kopīpašuma |
8 | Sukhanovskaya | Julia | Y. | 2001/01/10 | 3 | Kopā kopīpašuma |
Tādējādi, sekojot vienkārši pa kreisi pievienoties SQL Piemēram, mēs saņēmām sarakstu ar visiem cilvēkiem, kas pārvietojas tālāk, viens no šiem īpašumiem ir kapitāla / kopīpašumā.
Kā Nobeigumā vēlos vēlreiz, ka izlase jebkādu informāciju no datubāzes jāveic atbildīgi uzsvērt. Daudzas nianses atvērti priekšā mums ar kreisās pievienoties SQL vienkāršu piemēru, tad skaidrojums no kuriem viens - pirms sākat rakstīt pat pamata vaicājumu, jums ir uzmanīgi, lai saprastu, ko mēs vēlamies, lai beigās. Veiksmi!
Similar articles
Trending Now