7.3.5 Opérateurs de comparaison

Les opérations de comparaison retourne soit 1 (TRUE), 0 (FALSE) ou NULL. Ces fonctions s'appliquent aussi bien aux nombres qu'aux chaînes. Les chaînes sont automatiquement converties en nombre et les nombres en chaîne, suivant les besoins (comme en Perl).

MySQL effectue les comparaisons en suivant les règle suivantes

  • Si l'un au moins des argument est NULL, le résultat de la comparaison est NULL.
  • Si les deux argument sont des chaînes, ils se comparent en tant que chaînes.
  • Si les deux argument sont des entiers, ils se comparent en tant que entiers.
  • Si les deux argument est de type TIMESTAMP ou DATETIME, et l'autre argument est une constante, la constante est convertie au format TIMESTAMP avant la comparaison. Cette fonction est faite pour assurer la compatibilité ODBC.
  • Dans tous les autres cas, les arguments sont comparés en tant que nombre à virgule flottante.

Par défaut, les comparaisons de chaîne sont fait sans tenir compte de la casse, et en utilisant le jeu de caractère courant (ISO-8859-1 Latin1 par défaut, qui fonctionne bien pour l'anglais). Les exemples suivants illustrent les règles de conversions lors des opérations de comparaison.

mysql> SELECT 1 > '6x';
         -> 0
mysql> SELECT 7 > '6x';
         -> 1
mysql> SELECT 0 > 'x6';
         -> 0
mysql> SELECT 0 = 'x6';
         -> 1
  • = Egalité.
    mysql> select 1 = 0;
            -> 0
    mysql> select '0' = 0;
            -> 1
    mysql> select '0.0' = 0;
            -> 1
    mysql> select '0.01' = 0;
            -> 0
    mysql> select '.01' = 0.01;
            -> 1
    
  • <>
  • != Différent
    mysql> select '.01' <> '0.01';
            -> 1
    mysql> select .01 <> '0.01';
            -> 0
    mysql> select 'zorro' <> 'zorrro';
            -> 1
    
  • <= Inférieur ou égal
    mysql> select 0.1 <= 2;
            -> 1
    
  • < Strictement inférieur
    mysql> select 2 <= 2;
            -> 1
    
  • >= Supérieur ou égal
    mysql> select 2 >= 2;
            -> 1
    
  • > Strictement supérieur
    mysql> select 2 > 2;
            -> 0
    
  • <=> Egalité : ce opérateur s'assure qu'on ne compare pas NULL et une valeur non nulle.
    mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
            -> 1 1 0
    
  • expression BETWEEN minimum AND maximum Si l'expression est comprise entre le minimum et le maximum, alors BETWEEN retourne 1, sinon 0. Cette fonction est équivalente à l'expression (minimum <= expression AND expression <= maximum) si tous les arguments sont du même type. Le premier argument (expression) détermine la manière dont la comparaison va être faite. Si expression est une chaîne, la comparaison sera de type chaîne, et insensible à la casse. Si expression est une chaîne de type binaire, la comparaison sera de type chaîne, et sensible à la casse. Si expression est un entier, la comparaison sera de type numérique. Si expression est un nombre à virgule flottante, la comparaison sera de type numérique, à virgule flottante.
    mysql> select 1 BETWEEN 2 AND 3;
            -> 0
    mysql> select 'b' BETWEEN 'a' AND 'c';
            -> 1
    mysql> select 2 BETWEEN 2 AND '3';
            -> 1
    mysql> select 2 BETWEEN 2 AND 'x-3';
            -> 0
    
  • expression IN (value,...) Retourne 1 si expression est un membre de la liste IN, sinon retourne 0.Si toutes les valeurs de la liste IN sont constantes, alors elles sont toutes converties au type de expression, et triées. La recherche dans la listes est alors faite avec une recherche binaire. Cela signifie que la recherche est très rapide si la liste IN ne contient que des constantes. Si expression est une chaîne sensible à la casse, la comparaison avec les valeurs de IN en tiendra compte.
    mysql> select 2 IN (0,3,5,'wefwf');
            -> 0
    mysql> select 'wefwf' IN (0,3,5,'wefwf');
            -> 1
    
  • expression NOT IN (value,...) Identique à NOT (expression IN (value,...)).
  • ISNULL(expression ) Si expression est NULL, ISNULL() retourne 1, sinon 0.
    mysql> select ISNULL(1+1);
            -> 0
    mysql> select ISNULL(1/0);
            -> 1
    

    Il faut noter que la comparaison à NULL avec = sera toujours fausse!

  • COALESCE(liste) Retourne le premier élément non NULL dans la liste.
    mysql> select COALESCE(NULL,1);
            -> 1
    mysql> select ISNULL(NULL,NULL,NULL);
            -> NULL
    
  • INTERVAL(N,N1,N2,N3,...) Retourne 1 si N1 < N2 < N3 < ... < Nn . Si il existe deux valeurs i et j, telles que i < j et Ni > Nj, alors la fonction retourne faux. Toutes les valeurs sont traitées comme des nombres. Cela permet l'utilisation d'une comparaison binaire, très rapide.
    mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
            -> 3
    mysql> select INTERVAL(10, 1, 10, 100, 1000);
            -> 2
    mysql> select INTERVAL(22, 23, 30, 44, 200);
            -> 0