A volte è necessario visualizzare i dati di più tabelle. Per eseguire ciò è necessario collegare una tabella a un'altra tabella. Esistono vari modi in cui possiamo ottenere dati da più tabelle. Qui mi concentrerei su Oracle Join con esempi. Questo è valido in generale anche per qualsiasi Sql Join . Spiegherei inner join, outer join, cross join, natural join, cartesian join con esempi
Oracle si unisce
Un Oracle si unisce è una query che combina righe di due o più tabelle Oracle.
Oracle esegue un join ogni volta che vengono visualizzate più tabelle nella clausola FROM. Per unire due tabelle, è necessario identificare le colonne comuni che mettono in relazione le due tabelle. Nella clausola WHERE si definisce la relazione tra le tabelle elencate nella clausola FROM.
Alcune linee guida per Oracle Join (Sql Join)
1) quando si scrive l'istruzione select che unisce le tabelle, è buona norma far precedere il nome della colonna con il nome della tabella per chiarezza.
2) Per unire m tabelle, abbiamo bisogno di almeno m-1 condizioni
3) Possiamo usare l'alias di tabella per il nome delle tabelle se il nome della tabella è lungo. La tabella mostra il codice più breve e quindi meno memoria
4) Se non utilizzi nome_tabella o alias di tabelle durante la selezione della colonna e se più tabelle hanno lo stesso nome di colonna, allora dovremmo specificare il nome_tabella per la colonna che è comune tra le tabelle
Unione interna
L'operatore più comune utilizzato per mettere in relazione due tabelle è l'operatore di uguaglianza (=). Questo è chiamato un join di uguaglianza o equijoin . Questo semplice join noto anche come inner join
Esempio di partecipazione interna di Oracle
Syntax
Select tab1.col,tab2.col
from tab1 ,tab2
where tab1.col=tab2.col
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP , DEPT
where EMP. DEPTNO= DEPT. DEPTNO;
Per eseguire un join di tre o più tabelle, Oracle unisce due tabelle in base alla condizione di join, quindi unisce il risultato a un'altra tabella, in base alle condizioni di join e ripete fino a quando tutte le tabelle non vengono unite.
Join complessi
Avere una o più condizioni aggiunte nella clausola WHERE. Ad esempio, se sei interessato a tutti i dipartimenti e alle loro sedi al di fuori del Regno Unito, utilizza
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
Non equiunire
Un non equijoin è la condizione di unione diversa dall'operatore di uguaglianza.
È un'istruzione di inner join che utilizza un'operazione disuguale (ad esempio:<>,>, <, =, BETWEEN, ecc.) per abbinare righe di diverse tabelle
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
Prodotti cartesiani o Join cartesiani o Cross Join
-Un join cartesiano (o prodotto cartesiano) (o Cross Join) si verifica quando i dati vengono selezionati da due o più tabelle e viene definita una condizione di join o non viene definita alcuna relazione comune nella clausola WHERE
-Se viene eseguita un'unione e non viene specificata alcuna condizione di unione, si ottiene un prodotto cartesiano. Un prodotto cartesiano è un insieme di risultati che è il prodotto delle righe totali delle due tabelle. Se la tabella "P" ha 100 righe e la tabella "Q" ha 100 righe e viene sviluppato un prodotto cartesiano, il set di risultati risultante avrà 10000 righe. Se una query unisce tre o più tabelle, l'ottimizzatore potrebbe trovare un modo per scegliere un ordine di unione che preclude un prodotto cartesiano, ma non ci conta.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
Unimenti esterni
Gli inner join che abbiamo visto restituiscono le righe corrispondenti da due o più tabelle in base alla condizione di join. Il meccanismo di unione esterna restituisce i dati da una tabella anche se non esiste una riga corrispondente nella tabella di unione.
Ci sono tre outer join
a) Join esterno sinistro o Join sinistro
b) Join esterno destro o Join destro
c) Full outer join o full join
Unisci esterno sinistro
restituisce le righe corrispondenti da entrambe le tabelle e le righe non corrispondenti dalla tabella a sinistra della clausola di join.
Il LEFT OUTER JOIN restituirebbe tutti i record della tabella di sinistra e solo i record della tabella di destra che si intersecano con la tabella di destra
Ecco l'esempio di Oracle Left outer Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
Sintassi di Oracle Join (+) :In database Oracle, possiamo anche utilizzare la sintassi del segno più per il join esterno sinistro.In questo caso, il join più si trova sul lato destro dell'equazione.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
Partecipa all'esterno destro
restituisce le righe corrispondenti da entrambe le tabelle e le righe non corrispondenti dalla tabella a destra della clausola di join.
Ecco l'esempio di Oracle Right outer join
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
Sintassi di Oracle Join (+) :Nel database Oracle, possiamo anche utilizzare la sintassi del segno più per RIGHT OUTER JOIN. In questo caso il join destro è indicato quando il segno più si trova a sinistra dell'equazione.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
Partecipazione esterna completa
Questo tipo di join restituisce tutte le righe della tabella di SINISTRA e della tabella di DESTRA con valori null in posizione in cui la condizione di join non è soddisfatta
Ecco l'esempio di Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
Questa query restituirà tutte le righe di entrambe le tabelle. L'utilizzo della sintassi Oracle mediante E.DEPT_ID (+) =D.DEPT_ID (+) è impossibile perché il segno (+) può fare riferimento a una sola tabella. Dobbiamo usare Union per ottenere lo stesso risultato usando il segno +
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+)
union
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno;
Alcuni RDBMS non supportano la clausola Full outer join, quindi possiamo utilizzare di seguito per coprirlo
select empno,ename,dept.deptno,dname
from emp
left OUTER JOIN dept
on emp.deptno=dept.deptno
union
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
NATURAL JOIN
Il join naturale specifica che il join mette in relazione tutte le colonne con lo stesso nome sulle due tabelle.
Fondamentalmente confronta le colonne comuni di entrambe le tabelle tra loro. Si dovrebbe verificare se esistono colonne comuni in entrambe le tabelle prima di eseguire un join naturale.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
Qui dept_id è la stessa colonna tra le tabelle emp e dept
Il join naturale può unire più di due tabelle
Spero ti piaccia questo post su Oracle si unisce con esempi.
Articoli correlati
Esercitazione su Oracle sql
Sottoquery Oracle SQL
Operatori di insiemi Oracle
Vista Oracle
come scrivere query sql
Colonna di incremento automatico – Sequenza
Cross Join in Oracle
self join in Oracle con esempi
esempi di sintassi di Oracle Join
Hash Join in Oracle