Informazioni diverse possono stare in tabelle diverse e, per metterle insieme, si usa INNER JOIN ... ON. Unire le tabelle è il cuore di SQL, ma può diventare molto complicato. Cominciamo con un esempio semplice, e cominciamo da un INNER JOIN.
Come vedi qui sotto ci sono 3 tabelle:
character: ogni personaggio è una riga ed è identificato da un identificatore univoco (id), ad esempio 1 è Doogie Howser
character_tv_show: per ogni personaggio, in quale serie compare?
character_actor: per ogni personaggio, chi è l’attore?
Nota che in character_tv_show, invece di memorizzare sia il nome del personaggio sia quello della serie (ad esempio Willow Rosenberg e Buffy the Vampire Slayer), viene memorizzato character_id al posto del nome del personaggio. Questo character_id fa riferimento alla riga con lo stesso id nella tabella character.
Si fa così per non duplicare i dati. Per esempio, se il nome di un personaggio cambiasse, dovresti cambiarlo in una sola riga.
Questo ci permette di “unire” (“join”) le tabelle “su” (“on”) quella colonna comune di riferimento.
Per ottenere il nome di ogni personaggio insieme al nome della sua serie possiamo scrivere
SELECT character.name, character_tv_show.tv_show_name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id;
Questo accosta ogni riga di character con la riga corrispondente di character_tv_show, e viceversa.
Nota:
- Usiamo la sintassi nome_tabella.nome_colonna. Se usassimo solo nome_colonna, SQL potrebbe attribuirla alla tabella sbagliata.
- La query di esempio qui sopra è scritta su più righe per leggibilità, ma questo non cambia la query.
Riesci a usare un inner join per abbinare il nome di ogni personaggio all’attore che lo interpreta? Seleziona le colonne: character.name, character_actor.actor_name