XOR
Sélection des animaux qui sont soit des mâles, soit des perroquets (mais pas les deux) :
Code : SQL
SELECT *
FROM Animal
WHERE sexe='M'
XOR espece='perroquet';
Et voilà pour les opérateurs logiques. Rien de bien compliqué, et pourtant, c'est souvent source d'erreur. Pourquoi ? Tout
simplement parce que tant que vous n'utilisez qu'un seul opérateur logique, tout va très bien. Mais on a souvent besoin de
combiner plus de deux critères, et c'est là que ça se corse.
Sélection complexe
Lorsque vous utilisez plusieurs critères, et que vous devez donc combiner plusieurs opérateurs logiques, il est extrêmement
important de bien structurer la requête. En particulier, il faut placer des parenthèses au bon endroit. En effet, cela n'a pas de sens
de mettre plusieurs opérateurs logiques différents sur un même niveau.
Petit exemple simple :
Critères : rouge AND vert OR bleu
Qu'accepte-t-on ?
Ce qui est rouge et vert, et ce qui est bleu ?
Ou ce qui est rouge et, soit vert soit bleu ?
Dans le premier cas, [rouge, vert] et [bleu] seraient acceptés. Dans le deuxième, c'est [rouge, vert] et [rouge, bleu] qui seront
acceptés, et non [bleu].
En fait, le premier cas correspond à (rouge AND vert) OR bleu, et le deuxième cas à rouge AND (vert OR bleu).
Avec des parenthèses, pas moyen de se tromper sur ce qu'on désire sélectionner !
Exercice/Exemple
Alors, imaginons une requête bien tordue…
Je voudrais les animaux qui sont, soit nés après 2009, soit des chats mâles ou femelles, mais dans le cas des femelles, elles
doivent être nées avant juin 2007.
Je vous conseille d'essayer d'écrire cette requête tout seuls. Si vous n'y arrivez pas, voici une petite aide : l'astuce, c'est de
penser en niveaux. Je vais donc découper ma requête.
Je cherche :
les animaux nés après 2009 ;
les chats mâles et femelles (uniquement nées avant juin 2007 pour les femelles).
C'est mon premier niveau. L'opérateur logique sera OR puisqu'il faut que les animaux répondent à un seul des deux critères pour
être sélectionnés.
On continue à découper. Le premier critère ne peut plus être subdivisé, contrairement au deuxième. Je cherche :
les animaux nés après 2009 ;
les chats :
mâles ;
et femelles nées avant juin 2007.
Partie 1 : MySQL et les bases du langage SQL
56/414
www.openclassrooms.com
Sélection des animaux qui sont soit des mâles, soit des perroquets (mais pas les deux) :
Code : SQL
SELECT *
FROM Animal
WHERE sexe='M'
XOR espece='perroquet';
Et voilà pour les opérateurs logiques. Rien de bien compliqué, et pourtant, c'est souvent source d'erreur. Pourquoi ? Tout
simplement parce que tant que vous n'utilisez qu'un seul opérateur logique, tout va très bien. Mais on a souvent besoin de
combiner plus de deux critères, et c'est là que ça se corse.
Sélection complexe
Lorsque vous utilisez plusieurs critères, et que vous devez donc combiner plusieurs opérateurs logiques, il est extrêmement
important de bien structurer la requête. En particulier, il faut placer des parenthèses au bon endroit. En effet, cela n'a pas de sens
de mettre plusieurs opérateurs logiques différents sur un même niveau.
Petit exemple simple :
Critères : rouge AND vert OR bleu
Qu'accepte-t-on ?
Ce qui est rouge et vert, et ce qui est bleu ?
Ou ce qui est rouge et, soit vert soit bleu ?
Dans le premier cas, [rouge, vert] et [bleu] seraient acceptés. Dans le deuxième, c'est [rouge, vert] et [rouge, bleu] qui seront
acceptés, et non [bleu].
En fait, le premier cas correspond à (rouge AND vert) OR bleu, et le deuxième cas à rouge AND (vert OR bleu).
Avec des parenthèses, pas moyen de se tromper sur ce qu'on désire sélectionner !
Exercice/Exemple
Alors, imaginons une requête bien tordue…
Je voudrais les animaux qui sont, soit nés après 2009, soit des chats mâles ou femelles, mais dans le cas des femelles, elles
doivent être nées avant juin 2007.
Je vous conseille d'essayer d'écrire cette requête tout seuls. Si vous n'y arrivez pas, voici une petite aide : l'astuce, c'est de
penser en niveaux. Je vais donc découper ma requête.
Je cherche :
les animaux nés après 2009 ;
les chats mâles et femelles (uniquement nées avant juin 2007 pour les femelles).
C'est mon premier niveau. L'opérateur logique sera OR puisqu'il faut que les animaux répondent à un seul des deux critères pour
être sélectionnés.
On continue à découper. Le premier critère ne peut plus être subdivisé, contrairement au deuxième. Je cherche :
les animaux nés après 2009 ;
les chats :
mâles ;
et femelles nées avant juin 2007.
Partie 1 : MySQL et les bases du langage SQL
56/414
www.openclassrooms.com
