QGIS: join (unioni tabellari e non solo)

I dataset che utilizziamo nel nostro lavoro potrebbero essere incompleti oppure vogliamo semplicemente ampliarli con altri dati (es: csv, xls, ods ecc..) tramite una semplice ‘unione‘ di tabelle sfruttando un campo correlato. Questa operazione è conosciuta come Join tabellare: vediamo come funziona in QGIS.

Un po’ di teoria:

SQL JOIN

Una clausola JOIN viene utilizzata per combinare righe da due o più tabelle, in base a una colonna correlata tra di essi; ecco diversi tipi di JOIN in SQL:

  • (INTERNO) JOIN : restituisce i record che hanno valori corrispondenti in entrambe le tabelle
  • LEFT (OUTER) JOIN : restituisce tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra
  • RIGHT (OUTER) JOIN : restituisce tutti i record dalla tabella di destra e i record corrispondenti dalla tabella sinistra
  • FULL (OUTER) JOIN : restituisce tutti i record quando c’è una corrispondenza nella tabella sinistra o destra
join_sql
schemi logici

QGIS, quale utilizza per fare la JOIN tabellare?

procediamo con degli esempi, cosi si capirà meglio:

Creare-tabelle-responsive-in-Wordpress
tabelle in JOIN – tabella di destra e di sinistra

date due tabelle (come in figura) chiameremo la prima tabella: tabella di sinistra (SX) e la seconda: tabella di destra (DX).

 I casi possibili sono:

la tabella di SX ha ‘n’ righe e quella di DX ha ‘m’ righe:

  1. n = m; (situazione ideale)
  2. n < m;
  3. n > m;

Analizziamo il primo caso n = m :

la colonna correlata è CIR_ID, realizziamo la JOIN in QGIS:

JOIN1
join

dopo OK, ecco la tabella di SX:

tabe_sx_join
Tabella di SX dopo JOIN

quindi il numero di righe della tabella di SX è uguale al numero di righe della tabella di DX: rientriamo nel caso:

  • LEFT (OUTER) JOIN : restituisce tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra.

Analizziamo il primo caso n < m :

aggiungo due record alla tabella di DX:

tab_sx_mod1
tabella di DX con due righe in più rispetto alla tabella di SX

ripeto la stessa procedura per realizzare la JOIN in QGIS:

JOIN_3
join

dopo OK, ecco la tabella di SX:

tabe_sx_join3
tabella di SX dopo JOIN

quindi il numero di righe della tabella di SX è rimasta uguale (8 righe) e il numero di righe della tabella di DX (10) corrispondono secondo la colonna correlata: rientriamo nel caso:

  • LEFT (OUTER) JOIN : restituisce tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra.

Analizziamo il secondo caso n > m :

sottraggo due record alla tabella di DX in modo da avere solo 6 record:

tab_dx_mod2
tabella di DX – senza la riga 4 e 7

ripeto la stessa procedura per realizzare la JOIN in QGIS e ottengo:

tabe_sx_join4
tabella di SX dopo JOIN

quindi il numero di righe della tabella di SX è rimasta uguale (8 righe) e il numero di righe della tabella di DX (6) corrispondono secondo la colonna correlata, dove manca la correlazione viene messo NULL in modo da NON modificare il numero di righe della tabella di SX: rientriamo nel caso:

  • LEFT (OUTER) JOIN : restituisce tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra.

 

CONCLUDENDO: la JOIN tabellare in QGIS è una LEFT JOIN

Immagine002

Il numero di righe della tabella di SX NON cambierà mai sarà, di volta in volta, il numero di righe della tabella in JOIN (quella di DX) ad adeguarsi alla tabella di SX.

Buon lavoro!!!

 


PS: da un sondaggio (fatto per scherzare, quindi non ha molto valore) , durato 24 ore e somministrato in un gruppo in cui si parla di GIS (e in particolare di QGIS), su un totale di 21 risposte il 43% NON sa che la JOIN utilizzata da QGIS è una LEFT JOIN.

4 pensieri su “QGIS: join (unioni tabellari e non solo)

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.