Tutoriaux
Écrit par Administrator    Jeudi, 07 Août 2008 09:12    PDF Imprimer Envoyer
Différence entre l'opérateur INTERSECT et INNER JOIN sous SQL Serveur 2005
Tutoriaux - SQL

Nous allons ici, éclaircir un peu la notion de INTERSECT et de INNER JOIN sous SQL Serveur 2005 car selon plusieurs courriels que j'ai reçu, certain on de la difficulté à différencier les 2 méthodes.

INTERSECT

L'opérateur INTERSECT de SQL Serveur 2005 est utilisé afin de récupérer les lignes communes de 2 tables. La plupart du temps, l'opérateur retourne le même résultat qu'avec un INNER JOIN. Lors de l'utilisation de l'opérateur, il faut que le nombre de champs de chaque requête soit le même et dans le même ordre. Il faut aussi que les types de champs soit les mêmes à des fins de compatibilité. Voici un exemple :

Exemple :

SELECT * FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (1,2,3)
INTERSECT
SELECT * FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (3,2,5)

Résultat :

Le résultat affiche chaque EmployeeID qui se trouve dans les 2 requêtes.

INNER JOIN

Exemple :

SELECT va.VendorID,va.ModifiedDate FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Résultat :

Le résultat affiche toutes les lignes qui sont présent dans les 2 tables. Par contre, cette requête affiche toute les lignes qui sont dans la première table et aussi toutes celles qui sont dans la seconde. Donc si vous observez, vous remarquerez que plusieurs lignes sont en double ce qui ne se produit pas avec l'opérateur INTERSECT.

INNER JOIN avec DISTINCT

Exemple :

SELECT DISTINCT va.VendorID,va.ModifiedDate FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Résultat :

Le résultat affiche la même chose qu'avec l'opérateur INTERSECT. C'est donc dire, qu'il est possible de simuler l'opérateur INTERSECT depuis l'opérateur INNER JOIN. Par contre, cette méthode entraîne une légère perte de performance. Donc si vous pouvez, il est préférable d'utiliser l'opérateur INTERSECT, dans les autres cas, utiliser l'opérateur DISCINCT dans vos jointures.

Rétrolien(0)

Adresse URI pour un rétrolien sur cet article

Commentaires (0)

Flux RSS pour les commentaires

Ecrivez un commentaire

Réduire l'éditeur | Agrandir l'éditeur

busy
Mis à jour ( Jeudi, 07 Août 2008 09:15 )
 

Derniers ajout

Les plus lus