RICERCA SITO

Left join (SQL) - esempio, descrizione dettagliata, errori di utilizzo

In ogni vero database relazionale, tuttol'informazione è divisa in tabelle separate. Molte delle tabelle hanno stabilito relazioni nel circuito tra loro. Tuttavia, con l'aiuto delle query Sql, è abbastanza possibile creare una connessione tra i dati che non sono contenuti nello schema. Ciò viene eseguito eseguendo un'operazione di join join, che consente di creare relazioni tra qualsiasi numero di tabelle e di connettere anche dati apparentemente disparati.

In questo articolo parleremo in modo specifico della connessione esterna sinistra. Prima di iniziare a descrivere questo tipo di connessione, aggiungiamo alcune tabelle al database.

Preparare le tabelle necessarie

Diciamo che il nostro database ha informazionisulle persone e il loro patrimonio immobiliare. Le informazioni di base si basano su tre tabelle: Popoli (persone), Realtà (beni immobili), Realty_peoples (la tabella con la relazione a chi delle persone quale proprietà appartiene). Supponiamo che i seguenti dati siano memorizzati in tabelle per le persone:

popoli

id

L_name

f_nome

Middle_name

compleanno

1

Ivanova

Daria

B.

16.07.2000

2

Pugin

Vladislav

Nikolaevich

29.01.1986

3

Evgenin

Alexander

Federovich

30.04.1964

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

14.03.1992

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

7

Sukhanovskaya

giuria

A.

25.09.1976

8

Sukhanovskaya

Julia

Y.

01.10.2001

Immobiliare:

immobili

id

indirizzo

1

Arkhangelsk, st. Voronina, 7, ap 6

2

Arkhangelsk, st. Severodvinskaya, 84, App. 9, stanza. 5

3

Regione di Arkhangelsk, Severodvinsk, ul. Lenina, D. 134, apt. 85

4

Regione di Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

5

Arkhangelsk, pl. Terekhin, D. 89, apt. 13

Per le relazioni, le persone sono proprietà immobiliari:

Realty_peoples

id_peoples

id_realty

tipo

7

3

Comune proprietà comune

8

3

Comune proprietà comune

3

5

proprietà

7

1

proprietà

5

4

Proprietà condivisa

6

4

Proprietà condivisa

Join sinistro (Sql) - descrizione

left join sql example

La connessione sinistra ha la seguente sintassi:

Table_A LEFT JOIN table_B [{ON predicato} | {USING elenco_con iltolbtsov}]

E sembra questo:

left join sql examples

E questa espressione è tradotta come "Seleziona tuttosenza righe di eccezione dalla tabella A e dalla tabella B, vengono visualizzate solo le righe corrispondenti al predicato. Se nella tabella B non esisteva alcuna coppia per le righe della tabella A, allora riempire le colonne Null risultanti con i valori. "

Molto spesso, quando viene eseguita la connessione a sinistra, viene specificato ON, USING viene utilizzato solo quando i nomi di colonna per i quali è pianificata la connessione sono gli stessi.

Sinistra join - esempi di utilizzo

Con l'aiuto della connessione a sinistra, possiamo vedere se tutte le persone nella lista dei Popoli hanno beni immobili. Per fare ciò, eseguire il seguente esempio nel sql di join sinistro:

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

DAI POPOLI SINISTRA: Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

E otteniamo il seguente risultato:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

1

Ivanova

Daria

B.

16.07.2000

2

Pugin

Vladislav

Nikolaevich

29.01.1986

3

Evgenin

Alexander

Federovich

30.04.1964

5

proprietà

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

14.03.1992

4

Proprietà condivisa

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

Proprietà condivisa

7

Sukhanovskaya

giuria

A.

25.09.1976

1

proprietà

7

Sukhanovskaya

giuria

A.

25.09.1976

3

Comune proprietà comune

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Comune proprietà comune

Come potete vedere, Ivanova Darya, Pugin Vladislav e Annina Lyubov non hanno alcun diritto registrato al settore immobiliare.

E cosa otterremmo usando un join di Inner join? Come sai, esclude le righe non corrispondenti, quindi tre persone del nostro campione finale semplicemente cadono:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

3

Evgenin

Alexander

Federovich

30.04.1964

5

proprietà

5

Gerasimovsky

sperare

P.

14.03.1992

4

Proprietà condivisa

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

Proprietà condivisa

7

Sukhanovskaya

giuria

A.

25.09.1976

1

proprietà

7

Sukhanovskaya

giuria

A.

25.09.1976

3

Comune proprietà comune

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Comune proprietà comune

Sembrerebbe che anche la seconda opzione rispondacondizioni del nostro compito. Tuttavia, se continuiamo ad aggiungere sempre più tavoli, tre persone dal risultato spariranno irrimediabilmente. Pertanto, in pratica, quando si combinano più tabelle, le connessioni sinistra e destra vengono utilizzate molto più spesso di Inner join.

Continuiamo a considerare esempi con left join sql. Unisciti al tavolo con gli indirizzi delle nostre proprietà:

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

DALLE POPOLI

SINISTRA UNISCITI Realty_peoples ON Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty

Ora otteniamo non solo la forma del diritto, ma anche gli indirizzi del settore immobiliare:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

indirizzo

1

Ivanova

Daria

B.

16.07.2000

2

Pugin

Vladislav

Nikolaevich

29.01.1986

3

Evgenin

Alexander

Federovich

30.04.1964

5

proprietà

Arkhangelsk, pl. Terekhin, D. 89, apt. 13

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

14.03.1992

4

Proprietà condivisa

Regione di Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

Proprietà condivisa

Regione di Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, Apt. 137

7

Sukhanovskaya

giuria

A.

25.09.1976

3

Comune proprietà comune

Regione di Arkhangelsk, Severodvinsk, ul. Lenina, D. 134, apt. 85

7

Sukhanovskaya

giuria

A.

25.09.1976

1

proprietà

Arkhangelsk, st. Voronina, 7, ap 6

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Comune proprietà comune

Regione di Arkhangelsk, Severodvinsk, ul. Lenina, D. 134, apt. 85

Sinistra join - errori di utilizzo tipici: ordine errato delle tabelle

Gli errori principali consentiti con il join esterno sinistro delle tabelle sono due:

  1. L'ordine delle tabelle a causa del quale i dati sono stati persi è stato selezionato in modo errato.
  2. Errori durante l'utilizzo di Where in una query con tabelle unite.

Considera il primo errore. Prima di risolvere qualsiasi problema, vale la pena capire chiaramente cosa esattamente vogliamo ottenere come risultato. Nell'esempio sopra, abbiamo eliminato tutte le persone, ma abbiamo perso assolutamente informazioni sull'oggetto sotto il numero 2, da cui il proprietario non è stato trovato.

Se spostassimo le tabelle nei posti della query e iniziassimo con "... Da parte di Realty, lasciate Peoples ...", non perderemmo una proprietà singola, che non si può dire delle persone.

left join sql request example

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 dei campioni è spesso molto grande ed extradati effettivi a nulla. 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).

Sinistra join - errori di utilizzo tipici: la correttezza della query quando si impostano le condizioni in Dove

Il secondo errore è anche legato alla perdita di dati e non sempre immediatamente ovvio.

Torniamo alla query, quando usiamo la connessione di sinistra dati ricevuti su tutte le persone e le loro proprietà immobiliari esistenti. Ricorda quanto segue con l'esempio di sql di join sinistro:

DAI POPOLI SINISTRA: Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Supponiamo di voler perfezionare la query e non di produrre dati, dove il tipo di legge è "Proprietà". Se aggiungiamo semplicemente, applicando left join sql, un esempio della seguente condizione:

...

Dove tipo <> "Proprietà"

perderemo dati su persone che non hanno alcun immobile, perché il valore vuoto di Null non si confronta in questo modo:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

5

Gerasimovsky

sperare

P.

14.03.1992

4

Proprietà condivisa

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

Proprietà condivisa

7

Sukhanovskaya

giuria

A.

25.09.1976

3

Comune proprietà comune

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Comune proprietà comune

Per evitare che si verifichino degli errori per questo motivo, è meglio specificare la condizione di selezione immediatamente dopo la connessione. Suggeriamo di considerare il seguente esempio con il join sinistro sql.

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

DALLE POPOLI

LISTA SINISTRA Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples AND type <> "Property")

Il risultato è il seguente:

Query1

id

L_name

f_nome

Middle_name

compleanno

id_realty

tipo

1

Ivanova

Daria

B.

16.07.2000

2

Pugin

Vladislav

Nikolaevich

29.01.1986

3

Evgenin

Alexander

Federovich

30.04.1964

4

Annina

amare

P.

31.12.1989

5

Gerasimovsky

sperare

P.

14.03.1992

4

Proprietà condivisa

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

Proprietà condivisa

7

Sukhanovskaya

giuria

A.

25.09.1976

3

Comune proprietà comune

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Comune proprietà comune

Quindi, eseguendo un semplice esempio con il join di sinistra sql, abbiamo ottenuto un elenco di tutte le persone, deducendo inoltre, quale di loro ha un immobile in proprietà condivisa / condominiale.

left join sql semplice spiegazione di esempio

Per concludere vorrei nuovamenteper sottolineare che è necessario prendere responsabilmente la scelta di qualsiasi informazione dal database. Molte sfumature si sono aperte davanti a noi con l'uso di left join sql un semplice esempio, la cui spiegazione è una - prima di iniziare a comporre anche una query elementare, dobbiamo capire attentamente cosa esattamente vogliamo ottenere come risultato. Buona fortuna!

</ p>
  • valutazione: