Calculatoare, Programare
Alăture stânga (SQL) - un exemplu, descrierea detaliată, utilizarea erorii
În orice bază de date relațională reală, toate informațiile sunt distribuite pe un tabel separat. Multe dintre tabele sunt prezentate în schema de comunicare unul cu celălalt. Cu toate acestea, cu ajutorul interogarilor este destul de posibil să se pună o legătură între datele, care nu sunt înglobate în circuit. Acest lucru se face prin efectuarea unei conexiuni se alăture, care vă permite să construiască o relație între orice număr de tabele, și chiar conectați informații aparent disparate.
Acest articol va vorbi în mod specific despre exterior din stânga se alăture. Înainte de a trece la descrierea acestui tip de conexiune, se adaugă în anumite tabele de baze de date.
Pregătirea tabelelor necesare
De exemplu, în baza noastră de date, există informații despre oameni și bunuri lor reale. Rezumat bazat pe cele trei tabele: Popoarelor (oameni), Realty (imobiliare), Realty_peoples (relații de masă, oameni care din ce proprietate aparține). Să presupunem următoarele date stocate în tabelele de oameni:
Peoples | ||||
id | L_NAME | F_name | Middle_name | zi de naștere |
1 | Ivanova | Daria |
B. | 07/16/2000 |
2 | Pugin | Vladislav | Nikolaevici | 29.01.1986 |
3 | Evgenin | Alexander | Federovich | 04/30/1964 |
4 | Annina | dragoste | P. | 31.12.1989 |
5 | Gerasimovsky | speranță | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 |
Imobiliare:
proprietate imobilă | |
id | adresa |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | regiunea Arhanghelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | regiunea Arhanghelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
oameni - Relații de proprietate:
Realty_peoples | ||
id_peoples | id_realty | tip |
7 | 3 | Total drepturi de proprietate comună |
8 | 3 | Total drepturi de proprietate comună |
3 | 5 | proprietate |
7 | 1 | proprietate |
5 | 4 | Piese comune |
6 | 4 | Piese comune |
Stânga se alăture (Sql) - Descriere
compus stanga are următoarea sintaxă:
Table_A STÂNGA TE table_B [{ON predicat} | {FOLOSIND spisok_ cu tolbtsov}] |
Și, în mod schematic după cum urmează:
Și această expresie este tradus ca „Selectare toate, fără excepție, linia din tabelul A și tabelul B pentru a afișa numai rândurile care se potrivesc de predicatului. Dacă tabela a fost găsită în tabela string pentru perechile A, apoi umple coloanele rezultate Null - valori“.
Cel mai adesea, atunci când conexiunea la stânga este indicat pe, utilizați este utilizat numai în cazul în care numele coloanelor, care este planificat pentru a face conexiunea sunt la fel.
alăture stânga - exemple de utilizare
Prin conexiunea de stânga putem vedea, toți oamenii din listă, dacă există Peoples proprietate. Pentru a face acest lucru în stânga se alăture exemplu de interogare sql:
Popoarele SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DIN STÂNGA Peoples TE Realty_peoples PE Peoples.id = Realty_peoples.id_peoples; |
Cu următoarele rezultate:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | zi de naștere | id_realty | tip |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevici | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | proprietate |
4 | Annina | dragoste | P. | 31.12.1989 | ||
5 | Gerasimovsky | speranță | P. | 14.03.1992 | 4 | Piese comune |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Piese comune |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 1 | proprietate |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 3 | Total drepturi de proprietate comună |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total drepturi de proprietate comună |
După cum vom vedea, Ivanova Darya Pugin Vladislav și Anninoy Lyubovi nr înregistrat drepturi imobiliare.
Și ce ar am primit, folosind un interior se alăture se alăture interior? După cum știți, exclude rândurile care nu se potrivesc, deci trei din eșantionul nostru final va fi pur și simplu a scăzut:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | zi de naștere | id_realty | tip |
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | proprietate |
5 | Gerasimovsky | speranță | P. | 14.03.1992 | 4 | Piese comune |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Piese comune |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 1 | proprietate |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 3 | Total drepturi de proprietate comună |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total drepturi de proprietate comună |
S-ar părea că a doua versiune îndeplinește, de asemenea, condițiile de problema noastră. Cu toate acestea, în cazul în care vom începe să se atașeze pe un alt, și o altă masă, trei persoane din rezultatul deja plecat definitiv. Prin urmare, în practică, atunci când se combină mai multe mese mult mai des utilizate conexiune stânga și la dreapta decât interioară se alăture.
Va continua să se uite la stânga se alăture exemple sql. Atașați un tabel cu adresele caselor noastre:
Popoarele SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address DE LA Peoples STÂNGA TE Realty_peoples PE Peoples.id = Realty_peoples.id_peoples STÂNGA TE Realty ON Realty.id = Realty_peoples.id_realty |
Acum vom obține nu numai un fel de drept, dar, de asemenea, adresa de bunuri imobiliare:
Query1 | |||||||
id | L_NAME | F_name | Middle_name | zi de naștere | id_realty | tip | adresa |
1 | Ivanova | Daria | B. | 07/16/2000 | |||
2 | Pugin | Vladislav | Nikolaevici | 29.01.1986 | |||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | proprietate | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | dragoste | P. | 31.12.1989 | |||
5 | Gerasimovsky | speranță | P. | 14.03.1992 | 4 | Piese comune | regiunea Arhanghelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Piese comune | regiunea Arhanghelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 3 | Total drepturi de proprietate comună | regiunea Arhanghelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 1 | proprietate | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total drepturi de proprietate comună |
regiunea Arhanghelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
alăture stânga - utilizarea tipică de eroare: tabelul de procedură nevalid
greșelile de bază realizate la exterior din stânga se alăture mese, două:
- selectat corect ordinea de tabele pentru care a fost pierdut date.
- În cazul în care erorile atunci când se utilizează o interogare cu tabele se alăture.
Luați în considerare prima greșeală. Înainte de decizia cu privire la orice problemă ar trebui să fie înțeles în mod clar că ceea ce vrem să ajungem în cele din urmă. În acest exemplu de mai sus, am luat fiecare dintre oameni, dar a pierdut complet informația despre obiect sub numărul 2, al cărui proprietar nu a fost găsit.
Dacă ne-am mutat tabelele într-o interogare, în unele locuri, și ar începe cu «... De la Realty a plecat ...» se alăture Peoples orice proprietate, nu ne-ar fi pierdut, nu va spune despre oameni.
Dar nu se sperie de excentrică, a comuta la exterior, care este inclus în rezultatele și de potrivire, nu și liniile ce se potrivesc.
La urma urmei, volumul eșantionului este de multe ori foarte mare, iar datele suplimentare este de fapt inutil. Principalul lucru - pentru a descoperi ceea ce doriți să obțineți un rezultat: tuturor persoanelor cu o listă a proprietății lor disponibile sau întreaga listă proprietate cu proprietarii lor (dacă este cazul).
alăture stânga - utilizarea tipică de eroare: Cerere este corectă atunci când stabilirea condițiilor în Where
A doua eroare este, de asemenea, asociată cu pierderea de date, și nu sunt întotdeauna vizibile imediat.
Să ne întoarcem la interogarea atunci când am plecat prin intermediul conexiunilor de date primite pentru toți oamenii și proprietatea lor existente. Amintiți-vă următorul text cu stânga se alăture exemplu sql:
DIN STÂNGA Peoples TE Realty_peoples PE Peoples.id = Realty_peoples.id_peoples; |
Să presupunem că vrem să clarifice cererea și nu emite datele, în cazul în care tipul de drept - „proprietate“. Dacă vom adăuga pur și simplu, folosind din stânga se alăture sql, un exemplu de următoarea condiție:
...
În cazul în care tipul <> „proprietate“ |
vom pierde datele privind persoanele care nu au nici o proprietate, deoarece Nul valoare nulă nu se compară după cum urmează:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | zi de naștere | id_realty | tip |
5 | Gerasimovsky | speranță | P. | 14.03.1992 | 4 | Piese comune |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Piese comune |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 3 | Total drepturi de proprietate comună |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total drepturi de proprietate comună |
Pentru a preveni apariția erorilor din acest motiv, cel mai bine este să setați condiția de selecție imediat după conectare. Vă sugerăm să ia în considerare următoarele cu stânga se alăture exemplu sql.
Popoarele SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DE LA Peoples STÂNGA TE Realty_peoples PE (Peoples.id = Realty_peoples.id_peoples și tipul <> "proprietate") |
Rezultatul va fi după cum urmează:
Query1 | ||||||
id | L_NAME | F_name | Middle_name | zi de naștere | id_realty | tip |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevici | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | ||
4 | Annina | dragoste | P. | 31.12.1989 | ||
5 | Gerasimovsky | speranță | P. | 14.03.1992 | 4 | Piese comune |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Piese comune |
7 | Sukhanovskaya | juriu | A. | 09/25/1976 | 3 | Total drepturi de proprietate comună |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total drepturi de proprietate comună |
Astfel, urmând simplu la stânga se alăture exemplu sql, am primit o listă a tuturor oamenilor, se deplasează în continuare, una dintre aceste proprietăți într-un capital propriu / proprietate comună.
Ca o concluzie, aș dori să subliniez încă o dată că un eșantion de informații din baza de date trebuie să fie luate în mod responsabil. Multe nuanțe deschise în fața noastră cu stânga se alăture exemplu simplu sql, dintre care una explicația - înainte de a începe să scrie chiar interogare de bază, trebuie să vă cu atenție pentru a înțelege ce vrem să ajungem în cele din urmă. Mult noroc!
Similar articles
Trending Now