IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Différence de résultats entre NOT IN et NOT EXISTS


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 30
    Points
    30
    Par défaut Différence de résultats entre NOT IN et NOT EXISTS
    Bonjour,
    j'ai une question qui me taraude , j'aimerais savoir si il y a une différence de résultats si on fait une requête avec NOT IN au lieu de NOT EXISTS, je trouve pas mal de ressources concernant la performance mais j'aimerais avoir un avis détaillé concernant les résultats et l'enchainement effectué.

    cdt

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    SQL> with t1 as (
      2  select 1 as c from dual union all
      3  select NULL as c from dual
      4  ),
      5  t2 as (
      6  select 1 as c from dual union all
      7  select 2 as c from dual union all
      8  select 3 as c from dual
      9  )
     10  select c from t2 where c not in (select c from t1);
     
    no rows selected
     
    SQL>
    SQL> with t1 as (
      2  select 1 as c from dual union all
      3  select NULL as c from dual
      4  ),
      5  t2 as (
      6  select 1 as c from dual union all
      7  select 2 as c from dual union all
      8  select 3 as c from dual
      9  )
     10  select c from t2
     11   where not exists (select 1 from t1 where t1.c = t2.c);
     
             C
    ----------
             3
             2
     
    SQL>
    Help : NOT in SQL

  3. #3
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    il y a une différence si la sous-requête renvoit un null. Car dans ce cas la condition est toujours vraie (comme null est une valeur inconnue on ne peut pas dire qu'une valeur n'est pas dans une liste qui comporte une valeur inconnue).
    Cordialement,
    Franck.

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    [NOT] IN est fait pour comparer une et une seule valeur par rapport à un ensemble de valeurs qui peuvent être une liste définie ou bien sous forme d'une requête.
    [NOT] exists est fait pour vérifier l’existence des données en issue d'une sous requête qui le suit .

    NB: Les crochets est pour dire que NOT soit optionnels.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/07/2010, 10h27
  2. [AC-2000] Différence de résultat entre acpreview et Print d'un état
    Par riri2938 dans le forum IHM
    Réponses: 0
    Dernier message: 20/02/2010, 15h50
  3. [Débutant] Différences de résultats entre MATLAB 6.5 et 7.8
    Par Caps59 dans le forum MATLAB
    Réponses: 21
    Dernier message: 16/03/2009, 15h04
  4. Différence de résultat entre MATLAB et Scilab
    Par ABN84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/05/2008, 22h53
  5. Différence de résultats entre requêtes SQL et Criteria
    Par titoudemtl dans le forum Hibernate
    Réponses: 3
    Dernier message: 07/08/2006, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo