Les différences entre existe et à en sql

<

Contenu

article data-type="article">
Considérez vos objectifs SQL au moment de choisir EXISTE ou IN.

Un défi persistant dans l`utilisation de SQL est de déterminer le bon usage de l`EXISTS et IN opérateurs. Les deux opérateurs peuvent produire les mêmes résultats, mais ne le font pas toujours. En outre, il est important débat sur la façon dont chaque opérateur est optimisé pour la vitesse. Les utilisateurs doivent comprendre les différents attributs de chaque opérateur et essayer à la fois de déterminer la fonction appropriée.

IN Operator

  • L`opérateur IN renvoie une ligne si une WHERE valeur table.field conditionné correspond à une liste de valeurs IN. IN est généralement utilisé dans le cadre d`une requête principale ou en association avec une sous-requête.

     Exemple 1: WHERE table.field dans ( `a`, `b`, `c`)


    Exemple 2: WHERE table.field dans (le jeu de retour de sous-requête de valeurs)

EXISTE opérateur

  • Le EXISTE opérateur revient toutes les lignes principales de la requête si la sous-requête contient toutes les lignes.

    EXISTS est seulement utilisé en conjonction avec une sous-requête. Les lignes retournées sont déterminées par filtrage au niveau de la requête principale. Exemple: WHERE EXISTS (le jeu de retour de sous-requête de valeurs)

Différence

  • IN ne peut pas évaluer Null, de sorte que ces lignes sont toujours faux, et non retourné.

    EXISTE peut évaluer Null, de sorte que ces lignes peuvent être retournés.

Similitudes

  • EXISTE et dans les deux support des sous-requêtes corrélées et non corrélées, et les deux peuvent produire des principaux résultats similaires. Lorsque corrélés, EXISTS et IN correspond un champ de requête principale à un champ sous-requête (ex: main.id = subquery.id). La sous-requête évalue ligne par ligne, pour chaque correspondance trouvée. Dans ce cas, IN et EXISTS renverront les mêmes lignes en fonction de matchs id similaires. Lorsque la non-corrélation, EXISTS et dans le processus de leurs sous-requêtes, puis correspondent à des résultats à la requête principale.

Performance de EXISTE et IN

  • La performance est déterminée par l`optimiseur de base de données et le plan d`exécution qu`il emploie pour le code exécuté. Pour EXISTS et IN, l`optimiseur peut choisir des chemins différents. Dans Oracle, cela est par NOT EXISTS évitant un anti-jointure, et généralement prouver plus rapide que NOT IN. À la fin, quelques essais et erreurs est nécessaire pour comparer le chemin le plus rapide en fonction de la base de données et il est la version utilisée. Assurez-vous d`utiliser l`opérateur qui assure des résultats corrects, puis si tout est le même, essayez de remplacer EXISTE et IN pour voir vraiment ce qui est plus rapide.

AUTRES