Spec-Zone.ru › MySQL 5.7

12.4.2 Функции и операторы сравнения

Таблица 12.4 Операторы сравнения

Таблица 12.4 Операторы сравнения
Имя Описание
> Оператор больше, чем
>= Оператор больше или равен
< Оператор меньше, чем
<>, != Оператор не равен
<= Оператор меньше или равен
<=> Оператор равенства (учитывающий NULL)
= Оператор равенства
BETWEEN ... AND ... Проверка, находится ли значение в заданном диапазоне значений
COALESCE() Возвращает первое не-NULL значение аргумента
EXISTS() Проверка, содержит ли результат запроса какие-либо строки
GREATEST() Возвращает наибольшее значение из аргументов
IN() Проверка, находится ли значение в наборе значений
INTERVAL() Возвращает индекс аргумента, который меньше первого аргумента
IS Проверка значения на соответствие булевому значению
IS NOT Проверка значения на несоответствие булевому значению
IS NOT NULL Проверка на НЕ NULL значение
IS NULL Проверка на NULL значение
ISNULL() Проверка, является ли аргумент NULL
LEAST() Возвращает наименьшее значение из аргументов
LIKE Простое сопоставление шаблонов
NOT BETWEEN ... AND ... Проверка, не находится ли значение в заданном диапазоне значений
NOT EXISTS() Проверка, не содержит ли результат запроса строк
NOT IN() Проверка, не находится ли значение в наборе значений
NOT LIKE Отрицание простого сопоставления шаблонов
STRCMP() Сравнение двух строк

Операции сравнения возвращают значение 1 (TRUE), 0 (FALSE) или NULL. Эти операции работают как для чисел, так и для строк. Строки автоматически преобразуются в числа, а числа — в строки при необходимости.

Следующие операторы сравнения могут использоваться для сравнения не только скалярных операндов, но и операндов строк:

=  >  <  >=  <=  <>  !=

Описания этих операторов далее в этом разделе подробно описывают, как они работают с операндами строк. Дополнительные примеры сравнений строк в контексте подзапросов строк см. в Разделе 13.2.10.5 «Подзапросы строк».

Некоторые функции в этом разделе возвращают значения, отличные от 1 (TRUE), 0 (FALSE) или NULL. LEAST() и GREATEST() являются примерами таких функций; Раздел 12.3 «Преобразование типов в выражениях» описывает правила для операций сравнения, выполняемых этими и подобными функциями для определения их возвращаемых значений.

Для преобразования значения в определенный тип для целей сравнения можно использовать функцию CAST(). Строковые значения могут быть преобразованы в другой набор символов с помощью CONVERT(). См. Раздел 12.10 «Функции и операторы приведения типов».

По умолчанию, сравнение строк не учитывает регистр и использует текущий набор символов. По умолчанию используется набор символов latin1 (cp1252 Западноевропейский), который также хорошо подходит для английского языка.

  • =

    Равно:

    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
    

    Для сравнения строк, (a, b) = (x, y) эквивалентно:

    (a = x) AND (b = y)
    
  • <=>

    NULL-безопасное равенство. Этот оператор выполняет сравнение на равенство, как оператор =, но возвращает 1 вместо NULL, если оба операнда являются NULL, и 0 вместо NULL, если один операнд является NULL.

    Оператор <=> эквивалентен стандартному оператору SQL IS NOT DISTINCT FROM.

    mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
            -> 1, 1, 0
    mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
            -> 1, NULL, NULL
    

    Для сравнения строк, (a, b) <=> (x, y) эквивалентно:

    (a <=> x) AND (b <=> y)
    
  • <>, !=

    Не равно:

    mysql> SELECT '.01' <> '0.01';
            -> 1
    mysql> SELECT .01 <> '0.01';
            -> 0
    mysql> SELECT 'zapp' <> 'zappp';
            -> 1
    

    Для сравнения строк, (a, b) <> (x, y) и (a, b) != (x, y) эквивалентны:

    (a <> x) OR (b <> y)
    
  • <=

    Меньше или равно:

    mysql> SELECT 0.1 <= 2;
            -> 1
    

    Для сравнения строк, (a, b) <= (x, y) эквивалентно:

    (a < x) OR ((a = x) AND (b <= y))
    
  • <

    Меньше:

    mysql> SELECT 2 < 2;
            -> 0
    

    Для сравнения строк, (a, b) < (x, y) эквивалентно:

    (a < x) OR ((a = x) AND (b < y))
    
  • >=

    Больше или равно:

    mysql> SELECT 2 >= 2;
            -> 1
    

    Для сравнения строк, (a, b) >= (x, y) эквивалентно:

    (a > x) OR ((a = x) AND (b >= y))
    
  • >

    Больше:

    mysql> SELECT 2 > 2;
            -> 0
    

    Для сравнения строк, (a, b) > (x, y) эквивалентно:

    (a > x) OR ((a = x) AND (b > y))
    
  • expr BETWEEN min AND max

    Если expr больше или равно min и expr меньше или равно max, BETWEEN возвращает 1, в противном случае возвращает 0. Это эквивалентно выражению (min <= expr AND expr <= max), если все аргументы одного типа. В противном случае преобразование типов происходит в соответствии с правилами, описанными в Разделе 12.3, «Преобразование типов при вычислении выражений», но применяется ко всем трем аргументам.

    mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;
            -> 1, 0
    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
    

    Для достижения наилучших результатов при использовании BETWEEN с датами или значениями времени, используйте CAST() для явного преобразования значений к нужному типу данных. Примеры: Если вы сравниваете DATETIME с двумя значениями DATE, преобразуйте значения DATE в значения DATETIME. Если вы используете строковую константу, такую как '2001-1-1', в сравнении с DATE, преобразуйте строку в DATE.

  • expr NOT BETWEEN min AND max

    Это то же самое, что и NOT (expr BETWEEN min AND max).

  • COALESCE(value,...)

    Возвращает первое значение, не являющееся NULL в списке, или NULL, если нет значений, не являющихся NULL.

    Тип возвращаемого значения COALESCE() является агрегированным типом типов аргументов.

    mysql> SELECT COALESCE(NULL,1);
            -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
            -> NULL
    
  • EXISTS(query)

    Содержит ли результат запроса какие-либо строки.

    CREATE TABLE t (col VARCHAR(3));
    INSERT INTO t VALUES ('aaa', 'bbb', 'ccc', 'eee');
    
    SELECT EXISTS (SELECT * FROM t WHERE col LIKE 'c%');
            -> 1
    
    SELECT EXISTS (SELECT * FROM t WHERE col LIKE 'd%');
            -> 0
    
  • NOT EXISTS(query)

    Содержит ли результат запроса какие-либо строки:

    SELECT NOT EXISTS (SELECT * FROM t WHERE col LIKE 'c%');
            -> 0
    
    SELECT NOT EXISTS (SELECT * FROM t WHERE col LIKE 'd%');
            -> 1
    
  • GREATEST(value1,value2,...)

    С двумя или более аргументами возвращает наибольший (максимальный) аргумент. Аргументы сравниваются по тем же правилам, что и для LEAST().

    mysql> SELECT GREATEST(2,0);
            -> 2
    mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
            -> 767.0
    mysql> SELECT GREATEST('B','A','C');
            -> 'C'
    

    GREATEST() возвращает NULL, если любой аргумент является NULL.

  • expr IN (value,...)

    Возвращает 1 (истина), если expr равно любому из значений в списке IN(), в противном случае возвращает 0 (ложь).

    Преобразование типов происходит в соответствии с правилами, описанными в Разделе 12.3, «Преобразование типов при вычислении выражений», применяется ко всем аргументам. Если преобразование типов не требуется для значений в списке IN(), они являются константами одного типа, и expr можно сравнить с каждой из них как значение того же типа (возможно, после преобразования типа), происходит оптимизация. Значения списка сортируются, и поиск expr выполняется с помощью бинарного поиска, что делает операцию IN() очень быстрой.

    mysql> SELECT 2 IN (0,3,5,7);
            -> 0
    mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
            -> 1
    

    IN() может использоваться для сравнения конструкторов строк:

    mysql> SELECT (3,4) IN ((1,2), (3,4));
            -> 1
    mysql> SELECT (3,4) IN ((1,2), (3,5));
            -> 0
    

    Никогда не следует смешивать значения в кавычках и без кавычек в списке IN(), поскольку правила сравнения для значений в кавычках (например, строк) и значений без кавычек (например, чисел) различаются. Смешивание типов может привести к несогласованным результатам. Например, не следует писать выражение IN() следующим образом:

    SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
    

    Вместо этого напишите это так:

    SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
    

    Неявное преобразование типов может давать неинтуитивные результаты:

    mysql> SELECT 'a' IN (0), 0 IN ('b');
            -> 1, 1
    

    В обоих случаях значения сравнения преобразуются в значения с плавающей точкой, давая 0,0 в каждом случае, и результат сравнения 1 (истина).

    Количество значений в списке IN() ограничено только значением max_allowed_packet.

    Для соответствия стандарту SQL, IN() возвращает NULL не только если выражение в левой части является NULL, но и если совпадение не найдено в списке, и одно из выражений в списке является NULL.

    Синтаксис IN() также может использоваться для записи определенных типов подзапросов. См. Раздел 13.2.10.3, «Подзапросы с ANY, IN или SOME».

  • expr NOT IN (value,...)

    Это то же самое, что и NOT (expr IN (value,...)).

  • INTERVAL(N,N1,N2,N3,...)

    Возвращает 0, если N ≤ N1, 1, если N ≤ N2 и так далее, или -1, если N является NULL. Все аргументы обрабатываются как целые числа. Требуется, чтобы N1 ≤ N2 ≤ N3 ≤ ... ≤ Nn для правильной работы этой функции. Это связано с тем, что используется бинарный поиск (очень быстрый).

    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
    
  • IS boolean_value

    Проверяет значение на соответствие булевому значению, где boolean_value может быть TRUE, FALSE или UNKNOWN.

    mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
            -> 1, 1, 1
    
  • IS NOT boolean_value

    Проверяет значение по отношению к булевому значению, где boolean_value может быть TRUE, FALSE или UNKNOWN.

    mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
            -> 1, 1, 0
    
  • IS NULL

    Проверяет, является ли значение NULL.

    mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
            -> 0, 0, 1
    

    Для совместимости с программами ODBC, MySQL поддерживает следующие дополнительные функции при использовании IS NULL:

    • Если переменная sql_auto_is_null установлена в 1, то после успешного вставки автоматически сгенерированного AUTO_INCREMENT значения, вы можете получить это значение, выполнив запрос следующего формата:

      SELECT * FROM tbl_name WHERE auto_col IS NULL
      

      Если запрос возвращает строку, то возвращаемое значение будет таким же, как и при вызове функции LAST_INSERT_ID(). Подробности, включая возвращаемое значение после вставки нескольких строк, смотрите в Разделе 12.15, «Функции информации». Если успешная вставка AUTO_INCREMENT значения не произошла, то запрос SELECT не вернет ни одной строки.

      Поведение по получению значения AUTO_INCREMENT с помощью сравнения IS NULL можно отключить, установив sql_auto_is_null = 0. См. Раздел 5.1.7, «Системные переменные сервера».

      Значение по умолчанию для sql_auto_is_null равно 0.

    • Для столбцов DATE и DATETIME, объявленных как NOT NULL, вы можете найти специальное значение даты '0000-00-00', используя запрос такого вида:

      SELECT * FROM tbl_name WHERE date_column IS NULL
      

      Это необходимо для работы некоторых приложений ODBC, так как ODBC не поддерживает значение даты '0000-00-00'.

      См. , и описание опции FLAG_AUTO_IS_NULL в .

  • IS NOT NULL

    Проверяет, не является ли значение NULL.

    mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
            -> 1, 1, 0
    
  • ISNULL(expr)

    Если expr равно NULL, ISNULL() возвращает 1, в противном случае — 0.

    mysql> SELECT ISNULL(1+1);
            -> 0
    mysql> SELECT ISNULL(1/0);
            -> 1
    

    ISNULL() можно использовать вместо = для проверки, является ли значение NULL. (Сравнение значения с NULL с помощью = всегда приводит к результату NULL.)

    Функция ISNULL() имеет некоторые особые свойства, схожие со сравнением оператора IS NULL. См. описание IS NULL.

  • LEAST(value1,value2,...)

    При наличии двух или более аргументов, возвращает наименьший (минимальное значение) аргумент. Аргументы сравниваются по следующим правилам:

    • Если любой из аргументов NULL, результат равен NULL. Сравнение не требуется.

    • Если все аргументы являются целочисленными, они сравниваются как целые числа.

    • Если хотя бы один аргумент имеет двойную точность, они сравниваются как значения двойной точности. В противном случае, если хотя бы один аргумент — это значение DECIMAL, они сравниваются как значения DECIMAL.

    • Если аргументы включают смесь чисел и строк, они сравниваются как числа.

    • Если любой аргумент — это небинарная (символьная) строка, аргументы сравниваются как небинарные строки.

    • Во всех других случаях аргументы сравниваются как бинарные строки.

    Тип возвращаемого значения LEAST() соответствует типу агрегированных аргументов сравнения.

    mysql> SELECT LEAST(2,0);
            -> 0
    mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
            -> 3.0
    mysql> SELECT LEAST('B','A','C');
            -> 'A'
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/comparison-operators.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API