Cliquez pour évaluer et commenter
MSDN
MSDN Library
SQL Server
SQL Server 2008
Moteur de base de données
Développement
 Réalisation de semi-jointures avec ...

  Passer à l'affichage pour faible bande passante
Contenu de la communauté
Dans cette section
Statistiques Annotations (0)
D'autres versions sont également disponibles pour :
Documentation en ligne de SQL Server 2008 (mai 2009)
Réalisation de semi-jointures avec EXCEPT et INTERSECT

Une semi-jointure retourne des lignes de la première entrée s’il existe au moins une ligne correspondante dans la deuxième entrée. Une anti-jointure retourne des lignes de la première entrée s’il n’existe aucune ligne correspondante dans la deuxième entrée. Les semi-jointures et les anti-jointures s’effectuent à l’aide des opérateurs EXCEPT et INTERSECT. Ces opérateurs vous permettent de comparer les résultats d'au moins deux instructions SELECT et de retourner des valeurs distinctes. L'opérateur EXCEPT retourne toute valeur distincte provenant de la requête du côté gauche de l'opérateur EXCEPT qui n'est pas également retournée par la requête du côté droit. INTERSECT retourne toute valeur distincte retournée par la requête à la fois des côtés gauche et droit de l'opérateur INTERSECT. Les ensembles de résultats comparés à l'aide d'EXCEPT ou d'INTERSECT doivent tous posséder la même structure. Ils doivent posséder le même nombre de colonnes et les types de données des colonnes correspondantes de l'ensemble de résultats doivent être compatibles. Pour plus d'informations, consultez EXCEPT et INTERSECT (Transact-SQL).

Prenons l'exemple des tables TableA, TableB et TableC contenant les données suivantes dans leur colonne col1 int respective.

TableA (col1 int) TableB (col1 int) TableC (col1 int)

NULL

NULL

2

NULL

1

2

NULL

3

2

1

4

4

2

4

4

2

2

3

4

4

À l'aide d'EXCEPT, la requête suivante retourne toute valeur distincte provenant de la requête du côté gauche de l'opérande EXCEPT qui ne se trouve pas également dans la requête de droite.

SELECT * FROM TableA EXCEPT SELECT * FROM TableB

Voici l'ensemble des résultats.

Col1       
----------- 
2

(1 row(s) affected)

À l'aide d'INTERSECT, cette requête retourne toute valeur distincte retournée par la requête à la fois des côtés gauche et droit de l'opérateur INTERSECT.

SELECT * FROM TableA INTERSECT SELECT * FROM TableB

Voici l'ensemble des résultats.

Col1       
----------- 
NULL
1
3
4

(4 row(s) affected)

L'opérateur INTERSECT prévaut sur EXCEPT. Par exemple, la requête suivante utilise les deux opérateurs :

SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC

Voici l'ensemble des résultats.

Col1       
----------- 
NULL
1
2
3

(4 row(s) affected)
Contenu de la communauté   Qu'est-ce que le Contenu de la communauté ?
Ajouter du contenu RSS  Annotations
Processing
© 2009 Microsoft Corporation. Tous droits réservés. Conditions d'utilisation  |  Marques  |  Confidentialité
Page view tracker