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:
- Selezionato correttamente l'ordine delle tabelle per il quale è stato perso di dati.
- 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!