Quindi potremmo eseguire una query che estrae solo le righe della prima tabella senza corrispondente, così:
SELECT * FROM ordini as o LEFT JOIN clienti as c ON o.idCliente = c.idCliente
WHERE idOrdine > 1000 AND c.idCliente IS NULL
Le outer join si dividono in left outer join, right outer join e full outer join.
Con le prime otterremo le righe senza corrispondente che si trovano nella tabella di sinistra (cioè quella dichiarata per prima nella query). Le right outer join restituiscono invece le righe della seconda tabella che non hanno corrispondente nella prima. Con le full outer join infine si ottengono le righe senza corrispondente da entrambe le tabelle.
In MySQL non è invece possibile effettuare le full outer join.
Quando, come nel nostro esempio, le colonne su cui si basa la join hanno lo stesso nome nelle due tabelle, è possibile utilizzare una sintassi abbreviata per effettuare la join: la clausola USING. Vediamo la join precedente con questa clausola:
SELECT * FROM ordini LEFT JOIN clienti USING (idCliente) WHERE idOrdine > 1000;
Naturalmente la join può essere basata anche su più colonne. In questo caso elencheremo più condizioni, separate da virgole, nella ON, oppure elencheremo i nomi delle colonne, sempre separati da virgole, nella clausola USING.
ti ringrazio verament tnto alla fine sono riuscito a fare qulla select.
Volevo comunque chiederti una cosa che è l di fuori del mio progetto ma mi piacerebbe comunque conoscere.
Supponiamo due tabelle una clienti e l'altra marche gomme (es michelin dunlop bridgestone, ecc).
ad ogni cliente possono appertenere una o + gomme e ogni gomma può appartenere a uno o + clienti...
La relazioni è molti a molti..
Ma come faccio a inserire i dati? Mi spiego meglio io vorrei inserire ad sempio 10 tipologie di gomme e poi quando vado a inserire il cliente assegnarli una gomma della mi banca dati....
Nella tbella gomme presumo di avere un id esterno correlato con la tabella clienti ma se io inserisco nuove gomme queste avranno un id esterno=0 o no?