697 Shares 938 views

LEFT JOIN (SQL) – un esempio, la descrizione dettagliata, l'uso dell'errore

In una vera e propria banca dati relazionale, tutte le informazioni sono distribuite su un tavolo separato. Molte delle tabelle sono esposti nella schema di comunicazione con l'altro. Tuttavia, con l'aiuto di query SQL è del tutto possibile per mettere un link tra i dati, non incorporati nel circuito. Questo viene fatto eseguendo una connessione unirsi, che permette di costruire una relazione tra un qualsiasi numero di tavoli, e persino collegare informazioni apparentemente disparate.

In questo articolo parleremo specificamente del join esterno sinistro. Prima di procedere alla descrizione di questo tipo di connessione, aggiungere in alcune tabelle di database.

Preparare le tabelle necessarie

Per esempio, nel nostro database, ci sono le informazioni sulle persone e le loro proprietà immobiliari. Sintesi basata sulle tre tabelle: Popoli (persone), Realty (immobiliare), Realty_peoples (relazioni tra le tabelle, le persone che da quello di proprietà appartiene). Assumere i seguenti dati memorizzati nelle tabelle del popolo:

popoli

id

L_name

f_nome

Middle_name

compleanno

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

1992/03/14

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

7

Sukhanovskaya

giuria

A.

1976/09/25

8

Sukhanovskaya

Julia

Y.

01.10.2001

Immobiliare:

immobili

id

indirizzo

1

Arkhangelsk, ul. Voronin, d. 7, kv.6

2

Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5

3

regione di Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

4

regione di Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

5

Arkhangelsk, pl. Terekhina, d. 89, q. 13

Relazioni persone – di proprietà:

Realty_peoples

id_peoples

id_realty

tipo

7

3

Totale comproprietà

8

3

Totale comproprietà

3

5

proprietà

7

1

proprietà

5

4

parti comuni

6

4

parti comuni

LEFT JOIN (Sql) – Descrizione

composto di sinistra ha la seguente sintassi:

Table_A LEFT JOIN table_B [{ON predicato} | {UTILIZZARE spisok_ con tolbtsov}]

E schematicamente come segue:

E questa espressione è tradotto come "Seleziona tutto, senza eccezione, linea di tabelle A e B per visualizzare solo le righe corrispondenti del predicato. Se la tabella è stata trovata nella tabella di stringhe di coppie A, quindi riempire le colonne risultanti Null – valori".

Il più delle volte, quando la connessione sinistra è indicato, usando viene utilizzato solo quando i nomi di colonna, che si prevede di effettuare la connessione sono la stessa cosa.

LEFT JOIN – esempi di utilizzo

Con il collegamento della sinistra possiamo vedere, tutte le persone dalla lista lì se Popoli proprietà. Per fare questo in sinistra join esempio di query SQL:

Popoli SELECT. *, Realty_peoples.id_realty, Realty_peoples.type

DA Popoli LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Con i seguenti risultati:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

proprietà

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

1992/03/14

4

parti comuni

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

parti comuni

7

Sukhanovskaya

giuria

A.

1976/09/25

1

proprietà

7

Sukhanovskaya

giuria

A.

1976/09/25

3

Totale comproprietà

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Totale comproprietà

Come si vede, Ivanova Darya Pugin Vladislav e Anninoy Lyubovi Nessuno diritti reali immobiliari.

E che cosa sarebbe abbiamo ricevuto, tramite un inner join join interno? Come sapete, esclude righe non corrispondenti, in modo da tre fuori del nostro campione finale sarebbe semplicemente essere eliminato:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

3

Evgenin

Alexander

Federovich

1964/04/30

5

proprietà

5

Gerasimovsky

sperare

P.

1992/03/14

4

parti comuni

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

parti comuni

7

Sukhanovskaya

giuria

A.

1976/09/25

1

proprietà

7

Sukhanovskaya

giuria

A.

1976/09/25

3

Totale comproprietà

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Totale comproprietà

Sembrerebbe che la seconda versione soddisfa anche le condizioni del nostro problema. Tuttavia, se cominciamo a montare su un altro, e un altro tavolo, tre persone dal risultato già irrimediabilmente andati. collegamento Left e Right Quindi, in pratica, quando si combinano più tabelle molto più spesso usato di join interno.

Continuerà a guardare a sinistra unirsi esempi SQL. Fissare una tabella con gli indirizzi delle nostre case:

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

DA Popoli

LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty

Ora otteniamo non solo una sorta di legge, ma anche l'indirizzo del real estate:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

indirizzo

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

proprietà

Arkhangelsk, pl. Terekhina, d. 89, q. 13

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

1992/03/14

4

parti comuni

regione di Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

parti comuni

regione di Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

7

Sukhanovskaya

giuria

A.

1976/09/25

3

Totale comproprietà

regione di Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

7

Sukhanovskaya

giuria

A.

1976/09/25

1

proprietà

Arkhangelsk, ul. Voronin, d. 7, kv.6

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Totale comproprietà

regione di Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

LEFT JOIN – l'utilizzo tipico di errore: non valida tabella di procedura

errori di base assunti in occasione del join esterno sinistro tavoli, due:

  1. Selezionato correttamente l'ordine delle tabelle per il quale è stato perso di dati.
  2. Dove gli errori quando si utilizza una query con unire le tabelle.

Consideriamo primo errore. Prima della decisione di qualsiasi problema dovrebbe essere chiaramente compreso che ciò che vogliamo ottenere alla fine. In questo esempio di cui sopra, abbiamo preso ogni una delle persone, ma completamente perso le informazioni circa l'oggetto con il numero 2, il cui proprietario non è stato trovato.

Se abbiamo spostato le tabelle in una query in alcuni luoghi, e sarebbe iniziare con «… Da Realty lasciato unirsi popoli …» qualsiasi proprietà, non avremmo perso, non sarà possibile raccontare la gente.

Ma non avere paura della connessione sinistra, passare a pieno esterno, che è incluso nei risultati e la corrispondenza, e non le righe.

Dopo tutto, il volume di campione è spesso molto grandi, ed i dati in più è in realtà inutile. La cosa principale – per capire cosa si vuole ottenere un risultato: di tutte le persone con una lista di loro proprietà a disposizione o l'intero elenco delle proprietà con i loro proprietari (se presente).

LEFT JOIN – l'utilizzo tipico di errore: Richiesta è corretto quando si impostano le condizioni in Dove

Il secondo errore è anche associata con perdita di dati, e non sono sempre immediatamente evidenti.

Torniamo alla query quando abbiamo lasciato tramite connessioni dati ricevuti per tutte le persone e le loro proprietà esistente. Ricordate quanto segue con sinistra unirsi esempio SQL:

DA Popoli LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Supponiamo di voler chiarire la richiesta e non l'uscita dei dati, in cui il tipo di legge – "Proprietà". Se noi semplicemente aggiungere, utilizzando LEFT JOIN SQL, un esempio delle seguenti condizioni:

Dove tipo "Proprietà"

perderemo i dati su persone che non hanno alcuna proprietà, perché il Null valore nullo non viene confrontata come segue:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

5

Gerasimovsky

sperare

P.

1992/03/14

4

parti comuni

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

parti comuni

7

Sukhanovskaya

giuria

A.

1976/09/25

3

Totale comproprietà

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Totale comproprietà

Per evitare che si verifichino errori per questo motivo, è preferibile impostare immediatamente la condizione di selezione al momento della connessione. Si consiglia di considerare quanto segue con la sinistra unirsi esempio SQL.

Popoli SELECT. *, Realty_peoples.id_realty, Realty_peoples.type

DA Popoli

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples tipo AND "Proprietà")

Il risultato sarà il seguente:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

1992/03/14

4

parti comuni

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

parti comuni

7

Sukhanovskaya

giuria

A.

1976/09/25

3

Totale comproprietà

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Totale comproprietà

Così, seguendo la semplice a sinistra unirsi ad esempio SQL, abbiamo ricevuto una lista di tutte le persone, avvicinarsi sempre più, una di queste proprietà a un patrimonio netto / comproprietà.

In conclusione vorrei sottolineare ancora una volta che un campione di qualsiasi informazione dal database devono essere prese in modo responsabile. Molte sfumature aperti davanti a noi con la sinistra si uniscono semplice esempio SQL, la spiegazione di cui uno – prima di iniziare a scrivere, anche un'interrogazione di base, è necessario con attenzione per capire che cosa vogliamo ottenere alla fine. Buona fortuna!