Oracle
 sql >> Base de données >  >> RDS >> Oracle

Que sont les jointures Oracle (Sql Joins) ?

Parfois, vous devez afficher les données de plusieurs tables. Pour ce faire, vous devez lier une table à une autre table.Il existe différentes manières d'obtenir des données à partir de plusieurs tables.Ici, je me concentrerais sur les jointures Oracle avec des exemples. . J'expliquerais la jointure interne, la jointure externe, la jointure croisée, la jointure naturelle, la jointure cartésienne avec des exemples

Oracle rejoint

Un Oracle rejoint  est une requête qui combine des lignes de deux ou plusieurs tables oracle.

Oracle effectue une jointure chaque fois que plusieurs tables apparaissent dans la clause FROM. Pour joindre deux tables, vous devez identifier les colonnes communes qui relient les deux tables. Dans la clause WHERE, vous définissez la relation entre les tables répertoriées dans la clause FROM.

Quelques consignes pour les jointures Oracle (jointures Sql)

1) lors de l'écriture de l'instruction select qui joint les tables, il est recommandé de faire précéder le nom de la colonne du nom de la table à des fins de clarté.

2) Pour joindre m tables, il faut au moins m-1 conditions

3) Nous pouvons utiliser un alias de table pour le nom des tables si le nom de la table est long. Le tableau semble le code plus court et donc moins de mémoire

4) Si vous n'utilisez pas table_name ou alias de tables lors de la sélection de la colonne et si plusieurs tables ont le même nom de colonne, nous devons spécifier le table_name pour la colonne qui est commune à toutes les tables

Joindre interne

L'opérateur le plus couramment utilisé pour relier deux tables est l'opérateur d'égalité (=). C'est ce qu'on appelle une jointure d'égalité ou equijoin . Cette jointure simple également appelée jointure interne

Exemple de jointure interne 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;

Pour exécuter une jointure de trois tables ou plus, Oracle joint deux tables en fonction de la condition de jointure, puis joint le résultat à une autre table, en fonction des conditions de jointure et répète jusqu'à ce que toutes les tables soient jointes.

Jointures complexes

Avoir une ou plusieurs conditions ajoutées dans la clause WHERE. Par exemple, si vous êtes intéressé par tous les départements et leurs emplacements en dehors du Royaume-Uni, utilisez

SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';

Non-équijointure

Une non-équijointure est la condition de jointure autre que l'opérateur d'égalité.

Il s'agit d'une instruction de jointure interne qui utilise une opération inégale (c'est-à-dire :<>,>, <, =, BETWEEN, etc.) pour faire correspondre les lignes de différentes tables

SELECT e.ename, e.sal, s.grade
FROM  emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;

Produits cartésiens ou jointure cartésienne ou jointure croisée

-Une jointure cartésienne (ou produit cartésien) (ou jointure croisée) se produit lorsque des données sont sélectionnées dans deux ou plusieurs tables et que la condition de jointure est définie ou qu'aucune relation commune n'est définie dans la clause WHERE

-Si une jointure est effectuée et qu'aucune condition de jointure n'est spécifiée, un produit cartésien en résulte. Un produit cartésien est un ensemble de résultats qui est le produit des lignes totales des deux tables. Si la table "P" a 100 lignes et la table "Q" a 100 lignes et qu'un produit cartésien est développé, le jeu de résultats résultant aura 10 000 lignes. Si une requête joint trois tables ou plus, l'optimiseur peut trouver un moyen de choisir un ordre de jointure qui exclut un produit cartésien, mais ne comptez pas dessus.

SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   cross join DEPT ;

Jointures externes

Les jointures internes que nous avons vues renvoient les lignes correspondantes de deux tables ou plus en fonction de la condition de jointure. Le mécanisme de jointure externe renvoie les données d'une table même s'il n'y a pas de ligne correspondante dans la table de jointure.

Il y a trois jointures externes

a) Jointure externe gauche ou jointure gauche

b) Jointure externe droite ou jointure droite

c) Jointure externe complète ou jointure complète

Jointure externe gauche

renvoie les lignes correspondantes des deux tables ainsi que les lignes sans correspondance de la table à gauche de la clause de jointure.

Le LEFT OUTER JOIN renverrait tous les enregistrements de la table de gauche et uniquement les enregistrements de la table de droite qui croisent la table de droite

Voici l'exemple d'Oracle Left outer Join

Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;

syntaxe de jointure Oracle (+)  :Dans la base de données Oracle, nous pouvons également utiliser la syntaxe du signe plus pour la jointure externe gauche. Dans ce cas, la jointure plus se trouve du côté droit de l'équation.

Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;

 

Jointure externe droite

renvoie les lignes correspondantes des deux tables ainsi que les lignes sans correspondance de la table à droite de la clause de jointure.

Voici l'exemple de jointure externe Oracle Right

Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;

syntaxe de jointure Oracle (+)  :Dans la base de données Oracle, nous pouvons également utiliser la syntaxe du signe plus pour RIGHT OUTER JOIN. Dans ce cas, la jointure à droite est indiquée lorsque le signe plus se trouve à gauche de l'équation.

Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;

Jointure externe complète

Ce type de jointure renvoie toutes les lignes de la table de GAUCHE et de la table de DROITE avec des valeurs nulles en place lorsque la condition de jointure n'est pas remplie

Voici l'exemple pour Oracle Full Outer Join

select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;

Cette requête renverra toutes les lignes des deux tables. L'utilisation de la syntaxe Oracle avec E.DEPT_ID (+) =D.DEPT_ID (+) est impossible car le signe (+) ne peut référencer qu'une seule table. Nous devons utiliser Union pour obtenir le même résultat en utilisant le signe +

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;

Certains SGBDR ne prennent pas en charge la clause de jointure externe complète, alors nous pouvons utiliser ci-dessous pour couvrir cela

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;


JOINTURE NATURELLE

La jointure naturelle spécifie que la jointure relie toutes les colonnes portant le même nom sur les deux tables.

Fondamentalement, il compare les colonnes communes des deux tables les unes avec les autres. Il faut vérifier si des colonnes communes existent dans les deux tables avant de faire une jointure naturelle.

Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME  FROM EMP  NATURAL JOIN DEPT;

Ici dept_id est la même colonne entre les tables emp et dept

La jointure naturelle peut joindre plus de deux tables

J'espère que vous aimez cet article sur Oracle joint avec des exemples.

Articles connexes
Tutoriel Oracle SQL

Sous-requêtes SQL Oracle

Opérateurs d'ensemble Oracle

Vue Oracle

comment écrire des requêtes sql

Colonne d'incrémentation automatique - Séquence

Jointure croisée dans Oracle

auto-jointure dans oracle avec des exemples

exemples de syntaxe de jointure oracle

Jointure par hachage dans Oracle