« MySQL/Opérateurs » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 233 :
 
=== LIKE ===
L'opérateur <code>LIKE</code> si la chainechaîne recherchée est inclue dans une colonne :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE 'hello world'
</syntaxhighlight>
 
Généralement cette chaine est sensible à la casse, mais il y a deux exceptions, quand :
* une comparaison <code>LIKE</code> touche une colonne déclarée en <code>BINARY</code> ;
* l'expression contient une clause <code>BINARY</code> :
 
<syntaxhighlight lang=sql>
SELECT * 'test' LIKE BINARY 'TEST' -- 0
</syntaxhighlight>
 
Les comparaisons <code>LIKE</code> acceptent deux caractères spéciaux :
Ligne 254 ⟶ 252 :
 
* Trouver tous les titres commençant par "hello" :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE 'hello%'
</syntaxhighlight>
 
* Trouver tous les titres finissant par "world" :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE '%world'
</syntaxhighlight>
 
* Trouver tous les titres contenant la chaine "gnu" :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE '%gnu%'
</syntaxhighlight>
 
Ces caractères spéciaux peuvent être contenus dans le pattern lui-même. Par exemple, pour rechercher les symboles <code>_</code> ou <code>%</code> dans la base :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE '\_%'
SELECT * FROM articles WHERE titre LIKE '\%%'
</syntaxhighlight>
<code>/</code> peut-être une alternative à <code>\</code> si on le précise :
 
<syntaxhighlight lang=sql>
SELECT * FROM articles WHERE titre LIKE '/_%' ESCAPE '/'
</syntaxhighlight>
 
Quand on utilise l'opérateur <code>=</code>, les espaces des chaines sont ignorés, mais avec <code>LIKE</code> ils sont reconnus :
 
<syntaxhighlight lang=sql>
SELECT 'word' = 'word '; -- 1
SELECT 'word' LIKE 'word '; -- 0
</syntaxhighlight>
 
De même, contrairement à "=", "LIKE" compare uniquement les caractères, même si leurs règles d'interclassement les regroupent<ref>https://docs.oracle.com/cd/E17952_01/mysql-5.0-en/string-comparison-functions.html</ref> :
 
<syntaxhighlight lang=sql>
SELECT 'ä' = 'ae' COLLATE latin1_german2_ci; -- 1
SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci; -- 0
</syntaxhighlight>
 
<code>LIKE</code> fonctionne aussi avec les nombres :
 
<syntaxhighlight lang=sql>
SELECT 123 LIKE '%2%' -- 1
</syntaxhighlight>
 
Pour tester si un pattern ne fonctionne pas alors qu'il devrait, utiliser <code>NOT LIKE</code> :
 
<syntaxhighlight lang=sql>
SELECT 'a' NOT LIKE 'b' -- 1
</syntaxhighlight>
 
=== SOUNDS LIKE ===
<code>SOUNDS LIKE</code> permet de vérifier si deux textes se prononcent pareils. Il utilise l'algorithme <code>SOUNDEX</code>, basé sur les règles de l'anglais, et peut s'avérer assez approximatif :
 
<syntaxhighlight lang=sql>
SELECT `word1` SOUNDS LIKE `word2` FROM `wordList` -- forme courte
SELECT SOUNDEX(`word1`) = SOUNDEX(`word2`) FROM `wordList` -- forme longue
</syntaxhighlight>
 
<code>SOUNDS LIKE</code> est une extension apparue depuis MySQL 4.1.