Ti faccio due tabelle di esempio
video
video_id | user_id | video_title | video_desc
01 |01 |Ciao |Prova1
02 |10 |Salve |Prova2
03 | |Nero |Prova3
04 |02 |Bianco |Prova4
users
user_id | username
01 |Stefabeta
02 |Debiru
03 |Ginko75
Come vedi due video non hanno un user correlato, lo 02 perché non esiste un user 10, lo 03 perché ha user_id vuoto.
Se scrivo:
codice:
select video_title, video_desc, username
from video as t0 INNER join users as t1
on t0.user_id=t1.user_id
il vincolo di inner join pretende che il legame fra le due tabelle deve essere sempre valido, quindi questo è il risultato:
video_title | video_desc | username
Ciao |Prova1 |Stefabeta
Bianco |Prova4 |Debiru
Se scrivo invece:
codice:
select video_title, video_desc, username
from video as t0 LEFT join users as t1
on t0.user_id=t1.user_id
sto dicendo che video (la tabella a sinistra fra le due, perchè sta a sinistra di join
), ha la precedenza, quindi innanzitutto mi mostri tutti i risultati di video, poi, se ci sono, eventuali risultati di users:
video_title | video_desc | username
Ciao |Prova1 |Stefabeta
Salve |Prova2 |Null
Nero |Prova3 |Null
Bianco |Prova4 |Debiru
Come vedi Salve e Nero alla casella username hanno Null, ma titolo e descrizione vengono comunque visualizzate.
Infine, scrivendo:
codice:
select video_title, video_desc, username
from video as t0 RIGHT join users as t1
on t0.user_id=t1.user_id
come dice da la precedenza alla tabella di destra (users) quindi vale lo stesso di prima ma riportato alla tabella users.
video_title | video_desc | username
Ciao |Prova1 |Stefabeta
Bianco |Prova4 |Debiru
Null |Null |Ginko75
Come vedi, ci sono tutti gli utenti, anche Ginko75 che non ha viedo associati.
Ti è piaciuta la spiegazione?