Dans le cours : L'essentiel de SQL

Maîtriser l'opérateur LIKE - Tutoriel SQL

Dans le cours : L'essentiel de SQL

Maîtriser l'opérateur LIKE

Dans la clause WHERE nous pouvons chercher avec des opérateurs de comparaison, par exemple l'égalité. Ici, je cherche tous les contacts qui s'appellent Nguyen. Mais parfois on a besoin de chercher avec un peu plus de souplesse que ça. Par exemple, y a-t-il des gens dont le nom commence par Ng ou des gens dont le nom comporte Ng au début ou à la fin ? Comment peut-on faire ce type de recherche ? En tout cas pas avec l'opérateur =. Il va falloir qu'on change de stratégie. Il y a, dans le langage SQL, un opérateur spécifique qui s'appelle LIKE. C'est un opérateur, ce n'est pas un signe comme le = mais une suite de lettres, mais c'est un opérateur quand même. Et cet opérateur permet, comme son nom l'indique, de chercher quelque chose qui ressemble à. Maintenant, si je fais un nom LIKE Nguyen, je vais trouver Nguyen. Rien de changé. Ce qu'il va falloir que je fasse, à l'intérieur du littéral qui me permet la recherche, c'est utiliser des caractères jokers ou des caractères spéciaux qui seront interprétés par le LIKE comme quelque chose de spécial. Les deux caractères qu'on va utiliser sont le % et le _ . Le _ est souvent nommé le tiret bas. Sous Windows et Linux, sur les claviers azerty, il est aussi nommé tiret du 8 car il est accessible sous la touche du 8. Sur les claviers macOS, il est situé au-dessus du tiret normal. Notons une chose. Ce sont deux caractères qui sont interprétés uniquement lorsqu'on utilise un LIKE. Je vois parfois des gens qui essayent de le mettre dans un IN ou dans un BETWEEN, on pourrait essayer dans une égalité, ça ne fonctionnera pas. C'est uniquement avec un LIKE. Si vous cherchez avec quoi que ce soit d'autre, SQL cherchera le signe % à l'intérieur de la colonne et je doute qu'il y ait quelqu'un qui ait le signe % dans son nom. Maintenant que cela est dit, le % permet de remplacer zéro ou plusieurs caractères, n'importe lesquels, mais je dis bien de zéro à plusieurs caractères. Si je mets Nguyen avec un % ici et que je cherche, je trouve Nguyen quand même. Il n'y a rien après. On aurait remplacé zéro caractère. Si je mets Ng %, je pourrai trouver des gens qui s'appellent Ng tout court ou des gens qui appellent Ng quelque chose. Comme je mets mon % à la fin de la chaîne et qu'au début de la chaîne on commence par Ng, je vais chercher tous les gens qui s'appellent Ng quelque chose. Et il se trouve qu'on dirait qu'il n'y a que Nguyen dans notre base qui corresponde à ce critère. Je peux utiliser plusieurs fois ces signes. Par exemple, je peux mettre un % au début également, je pourrais mettre un % au milieu. Je peux en mettre autant que je veux. Ça ne sert à rien de les dupliquer puisqu'ils représentent zéro ou plusieurs caractères mais en revanche à un endroit, au début et à la fin, ça a du sens. Ici je cherche tous les gens qui ont Ng à l'intérieur du mot. Il se trouve que j'ai mis un N majuscule et que je suis dans MariaDB ou MySQL et que je ne suis pas sensible à la casse mais, dans certains systèmes comme dans Oracle par exemple, vous serez sensible à la casse. Vous ne trouverez pas Duong par exemple parce que le N est exprimé en majuscule mais en fait il est stocké en minuscule. Mais dans MySQL ou MariaDB, ça passe. Vous notez que Ng peut se trouver n'importe où, au début, à la fin, puisqu'on peut avoir zéro caractère ou plusieurs ici, zéro caractère ou plusieurs là. Ensuite, si je veux chercher tous les gens dont le nom se termine par ng, là par convention je vais mettre en minuscules puisque je me doute que ça doit être en minuscules. Je mets simplement un % au début. Voilà tous les gens dont le nom se termine par ng. Et nous avons dit il y a aussi le blanc _. À quoi sert-il ? Lui, il va servir à remplacer un seul caractère. Si je cherche les gens dont le nom se termine par ng mais qui ont systématiquement trois caractères avant, ni plus ni moins, je vais inscrire trois _. De cette façon, je trouve effectivement tous les gens qui ont trois lettres, n'importe lesquelles, mais ensuite ng. Je vais pouvoir aussi mélanger des % et des _ pour chercher la chaîne que je veux voir apparaître. Par exemple, si je mets un %, je vais trouver tous les gens dont le nom se termine par ng mais qui ont au moins trois caractères de plus, au moins trois caractères ou plus puisque je mets un %. Je vais trouver plus de résultats mais j'éviterai les gens qui n'ont que quatre lettres dans leur nom. Voilà comment vous utilisez le LIKE dans une clause WHERE pour faire une recherche avec ce qu'on appelle un pattern de recherche et des caractères spéciaux.

Table des matières