Élargir les possibilités de la clause WHERE
Dans le chapitre précédent, vous avez découvert la commande SELECT, ainsi que plusieurs clauses permettant de restreindre et
d'ordonner les résultats selon différents critères. Nous allons maintenant revenir plus particulièrement sur la clause WHERE.
Jusqu'ici, les conditions permises par WHERE étaient très basiques. Mais cette clause offre bien d'autres possibilités parmi
lesquelles :
la comparaison avec une valeur incomplète (chercher les animaux dont le nom commence par une certaine lettre par
exemple) ;
la comparaison avec un intervalle de valeurs (entre 2 et 5 par exemple) ;
la comparaison avec un ensemble de valeurs (comparaison avec 5, 6, 10 ou 12 par exemple).
Recherche approximative
Pour l'instant, nous avons vu huit opérateurs de comparaison :
Opérateur
Signification
=
égal
<
inférieur
<=
inférieur ou égal
>
supérieur
>=
supérieur ou égal
<> ou !=
différent
<=>
égal (valable pour NULL aussi)
À l'exception de <=> qui est un peu particulier, ce sont les opérateurs classiques, que vous retrouverez dans tous les langages
informatiques. Cependant, il arrive que ces opérateurs ne soient pas suffisants. En particulier pour des recherches sur des
chaînes de caractères. En effet, comment faire lorsqu'on ne sait pas si le mot que l'on recherche est au singulier ou au pluriel par
exemple ? Ou si l'on cherche toutes les lignes dont le champ "commentaires" contient un mot particulier ?
Pour ce genre de recherches, l'opérateur LIKE est très utile, car il permet de faire des recherches en utilisant des "jokers", c'est-à
-dire des caractères qui représentent n'importe quel caractère.
Deux jokers existent pour LIKE :
'%' : qui représente n'importe quelle chaîne de caractères, quelle que soit sa longueur (y compris une chaîne de longueur
0) ;
'_' : qui représente un seul caractère (ou aucun).
Quelques exemples :
'b%' cherchera toutes les chaînes de caractères commençant par 'b' ('brocoli', 'bouli', 'b')
'B_' cherchera toutes les chaînes de caractères contenant une ou deux lettres dont la première est 'b' ('ba',
'bf', 'b')
'%ch%ne' cherchera toutes les chaînes de caractères contenant 'ch' et finissant par 'ne' ('chne', 'chine',
'échine', 'le pays le plus peuplé du monde est la Chine')
'_ch_ne' cherchera toutes les chaînes de caractères commençant par 'ch', éventuellement précédées d'une seule
lettre, suivies de zéro ou d'un caractère au choix et enfin se terminant par 'ne' ('chine', 'chne', 'echine')
Rechercher '%' ou '_'
Comment faire si vous cherchez une chaîne de caractères contenant '%' ou '_' ? Évidemment, si vous écrivez LIKE '%' ou
LIKE '_', MySQL vous donnera absolument toutes les chaînes de caractères dans le premier cas, et toutes les chaînes de 0
ou 1 caractère dans le deuxième.
Il faut donc signaler à MySQL que vous ne désirez pas utiliser % ou _ en tant que joker, mais bien en tant que caractère de
recherche. Pour ça, il suffit de mettre le caractère d'échappement \, dont je vous ai déjà parlé, devant le '%' ou le '_'.
Exemple :
Partie 1 : MySQL et les bases du langage SQL
62/414
www.openclassrooms.com
Dans le chapitre précédent, vous avez découvert la commande SELECT, ainsi que plusieurs clauses permettant de restreindre et
d'ordonner les résultats selon différents critères. Nous allons maintenant revenir plus particulièrement sur la clause WHERE.
Jusqu'ici, les conditions permises par WHERE étaient très basiques. Mais cette clause offre bien d'autres possibilités parmi
lesquelles :
la comparaison avec une valeur incomplète (chercher les animaux dont le nom commence par une certaine lettre par
exemple) ;
la comparaison avec un intervalle de valeurs (entre 2 et 5 par exemple) ;
la comparaison avec un ensemble de valeurs (comparaison avec 5, 6, 10 ou 12 par exemple).
Recherche approximative
Pour l'instant, nous avons vu huit opérateurs de comparaison :
Opérateur
Signification
=
égal
<
inférieur
<=
inférieur ou égal
>
supérieur
>=
supérieur ou égal
<> ou !=
différent
<=>
égal (valable pour NULL aussi)
À l'exception de <=> qui est un peu particulier, ce sont les opérateurs classiques, que vous retrouverez dans tous les langages
informatiques. Cependant, il arrive que ces opérateurs ne soient pas suffisants. En particulier pour des recherches sur des
chaînes de caractères. En effet, comment faire lorsqu'on ne sait pas si le mot que l'on recherche est au singulier ou au pluriel par
exemple ? Ou si l'on cherche toutes les lignes dont le champ "commentaires" contient un mot particulier ?
Pour ce genre de recherches, l'opérateur LIKE est très utile, car il permet de faire des recherches en utilisant des "jokers", c'est-à
-dire des caractères qui représentent n'importe quel caractère.
Deux jokers existent pour LIKE :
'%' : qui représente n'importe quelle chaîne de caractères, quelle que soit sa longueur (y compris une chaîne de longueur
0) ;
'_' : qui représente un seul caractère (ou aucun).
Quelques exemples :
'b%' cherchera toutes les chaînes de caractères commençant par 'b' ('brocoli', 'bouli', 'b')
'B_' cherchera toutes les chaînes de caractères contenant une ou deux lettres dont la première est 'b' ('ba',
'bf', 'b')
'%ch%ne' cherchera toutes les chaînes de caractères contenant 'ch' et finissant par 'ne' ('chne', 'chine',
'échine', 'le pays le plus peuplé du monde est la Chine')
'_ch_ne' cherchera toutes les chaînes de caractères commençant par 'ch', éventuellement précédées d'une seule
lettre, suivies de zéro ou d'un caractère au choix et enfin se terminant par 'ne' ('chine', 'chne', 'echine')
Rechercher '%' ou '_'
Comment faire si vous cherchez une chaîne de caractères contenant '%' ou '_' ? Évidemment, si vous écrivez LIKE '%' ou
LIKE '_', MySQL vous donnera absolument toutes les chaînes de caractères dans le premier cas, et toutes les chaînes de 0
ou 1 caractère dans le deuxième.
Il faut donc signaler à MySQL que vous ne désirez pas utiliser % ou _ en tant que joker, mais bien en tant que caractère de
recherche. Pour ça, il suffit de mettre le caractère d'échappement \, dont je vous ai déjà parlé, devant le '%' ou le '_'.
Exemple :
Partie 1 : MySQL et les bases du langage SQL
62/414
www.openclassrooms.com
