Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 01-07-2006, 17.10.05   #1
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
[SQL] Cosa cambia tra On e Where ??

Salve a tutti, programmo da parecchio tempo, ma non ho mai avuto chiara la differenza di risultato tra:

SELECT * FROM TABELLA1 INNER JOIN TABELLA2
ON(TABELLA1.CAMPO1=TABELLA2.CAMPO2)
WHERE ...CONDIZIONE;

e:

SELECT * FROM TABELLA1,TABELLA2
WHERE TABELLA1.CAMPO1=TABELLA2.CAMPO2 AND
...CONDIZIONE;

Cioè non sono entrambi due inner join che usano l'uguaglianza tra i campi chiave delle due tabelle ed un'altra condizione di vario tipo per instaurare il join?

Quindi in genere cosa cambia da un punto di vista del resultset ottenuto eseguendo la query se anzicchè usare INNER JOIN ... ON, si usa soltanto la virgola e poi WHERE ??

Grazie in anticipo!
Fast-M non è collegato   Rispondi citando
Vecchio 01-07-2006, 19.02.56   #2
Semi.genius
Guest
 
Messaggi: n/a
Cambia soltanto la definizione.

SELECT * FROM TABELLA1,TABELLA2
WHERE TABELLA1.CAMPO1=TABELLA2.CAMPO2 AND
...CONDIZIONE;

si dice Join naturale perché tu specifichi il collegamento tra i due campi come una condizione..la tabella derivata su dove calcolare i dati viene creata automaticamente

SELECT * FROM TABELLA1,TABELLA2
WHERE TABELLA1.CAMPO1=TABELLA2.CAMPO2 AND
...CONDIZIONE;

si chiama Equi-Join perché tramite l'INNER JOIN crei una tabella derivata formata dagli elementi dove le due chiavi sono uguali...INNER JOIN è la forma generale usata per collegare queste tabelle ma quando si hanno due tabelle sole, è possibile usare il Join Naturale. Se si superano le due tabelle, non è più consigliabile il Join naturale e da lo stesso risultato.

(Ps. almeno è quello che mi hanno insegnato a scuola)
  Rispondi citando
Vecchio 02-07-2006, 03.55.20   #3
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Grazie per la tua risposta in cui praticamente confermi quello che da parecchio tempo già pensavo perchè era continuamente confermato dai risultati che avevo.
Cioè che da un punto di vista del resultset che si ottiene usando INNER JOIN ... ON, oppure TABELLA1,TABELLA2...WHERE, non cambia assolutamente nulla se non la forma con la quale si esprime appunto il join tra le due tabelle.
Ma dal punto di vista delle prestazioni cambia qualcosa per caso?
Fast-M non è collegato   Rispondi citando
Vecchio 02-07-2006, 04.11.51   #4
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Inviato da Fast-M
Ma dal punto di vista delle prestazioni cambia qualcosa per caso?
Sempre join sono, e come dice Semi.genius sono semplicemente due sintassi differenti per esprimere le stesse operazioni, quindi a occhio direi che non cambia nulla
In sostanza, per la seconda forma, analizzando le condizioni poste nella where si può effettuare - e a occhio direi abbastanza facilmente - una traduzione nella prima forma... un mapping 1-1 insomma.

Per quanto riguarda le prestazioni cmq il tutto dipende da quanto è "furbo" il traduttore/ottimizzatore di query del DBMS che usi... penso cmq che un qualsiasi traduttore SQL -> algebra relazionale (o rappresentazione interna usata) tratti le due espressioni allo stesso modo
E anche nel caso non le tratti allo stesso modo, non è detto che il risultato sia differente: infatti le operazioni di ottimizzazione della query (tenendo anche presenti ulteriori istruzioni di condizione, ordinamento etc) potrebbero portare alla stessa espressione finale pur partendo da espressioni iniziali differenti.


Il tutto supportato solo e unicamente dalla teoria In pratica non ho mai provato a valutare, su diversi DBMS, le prestazioni di query simili scritte in queste due forme differenti


(e il tutto con beneficio d'inventario... per l'ora tarda )
Dav82 non è collegato   Rispondi citando
Vecchio 02-07-2006, 11.47.59   #5
The_Prof
Hero Member
 
L'avatar di The_Prof
 
Registrato: 20-07-2001
Loc.: Trieste
Messaggi: 939
The_Prof promette bene
Attualmente INNER e OUTER join vengono usate per query SQL con esigenze specifiche e complicate
Per non complicarsi troppo la vita è meglio scrivere (DB2 IBM)

Select *
from tabella1 a , tabella2 b
where a.campo1 = b.campo2
;

Riguardo alle prestazioni è fondamentale il numero delle righe delle tabelle.

Esistono dei tools specifici che sono in grado, analizzando la query e le tabelle interessate, di fornire suggerimenti per modifiche tabellari, inserimenti di indici, o modifiche alla query.

Ciao
___________________________________

Non potrei mai essere ateo, neppure se Dio esistesse.
The_Prof non è collegato   Rispondi citando
Vecchio 29-09-2006, 13.44.08   #6
Robcrash
Newbie
 
Registrato: 29-09-2006
Messaggi: 2
Robcrash promette bene
Scusate l'intrusione , sono appena entrato nel forum .
Qualcuno sa dirmi se posso con una query risolvere il seguente problema?

ho una tabella Azienda formata da i seguenti campi:

cod_azn varchar2(7)
des_azn VARCHAR2(250)
per_azn NUMBER(5)
RESP_LEG NUMBER(5)
RESP_OP NUMBER(5)

select * from azienda

cod_azn des_azn per_azn RESP_LEG RESP_OP
ca ufficio_bilancio 12 1001 1001
ca ufficio_bilancio 13 1001 1001
ca ufficio_bilancio 14 1001 1001
ca ufficio_bilancio 15 1001 1001
ca ufficio_bilancio 16 1001 1001

c'è la possibilità di tirar fuori dei dati in questo modo?

cod_azn des_azn per_azn RESP_LEG RESP_OP
ca ufficio_bilancio 12 1001 1001
ca 13
ca 14
ca 15
ca 16

cioè avere uno spool
che mi dia tutti i codici uffici (cod_azn ) ma una volta sola la descrizione ufficio(des_azn) e tutte le persone(per_azn)
ho provato con delle union ma non va
. vorrei evitare di far un programma

grazie
Robcrash non è collegato   Rispondi citando
Vecchio 29-09-2006, 16.51.04   #7
The_Prof
Hero Member
 
L'avatar di The_Prof
 
Registrato: 20-07-2001
Loc.: Trieste
Messaggi: 939
The_Prof promette bene
Quota:
Inviato da Robcrash
Scusate l'intrusione , sono appena entrato nel forum .
Qualcuno sa dirmi se posso con una query risolvere il seguente problema?
ho una tabella Azienda formata da i seguenti campi:
cod_azn varchar2(7)
des_azn VARCHAR2(250)
per_azn NUMBER(5)
RESP_LEG NUMBER(5)
RESP_OP NUMBER(5)
select * from azienda
cod_azn des_azn per_azn RESP_LEG RESP_OP
ca ufficio_bilancio 12 1001 1001
ca ufficio_bilancio 13 1001 1001
ca ufficio_bilancio 14 1001 1001
ca ufficio_bilancio 15 1001 1001
ca ufficio_bilancio 16 1001 1001
c'è la possibilità di tirar fuori dei dati in questo modo?
cod_azn des_azn per_azn RESP_LEG RESP_OP
ca ufficio_bilancio 12 1001 1001
ca 13
ca 14
ca 15
ca 16
cioè avere uno spool
che mi dia tutti i codici uffici (cod_azn ) ma una volta sola la descrizione ufficio(des_azn) e tutte le persone(per_azn)
ho provato con delle union ma non va
. vorrei evitare di far un programma
grazie
Spero che il risultato della prima query sia solo un esempio, altrimenti qualcosa non va nella base dati.

Puoi provare a scrivere

Select distinct(cod_azn) , ecc.
per tutti i campi che vuoi compaiano una sola volta.

Ciao
___________________________________

Non potrei mai essere ateo, neppure se Dio esistesse.
The_Prof non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
[Petizione] Chiediamo i danni a Cosa Nostra! Saruman Chiacchiere in libertà 5 06-01-2008 20.55.13
La corruzione - Cosa rende un uomo un corrotto? Paco Chiacchiere in libertà 27 26-01-2005 10.55.52
Mi dite cosa cambia? Luke Chiacchiere in libertà 6 17-01-2005 17.37.03
NATALE 2004: Cosa Avete Trovato Sotto l'Albero? Flying Luka Chiacchiere in libertà 32 26-12-2004 14.09.28
"test"x La Serie Conosciamoci Meglio!!!! :-) magicrainbow Chiacchiere in libertà 75 26-10-2003 10.19.39

Orario GMT +2. Ora sono le: 12.41.09.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.