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 :

Ordre dans la clause WHERE


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Points : 341
    Points
    341
    Par défaut Ordre dans la clause WHERE
    Bonjour,

    J'aurais voulu savoir si les 2 clauses where ci dessous font la même chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE (A.C1 = 1 and B.C2 !0 OR A.C1 = 20 and A.C2 = 0 and B.C2 != 0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ((A.C1 = 1 OR A.C1 = 20 AND A.C2 = 0) AND B.C2 != 0)
    Qq'un peut-il rappeler l'ordre des tests effectués dans un clause where avec des AND et des OR?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    OR et AND combinés sans parenthèse, c'est le mal !
    Mon intuition indique que c'est celà qui souhaite être fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (A.C1 = 1 OR (A.C1 = 20 AND A.C2 = 0)) AND B.C2 <> 0

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par farenheiit Voir le message
    Qq'un peut-il rappeler l'ordre des tests effectués dans un clause where avec des AND et des OR?
    Si tu as un doute, mets des parenthèses !
    Pourquoi se prendre la tête ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Apparement (mais ce n'est pas empirique), Oracle considère des parenthèses sur tout ce qu'il y a avant et après le OR :
    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
    With A as 
    (
        select level as id,
               case mod(trunc((level-1)/4), 3) when 2 then 20 else mod(trunc((level-1)/4), 3) end as c1,
               mod(trunc((level-1)/2), 2) as c2,
               mod(level-1, 2) as c3 
          from dual
    connect by level <= 12
    )
    select id, c1, c2, c3,
           case when (c1 = 1 and c3 != 0 or c1 = 20 and c2 = 0 and c3 != 0) then 'True' else 'False' end as p1,
           case when ((c1 = 1 or c1 = 20 and c2 = 0) and c3 != 0)           then 'True' else 'False' end as p2,
           case when (c1 = 1 or (c1 = 20 and c2 = 0)) and c3 <> 0           then 'True' else 'False' end as p3
      from A;
     
    ID	C1	C2	C3	P1	P2	P3
    1	0	0	0	False	False	False
    2	0	0	1	False	False	False
    3	0	1	0	False	False	False
    4	0	1	1	False	False	False
    5	1	0	0	False	False	False
    6	1	0	1	True	True	True
    7	1	1	0	False	False	False
    8	1	1	1	True	True	True
    9	20	0	0	False	False	False
    10	20	0	1	True	True	True
    11	20	1	0	False	False	False
    12	20	1	1	False	False	False

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

Discussions similaires

  1. Ordre des conditions dans une clause WHERE, important ou pas en 2012 ?
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/03/2012, 12h54
  2. [MySQL] Influence de l'ordre des conditions dans la clause WHERE
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/02/2012, 23h46
  3. Obtenir un résultat dans l'ordre de la clause where
    Par Antherak dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/10/2011, 12h04
  4. Ordre des tests dans la clause WHERE
    Par Tans98 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/09/2004, 11h52
  5. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 13h21

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