PDA

View Full Version : [SQL] Join


sbera
22-01-2010, 15:06
ciao a tutti.
la domanda è rapida e concisa: qual'è l'utilità di usare il join?
cioè, su due ipotetiche tabelle
Persone (Nome,Patente) e Auto (Modello, Patente)
se io usassi

SELECT *
FROM Persone JOIN Auto
ON (Persone.Patente = Auto.Patente);
o

SELECT *
FROM Persone, Auto
WHERE Persone.Patente=Auto.Patente;
non sarebbe la stessa cosa?

zuper
22-01-2010, 15:25
si così si..

ma metti di dover estrarre nome, patente ed eventuali auto da:

carlo AA
tizio BB
caio CC


audi AA
mercedes AA
fiat BB

devi per forza usare una JOIN...una left outer ok...ma fa sempre parte delle join ;)

john_revelator
22-01-2010, 15:30
ciao a tutti.
la domanda è rapida e concisa: qual'è l'utilità di usare il join?
cioè, su due ipotetiche tabelle
Persone (Nome,Patente) e Auto (Modello, Patente)
se io usassi

SELECT *
FROM Persone JOIN Auto
ON (Persone.Patente = Auto.Patente);
o

SELECT *
FROM Persone, Auto
WHERE Persone.Patente=Auto.Patente;
non sarebbe la stessa cosa?

Anche la seconda è una inner join. Semplicemente è implicita.

zuper
22-01-2010, 15:36
Anche la seconda è una inner join. Semplicemente è implicita.

'sera...è un po che nn ci si fa vedere.... :)

john_revelator
22-01-2010, 15:43
'sera...è un po che nn ci si fa vedere.... :)

Non me ne parlare, un pò incasinato col lavoro. :fagiano:
Quando mi è possibile una capatina la faccio sempre. ;)

anonimizzato
22-01-2010, 22:09
Si le due sintassi producono lo stesso risultato.

Tuttavia la prima è maggiormente consigliabile per questioni di portabilità e credo anche di prestazioni.

sbera
23-01-2010, 08:59
perfetto, grazie mille :)

cdimauro
23-01-2010, 09:09
Si le due sintassi producono lo stesso risultato.

Tuttavia la prima è maggiormente consigliabile per questioni di portabilità e credo anche di prestazioni.
In tutta onestà, se un engine SQL non sa riconoscere una join espressa in forma di where, lo butto direttamente nel cesso.

anonimizzato
23-01-2010, 09:41
In tutta onestà, se un engine SQL non sa riconoscere una join espressa in forma di where, lo butto direttamente nel cesso.

Potresti spiegarti meglio?

cdimauro
23-01-2010, 10:18
Un engine SQL che si rispetti quando fa il parsing della query costruisce generalmente un AST (http://en.wikipedia.org/wiki/Abstract_syntax_tree), per poi generare il codice interno per gestire la richiesta.

Nell'analisi dell'AST si può benissimo riconoscere che la condizione che "lega" due tabelle è effettivamente una join, e quindi generare opportuno codice per gestire efficacemente il caso.

Si tratta di roba ormai stravecchia e ben nota non soltanto in letteratura. Insomma, strausatissima.

Per cui se un engine SQL oggigiorno non riesce a riconoscere questi casi e gestirli correttamente, vuol dire che definirlo scarso è fargli un complimento. Per cui merita di essere defenestrato (magari assieme a chi l'ha scritto).