Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Урок 6.3: Нетипизированный Оператор сравнения в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Нетипизированный Оператор сравнения в MySQL

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

MySQL выполняет все сравнения, использующие следующие правила:

  • если один или оба параметра равны, NULL, результат сравнения также равен NULL, за исключением операторов <=>;
  • если оба параметра в операции сравнения представляют собой строки, они сравниваются как строки;
  • если оба параметра представляют собой числа, они сравниваются как числа;
  • шестнадцатеричные значения обрабатываются как двоичные строки, если они не сравниваются с числом;
  • если один из параметров представляет собой столбец типа TIMESTAMP или DATETIME, а другой параметр является константой, то она будет преобразована в timestamp прежде, чем сравнение выполняется;
  • во всех других случаях параметры сравниваются как числа с плавающей запятой (реальные).

По умолчанию, сравнения строк выполнены независимо от регистра с использованием текущего набора символов (по умолчанию это ISO-8859-1 Latin1, который превосходно работает для английского языка).

Примеры ниже иллюстрируют преобразование строк в соответствующие числа для выполнения операций сравнения:

mysql> SELECT 1 > "6x";
-> 0
mysql> SELECT 7 > "6x";
-> 1
mysql> SELECT 0 > "x6";
->'0
mysql> SELECT 0 = "x6";
-> 1

Равны (=):

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

He равны (<> или ! =):

mysql> select ".01" <> "0.01:
-> 1
mysql> select .01 <> "0.01"
-> 0
mysql> select "zapp" <> "zappp"
-> 1

Меньше, чем или равны (<=):

mysql> select 0.1 <= 2;
-> 1

Строго меньше, чем (<):

mysql> select 2 < 2;
-> 0

Больше, чем или равны (>=):

mysql> select 2 >= 2;
-> 1

Строго больше, чем (>):

mysql> select 2 > 2;
-> 0

Null равен (<=>):

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

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

mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL;
->0 0 1
mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
->1 1 0

expr BETWEEN min AND max.

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

  • если ехрr представляет собой столбец типа TIMESTAMP, DATE или DATETIME, то MIN() и МАХ() приводятся к тому же самому формату, если они константы;
  • если ехрr представляет собой строку, нечувствительную к регистру, то сравнение выполняется без учета регистра;
  • если ехрr представляет собой строку, чувствительную к регистру, то сравнение выполняется с учетом регистра символов;
  • если ехрr представляет собой целочисленное выражение, будет выполнено целочисленное сравнение;
  • иначе, будет выполнено сравнение чисел с плавающей запятой.
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

expr IN (value,...).

Возвращается 1, если expr представляет собой любое из значений в списке IN, иначе возвращается 0. Если все значения - константы, то они оценены согласно типу ехрr и отсортированы. Затем буцет выполнен двоичный поиск элемента. Это означает, что IN очень быстр, если список значений IN состоит годностью из констант. Если ехрr - чувствительное к регистру строковое выражение, сравнение строк выполняется с учетом регистра:

mysql> select 2 IN (0,3,5,'wefwf');
    -> 0
mysql> select "wefwf” IN (0,3,5,'wefwf');
    -> 1

expr NOT IN (value,...)

Аналогично NOT (expr IN (value,...)).

ISNULL(expr).

Если expr равен NULL, ISNULL() возвращает 1, иначе это возвращает 0:

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

Обратите внимание, что сравнение значений NULL, использующих =, всегда будет равно false!

COALESCE(list).

Возвращает первый не-NULL элемент в списке:

mysql> select COALESCE(NULL,1);
    -> 1
mysql> select COALESCE(NULL,NULL,NULL);
    -> NULL

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

Возвращает 0, если N < N1, 1, если N < N2 и так далее. Все параметры обрабатываются как целые числа. Это требует, чтобы выполнялось условие: 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

Если вы сравниваете чувствительную к регистру строку любым из стандартных операторов (=, <>..., но не LIKE), конечный пробел будет игнорироваться.

mysql> select "а" = ”А";
    -> 1