Oracle
 sql >> Database >  >> RDS >> Oracle

Cosa sono gli Oracle Join (Sql Join)?

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