|
| 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 » | |
![]() |
#1 |
Senior Member
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
![]() |
[SQL] Cosa cambia tra On e Where ??
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! |
![]() |
![]() |
![]() |
#2 |
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 ![]() |
![]() |
![]() |
#3 |
Senior Member
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
![]() |
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? |
![]() |
![]() |
![]() |
#4 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Quota:
![]() 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 ![]() ![]() (e il tutto con beneficio d'inventario... per l'ora tarda ![]() |
|
![]() |
![]() |
![]() |
#5 |
Hero Member
Registrato: 20-07-2001
Loc.: Trieste
Messaggi: 939
![]() |
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. |
![]() |
![]() |
![]() |
#6 |
Newbie
Registrato: 29-09-2006
Messaggi: 2
![]() |
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 |
![]() |
![]() |
![]() |
#7 | |
Hero Member
Registrato: 20-07-2001
Loc.: Trieste
Messaggi: 939
![]() |
Quota:
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. |
|
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
|
|
![]() |
||||
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 |