Integrarea la stânga (SQL) - exemplu, descriere detaliată, erori de utilizare

În orice bază de date relațională reală, toate informațiile sunt distribuite pe tabele separate. Multe dintre mese au stabilit relații în circuit unul cu celălalt. Cu toate acestea, cu ajutorul Întrebări SQL

este foarte posibil să se stabilească o legătură între datele care nu sunt cuprinse în schemă. Acest lucru se realizează prin efectuarea unei operațiuni de îmbinare, care vă permite să construiți relații între orice număr de tabele și să conectați chiar date aparent disparate.

În acest articol vom vorbi în mod special despre conexiunea externă stângă. Înainte de a începe să descriem acest tip de conexiune, adăugăm câteva tabele la baza de date.

Pregătirea tabelelor necesare

De exemplu, în baza noastră de date există informații despre persoane și proprietatea imobiliară. 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 că următoarele date sunt stocate în tabele pentru persoane:

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

Arhangelsk, st. Voronina, 7, ap. 6

2

Arhangelsk, st. Severodvinskaya, 84, Apt. 9, cameră. 5

3

Regiunea Arhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85

4

Regiunea Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

5

Arhangelsk, pl. Terekhin, d. 89, apt. 13

Pentru relatii, oamenii sunt imobiliari:

Realty_peoples

id_peoples

id_realty

tip

7

3

Proprietate comună comună

8

3

Proprietate comună comună

3

5

proprietate

7

1

proprietate

5

4

Proprietate comună

6

4

Proprietate comună

Intrarea în stânga (sql) - descriere

stânga alăturați exemplu sql

Conexiunea din stânga are următoarea sintaxă:

Table_A LEFT JOIN table_B [{ON predicat} | {FOLOSIND spisok_cutolbtsov}]

Și arată astfel:stânga alăturați exemplele SQL

Și această expresie este tradusă ca "Selectați toate rândurile din tabelul A fără excepție și extrageți numai rânduri care se potrivesc cu predicatul din tabelul B. Dacă în tabelul B nu există perechi pentru rândurile din tabelul A, atunci completați coloanele Null care rezultă cu valori. "

Cel mai adesea, atunci când este efectuată conexiunea la stânga, se specifică ON, USING este utilizată numai atunci când numele coloanelor pentru care este planificată conexiunea sunt aceleași.

Intrarea în stânga - exemple de utilizare

Cu ajutorul legăturii din stânga, putem vedea dacă toți oamenii de pe lista popoarelor au proprietăți imobiliare. Pentru a face acest lucru, executați exemplul următor în partea de stânga join sql:

SELECT popoare. *, Realty_peoples.id_realty, Realty_peoples.type

DE PE POPULAȚI LIVE JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Și obținem următorul rezultat:

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

Proprietate comună

6

Gerasimovsky

Oleg

Albertovich

01/29/1985

4

Proprietate comună

7

Sukhanovskaya

juriu

A.

09/25/1976

1

proprietate

7

Sukhanovskaya

juriu

A.

09/25/1976

3

Proprietate comună comună

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Proprietate comună comună

După cum vedem, u Ivanova Darya, Pugin Vladislav și Annina Lyubov nu au drepturi înregistrate asupra imobilelor.

Și ce am putea să folosim pentru un cuplu interior? După cum știți, exclude liniile nepotrivite, astfel încât trei persoane din eșantionul nostru final ar cădea pur și simplu:

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

Proprietate comună

6

Gerasimovsky

Oleg

Albertovich

01/29/1985

4

Proprietate comună

7

Sukhanovskaya

juriu

A.

09/25/1976

1

proprietate

7

Sukhanovskaya

juriu

A.



09/25/1976

3

Proprietate comună comună

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Proprietate comună comună

Se pare că a doua opțiune îndeplinește, de asemenea, condițiile din sarcina noastră. Cu toate acestea, dacă vom continua să adăugăm mai multe mese, trei persoane din rezultat vor dispărea deja iremediabil. Prin urmare, în practică, atunci când se combină mai multe tabele, conexiunile din stânga și din dreapta sunt mult mai des folosite decât intrările interioare.

Continuăm să luăm în considerare exemplele cu sql. Alăturați-vă la masă cu adresele proprietăților noastre:

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

Din popoare

LEFT JOIN Realty_peoples PE Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty pe Realty.id = Realty_peoples.id_realty

Acum nu numai că avem forma dreptului, ci și adresele imobilelor:

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

Arhangelsk, pl. Terekhin, d. 89, apt. 13

4

Annina

dragoste

P.

31.12.1989

5

Gerasimovsky

speranță

P.

14.03.1992

4

Proprietate comună

Regiunea Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

6

Gerasimovsky

Oleg

Albertovich

01/29/1985

4

Proprietate comună

Regiunea Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

7

Sukhanovskaya

juriu

A.

09/25/1976

3

Proprietate comună comună

Regiunea Arhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85

7

Sukhanovskaya

juriu

A.

09/25/1976

1

proprietate

Arhangelsk, st. Voronina, 7, ap. 6

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Proprietate comună comună

Regiunea Arhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85

Intrarea în stânga - erori de utilizare tipice: ordine greșită a tabelelor

Principalele erori admise cu intrarea exterioară stângă a meselor sunt două:

  1. Ordinea tabelelor din cauza cărora au fost pierdute datele este selectată incorect.
  2. Erori la utilizarea Unde într-o interogare cu tabele fuzionate.

Luați în considerare prima eroare. Înainte de a rezolva orice problemă, merită să înțelegeți clar ce anume vrem să obținem ca rezultat. În exemplul de mai sus, am scos toți oamenii, dar am pierdut absolut informații despre obiect sub numărul 2, din care proprietarul nu a fost găsit.

Dacă am mutat tabelele în locurile de interogare și am început cu "hellip- From Realty lăsăm să ne alăturăm Peopleshellip", atunci nu am pierde o singură proprietate, pe care nu o poți spune despre oameni.

stânga alăture unui exemplu de cerere SQL

Cu toate acestea, nu vă temeți de conexiunea din stânga, mergeți la plinul extern, care va include ca rezultat și coincide și nu se potrivesc liniei.

La urma urmei dimensiunea eșantionului adesea foarte mari, iar datele inutile nu contează. Principalul lucru este să înțelegeți ce doriți să primiți: toți cei care au o listă cu bunurile imobile disponibile sau o listă a tuturor bunurilor imobile cu proprietarii lor (dacă există).

Intrarea în stânga - erori de utilizare tipice: corectitudinea interogării la setarea condițiilor în Unde

A doua eroare este, de asemenea, legată de pierderea datelor și nu întotdeauna evidentă.

Să ne întoarcem la interogare, când folosim conexiunea din stânga primită de date tuturor persoanelor și a proprietăților imobiliare existente. Amintiți-vă cu următorul exemplu cu exemplu:

DE PE POPULAȚI LIVE JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Să presupunem că dorim să perfecționăm interogarea și nu datele de ieșire, unde tipul de lege este "proprietate". Dacă adăugăm pur și simplu, aplicând sql conexiune la stânga, un exemplu următoarea condiție:

...

În cazul în care tipul <> "Proprietatea"

vom pierde date despre persoane care nu au nici o proprietate imobiliară, deoarece valoarea goală a lui Null nu se compară în felul următor:

Query1

id

L_NAME

F_name

Middle_name

zi de naștere

id_realty

tip

5

Gerasimovsky

speranță

P.

14.03.1992

4

Proprietate comună

6

Gerasimovsky

Oleg

Albertovich

01/29/1985

4

Proprietate comună

7

Sukhanovskaya

juriu

A.

09/25/1976

3

Proprietate comună comună

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Proprietate comună comună

Pentru a preveni apariția erorilor din acest motiv, este mai bine să specificați condiția de selecție imediat după conectare. Vă sugerăm să luați în considerare următorul exemplu cu sql alianța stângă.

SELECT popoare. *, Realty_peoples.id_realty, Realty_peoples.type

Din popoare

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples ȘI tip <> "Proprietate")

Rezultatul este următorul:

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

Proprietate comună

6

Gerasimovsky

Oleg

Albertovich

01/29/1985

4

Proprietate comună

7

Sukhanovskaya

juriu

A.

09/25/1976

3

Proprietate comună comună

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Proprietate comună comună

Astfel, executând un exemplu simplu cu sql alături de stânga, avem o listă a tuturor oamenilor, deducând în plus, care dintre ele are proprietăți imobiliare în proprietate partajată / comună.

stânga se alăture SQL explicație exemplu simplu

În concluzie, aș dori să subliniez încă o dată că este necesar să se ia în mod responsabil alegerea oricăror informații din baza de date. Multe nuanțe s-au deschis înaintea noastră prin folosirea unui exemplu simplu, explicația căruia este unul - înainte de a începe să compunem chiar și o interogare elementară, trebuie să înțelegem cu atenție exact ceea ce vrem să obținem ca rezultat. Mult noroc!

Distribuiți pe rețelele sociale:

înrudit
Baza de date normalizareBaza de date normalizare
Cum combinați două tabele în "Word" orizontal sau verticalCum combinați două tabele în "Word" orizontal sau vertical
Crearea unei baze de date MySQL face parte din orice siteCrearea unei baze de date MySQL face parte din orice site
Bazele de date sunt relaționale. Conceptul de bază de date relaționalăBazele de date sunt relaționale. Conceptul de bază de date relațională
DB este ... Tipuri și proprietăți ale bazei de dateDB este ... Tipuri și proprietăți ale bazei de date
SQL unde: metode de aplicare și exempleSQL unde: metode de aplicare și exemple
MySQL JOIN: o descriere, un exemplu de utilizare a comenzii și recomandăriMySQL JOIN: o descriere, un exemplu de utilizare a comenzii și recomandări
Instrucțiunea SQL INNER JOIN: exemple, sintaxă și caracteristiciInstrucțiunea SQL INNER JOIN: exemple, sintaxă și caracteristici
MS Access. Baze de date MS Access. MS Access 2007MS Access. Baze de date MS Access. MS Access 2007
Cum se conectează două tabele în "Word" (2003, 2007, 2010)?Cum se conectează două tabele în "Word" (2003, 2007, 2010)?
» » Integrarea la stânga (SQL) - exemplu, descriere detaliată, erori de utilizare