Comment utiliser l'intersection et à l'exception des opérations dans SQL

La UNION opération produit une table de résultats contenant toutes les lignes qui apparaissent dans quelconque les tableaux de la source de données SQL. Si vous voulez que les lignes qui apparaissent dans tous les tables source, vous pouvez utiliser la INTERSECT opération, qui est la mise en oeuvre de l'opération de SQL d'intersection de l'algèbre relationnelle. INTERSECT peut être illustrée par retourner dans le monde fantastique dans lequel Bob Turley a été échangé aux Dodgers en mi-saison:

SELECT * FROM NATIONAL-Prénom NOM CompleteGames --------- -------- ------------- Sal Maglie 11Don Newcombe9SandyKoufax 13Don Drysdale12Bob Turley 8Sélectionnez * FROM américano FIRST_NAME LAST_NAME COMPLETE_GAMES ---------- --------- -------------- Whitey Ford 12Don Larson 10Bob Turley 8AllieReynolds14

Seules les lignes qui apparaissent dans toutes les tables source apparaissent dans le INTERSECT la table de résultat de l'opération:

SELECT * FROM NATIONALINTERSECTSELECT * d'American-Prénom NOM CompleteGames --------- -------- ------------- Bob Turley 8

Le tableau de résultat vous indique que Bob Turley était le seul lanceur de lancer le même nombre de jeux complets dans les deux ligues (une distinction assez obscure pour le vieux Bullet Bob). Note: Comme ce fut le cas avec UNION, INTERSECT DISTINCT produit le même résultat que la INTERSECT opérateur utilisé seul. Dans cet exemple, seulement une des rangées identiques comportant Bob Turley est retourné.

La TOUS et CORRESPONDANT des mots-clés dans une fonction INTERSECT opération de la même façon qu'ils le font dans un UNION opération. Si vous utilisez TOUS, les doublons sont conservés dans le tableau de résultats. Si vous utilisez CORRESPONDANT, les tables intersectés ne pas besoin d'être l'union-compatible, même si les colonnes correspondantes doivent avoir des types et longueurs correspondant.




Voici ce que vous obtenez avec INTERSECT ALL:

SELECT * FROM NATIONALINTERSECT globaleSélectionner * d'American-Prénom NOM CompleteGames --------- -------- ------------- Bob Turley Turley 8Bob 8

Prenons un autre exemple: Une municipalité conserve la trace des téléphones cellulaires portés par les policiers, les pompiers, les balayeurs de rue, et d'autres employés de la ville. Une table de base de données appelée TÉLÉPHONES contient des données sur tous les téléphones en utilisation active. Un autre tableau nommé OUT, avec une structure identique, contient des données sur tous les téléphones qui ont été mises hors service.

Pas de téléphones devraient jamais exister dans les deux tables. Avec un INTERSECT opération, vous pouvez tester pour voir si une telle duplication indésirable a eu lieu:

SELECT * FROM PHONESINTERSECT correspondante (PhoneID) SELECT * FROM OUT -

Si cette opération vous donne une table de résultats contenant toutes les lignes du tout, vous savez que vous avez un problème. Vous devez enquêter sur toute PhoneID entrées qui apparaissent dans le tableau de résultats. Le téléphone correspondant est soit active ou hors de Service- il ne peut pas être les deux. Après vous détectez le problème, vous pouvez effectuer une EFFACER opération sur l'une des deux tables de restaurer l'intégrité de la base de données.

La UNION opération agit sur deux tables source et renvoie toutes les lignes qui apparaissent dans les deux tables. La INTERSECT opération renvoie toutes les lignes qui apparaissent à la fois dans la première et la seconde tables. En revanche, la SAUF (ou SAUF DISTINCT) Opération renvoie toutes les lignes qui apparaissent dans la première table, mais que ne pas apparaissent également dans le deuxième tableau.

Revenons à l'exemple de base de données de téléphone municipal, dire que un groupe de téléphones qui avaient été déclarés hors service et retournés au fournisseur pour les réparations ont été corrigé et remis en service. Le tableau PHONES a été mis à jour pour refléter les téléphones retournés, mais les téléphones retournés ont pas retiré de la table comme ils auraient dû l'être.

Vous pouvez afficher le PhoneID les numéros de téléphones dans la table de OUT, avec celles réactivés éliminés, en utilisant un SAUF fonctionnement:

SELECT * FROM OUTEXCEPT CORRESPONDANT (PhoneID) SELECT * FROM PHONES de

Cette requête renvoie toutes les lignes dans la table dont OUT PhoneID est pas aussi présente dans le tableau PHONES.


» » » » Comment utiliser l'intersection et à l'exception des opérations dans SQL