SQL | JOIN: recupera dati da + tabelle |
theta joins: si ottengono con gli operatori relazionali
outer joins: si ottengono con gli operatori *= e =*
equijoin
- specifica una colonna per ogni tabella
- cerca l'uguaglianza dei valori delle due colonne riga per riga
- estrare le righe e combina le colonne come richiesto
SELECT cognome, nome, a.codcit, c.codice, c.nome
FROM anagrafica a, città c
WHERE a.codcit = c.codicenatural join
- come l'equijoin, ma visualizza solo una colonna del join o nessuna
SELECT cognome, nome, c.nome FROM anagrafica a, città c
WHERE a.codcit = c.codicejoin con altre condizioni
- in un join è possibile aggiungere altre condizioni, che limitano il numero di riche visualizzate
SELECT cognome, nome, c.nome FROM anagrafica a, città c
WHERE a.codcit = c.codice and età < 40self-join
- confronta i valori dentro una stessa colonna
- occorre utilizzare gli alias
per esempio troviamo quelli che hanno lo stesso CAP:
SELECT a1.cognome, a1.nome, a2.cognome, a2.nome
FROM anagrafica a1, anagrafica a2
WHERE a1.città = "ROMA" and a1.CAP = a2.capper eliminare le righe doppie:
SELECT a1.cognome, a1.nome, a2.cognome, a2.nome
FROM anagrafica a1, anagrafica a2
WHERE a1.città = "ROMA" and a1.CAP = a2.cap and a1.id < a2.idtroviamo quelli che abitano nella stessa città di Fontana:
SELECT a1.cognome, a1.nome, a1.città
FROM anagrafica a1, anagrafica a2
WHERE a1.città = a2.città and a2.cognome = 'Fontana'join non basati sull'uguaglianza
- in un join è possibile confrontare valori NON uguali
- operatori > >= < <= !> !<
not-equal join
- operatore <>
- raramente usato
- ha senso solo con il self-join
per esempio troviamo quelli che vivono nella stessa città, ma hanno età diversa
SELECT a1.cognome, a1.nome, a2.cognome, a2.nome
FROM anagrafica a1, anagrafica a2
WHERE a1.città = a2.città and a1.età <> a2.etàjoin su più tabelle
- può capitare che due tabelle siano in relazione per mezzo di una tabella intermedia
- oppure si possono porre più relazioni tra due colonne
- si possono usare gli operatori and e or
outer join
- join esclude le righe che non soddisfano la relazione
- può essere necessario visualizzare anche alcune righe che non soddisfano la condizione
- *= include tutte le righe della prima tabella
- =* include tutte le righe della seconda tabella
- compaiono valori nulli
- gli outer join si possono restringere con altre condizioni
valori nulli
- i valori nulli non soddisfano mai le condizioni
- si possono trovare i valori nulli solo con un outer join
- però non si distinguono i valori nulli dei dati dai valori nulli del join