EXISTE
EXISTS sert littéralement à vérifier l'existence de critères spécifiés. Dans le SQL standard actuel, cela vous permettra de spécifier plusieurs critères de comparaison - IE si vous voulez savoir quand col_a et col_b correspondent tous les deux - ce qui le rend un peu plus fort que la clause IN. MySQL IN prend en charge les tuples, mais la syntaxe n'est pas portable, donc EXISTS est un meilleur choix à la fois pour la lisibilité et la portabilité.
L'autre chose dont il faut être conscient avec EXISTS est son fonctionnement - EXISTS renvoie un booléen et renverra un booléen lors de la première correspondance. Ainsi, si vous avez affaire à des doublons/multiples, EXISTS sera plus rapide à exécuter que IN ou JOIN selon les données et les besoins.
EN
IN est le sucre syntaxique des clauses OR. Bien qu'il soit très accommodant, il y a des problèmes avec le traitement de nombreuses valeurs pour cette comparaison (au nord de 1 000).
PAS
L'opérateur NOT inverse simplement la logique.
Sous-requêtes vs JOIN
Le mantra "toujours utiliser des jointures" est erroné, car les JOINS risquent de gonfler le jeu de résultats s'il existe plusieurs enregistrements enfants pour un parent. Oui, vous pouvez utiliser DISTINCT ou GROUP BY pour gérer cela, mais il est très probable que cela améliore les performances de l'utilisation d'un JOIN discutable. Connaissez vos données et ce que vous voulez pour un ensemble de résultats :ces éléments sont essentiels pour écrire du SQL performant.
Pour réitérer savoir quand et pourquoi savoir quoi utiliser - LEFT JOIN IS NULL est la liste d'exclusion la plus rapide sur MySQL si les colonnes comparées ne sont PAS nullables , sinon NOT IN/NOT EXISTS sont de meilleurs choix.
Référence :
- MySQL :LEFT JOIN/IS NULL, NOT IN, NOT EXISTS sur les colonnes nullables
- MySQL :LEFT JOIN/IS NULL, NOT IN, NOT EXISTS sur les colonnes NOT nullable