Programmazione
Asp
Asp.NET
Java
Javascript
Php
Oracle

Svaghi
Ascolta Radio
Faccine
Libri
Links

Varie
Cerca nel sito...
Segnalazioni
Scrivimi


Nuova sintassi Join in Oracle9i

In Oracle 9i la sintassi delle Jion è stata mutata, infatti, a partire dalla dichiarazione delle tabelle si possono notare i primi cambiamenti.

-- Vecchio standard ANSI :
From Proprietari a,Case b

-- Nuovo standard ANSI :
From Proprietari a INNER JOIN Case b

Le differenze sono sostanzialmente due, la prima è il non utilizzo della virgola per separare le due tabelle, la seconda prevede l'utilizzo della parola chiave Inner Join che prima era omessa.
Quindi nella query al momento di dichiarare le tabelle è obbligatoria specificare il tipo di join che verrà usata. Altre differenze sono visibili se guardiamo bene queste due query:

--Vecchio standard ANSI :
Select a.id_proprietario, b.via From Proprietari a,Case b Where a.id_proprietario = b.id_proprietario;

Come si nota nel vecchio standard non è presente nessuna parola chiave nella condizione di FROM e la vera e propria condizione di join è specificata nella condizione di WHERE dove i campi chiave in relazione vengono eguagliati. Cosa succede nel nuovo standard ANSI :

--Nuovo standard ANSI :
Select a.id_proprietario, b.via From Proprietari a inner join Case b on a.id_proprietario = b.id_proprietario;

Succede che le condizioni di join non si trovano più nella clausola where ma compaiono nella clausola from con le parole chiave Inner Join e On. Che cosa comporta questo. Comporta che tutto venga dichiarato in una sola parte, che le probabilità di prodotto cartesiano diminuiscano,e non è più obbligatorio scriver complesse clausole di Where.
Una volta digitata la parola chiave inner join sarà Oracle 9i a richiedere la clausola On.

Select a.id_proprietario, b.via From Proprietari a inner join Case b Using (id_proprietario);
Select a.id_proprietario,b.via From PROPRIETARI a full outer join case b Using (id_proprietario);


INNER JOIN
Una Inner join (chiamata semplicemente join) è una join tra due o più tabelle che restituisce soltanto quei record che soddisfano la condizione di join espresse nella clausola di Where.
(vedi esempio precedente)

OUTER JOIN
Una Outer join estende il risultato di un semplice join. Essa ritorna tutti i record che soddisfano la condizione di join ed inoltre restituisce tutti quei record di una tabella specificata che sono presenti nella condizione di join ma che non hanno corrispondenza nell'altra tabella.
(vedi esempio precedente)

NATURAL JOIN
Vi è ancora un'altra scorciatoia la clausola Natural Join la quale associa tutte le colonne delle due tabelle che hanno identico nome.
Qual è il problema della Natural Join?
Il problema consiste nell'uguaglianza dei nomi, se pensiamo che ad un certo punto il nome di una delle due colonne identiche fosse cambiato la natural join non avrebbe più efficacia. L'unica limitazione della natural join è che non è possibile specificare una colonna di tipo LOB o una colonna di una collection come componente di una natural join.

Select a.id_proprietario,b.via From PROPRIETARI a natural inner join case b;


MULTIPLE JOIN
Nel caso di join multiple Oracle 9i di default processa queste da sinistra verso destra. E' possibile controllare e modificare la sequenzialità di esecuzione delle join tramite l'utilizzo delle parentesi.
La prima join soddisfatta sarà tra le tabelle Proprietari e Case e il risultato sarà messo in join nuovamente con la tabella Città.

Select a.id_proprietario,b.via,c.cap From (Proprietari a inner join Case b Using (a.id_proprietario,b.via)) Inner join Citta c Using (a.id_proprietario);