Maison >base de données >SQL >Comment utiliser Union, se croiser et sauf les opérateurs de SQL?
Dans SQL, l' UNION
, INTERSECT
et les opérateurs EXCEPT
sont utilisés pour combiner les résultats de deux ou plusieurs instructions sélectionnées. Chaque opérateur a une fonction unique et un cas d'utilisation:
Union : Cet opérateur est utilisé pour combiner les ensembles de résultats de deux instructions de sélection ou plus dans un seul ensemble de résultats. Il supprime les lignes en double du résultat final à moins que UNION ALL
soit utilisé, qui comprend des doublons. La structure des instructions de sélection doit être la même, ce qui signifie qu'elles doivent avoir le même nombre de colonnes, et les colonnes correspondantes doivent avoir des types de données compatibles.
Syntaxe :
<code class="sql">SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;</code>
Intersection : cet opérateur ne renvoie que les lignes communes aux ensembles de résultats des deux instructions de sélection. Comme UNION
, les instructions sélectionnées doivent avoir la même structure.
Syntaxe :
<code class="sql">SELECT column1, column2 FROM table1 INTERSECT SELECT column1, column2 FROM table2;</code>
Sauf : également connu sous le nom MINUS
dans certains systèmes de base de données, cet opérateur renvoie toutes les lignes de la première instruction SELECT qui ne sont pas présentes dans la deuxième instruction SELECT. Encore une fois, les instructions de sélection doivent être structurellement compatibles.
Syntaxe :
<code class="sql">SELECT column1, column2 FROM table1 EXCEPT SELECT column1, column2 FROM table2;</code>
Les principales différences entre ces opérateurs sont basées sur la façon dont ils gèrent les données à partir de plusieurs instructions de sélection:
UNION ALL
est utilisée). Il est utilisé lorsque vous souhaitez agréger les données de différentes sources où les entrées en double doivent être éliminées. En résumé, UNION
se combine et peut potentiellement dédaigner les données, INTERSECT
trouve des données communes et, EXCEPT
des isolats de données uniques d'un ensemble non trouvé dans l'autre.
Exemple du syndicat : Supposons que vous gérez une base de données avec deux tables, employees
et contractors
, contenant des noms et des départements. Si vous voulez une liste complète de tout le personnel de l'entreprise sans doublons, vous pouvez utiliser UNION
:
<code class="sql">SELECT name, department FROM employees UNION SELECT name, department FROM contractors;</code>
Exemple d'intersect : Imaginez que vous suivez la présence à deux événements différents, stockés dans event1_attendees
et event2_attendees
. Pour savoir qui a assisté aux deux événements, vous pouvez utiliser INTERSECT
:
<code class="sql">SELECT attendee_id FROM event1_attendees INTERSECT SELECT attendee_id FROM event2_attendees;</code>
Sauf l'exemple : si vous souhaitez trouver des clients qui ont un compte mais qui n'ont jamais passé de commande, et ceux-ci sont stockés respectivement dans customers
et orders
, vous pouvez utiliser EXCEPT
:
<code class="sql">SELECT customer_id FROM customers EXCEPT SELECT customer_id FROM orders;</code>
L'optimisation des requêtes qui utilisent UNION
, INTERSECT
ou EXCEPT
peuvent améliorer considérablement les performances. Voici quelques conseils:
UNION ALL
au lieu de UNION
. UNION ALL
est plus rapide car il n'a pas besoin de vérifier et de supprimer les doublons.WHERE
les clauses dans les instructions SELECT
individuelles avant d'utiliser UNION
, INTERSECT
ou EXCEPT
. Cela réduit la quantité de données traitées par ces opérateurs.SELECT
sont correctement indexées. Les index peuvent accélérer considérablement la récupération des données, en particulier dans les grandes tables.UNION
au lieu de UNION ALL
vous n'avez pas besoin de supprimer des doublons, cela peut ralentir inutilement votre requête. Évaluez toujours si DISTINCT
est nécessaire.SELECT
COMPOSANT, optimisez chaque partie de la requête individuellement. En suivant ces stratégies d'optimisation, vous pouvez améliorer les performances de vos requêtes SQL qui utilisent UNION
, INTERSECT
ou EXCEPT
des opérateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!