Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Справочник по языку MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Функции, используемые в операторах SELECT и WHERE (часть 1) - Программирование от RIN.RU
Функции, используемые в операторах SELECT и WHERE (часть 1)



Операторы и функции общего назначения




Круглые скобки


( ... )


Круглые скобки используются для задания порядка вычислений в выражении. Например:


mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9




Операторы сравнения


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


Операции сравнения в MySQL выполняются по следующим правилам:


  • Если один или оба аргумента - NULL, то и результат сравнения будет NULL. Справедливо для всех операторов кроме <=>.

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

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

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

  • Если один из аргументов представляет собой столбец типа TIMESTAMP или DATETIME, а второй аргумент - константа, то константа перед выполнением сравнения преобразуется к типу TIMESTAMP. Это сделано для лучшей совместимости с ODBC.

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


По умолчанию сравнение строк производится без учета регистра символов с использованием текущего набора символов (по умолчанию 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


<>


!=

Не равно:


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


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


  • Можно найти последнюю вставленную строку, используя выражение:


    SELECT * FROM tbl_name WHERE auto_col IS NULL


    Это свойство можно блокировать установкой SQL_AUTO_IS_NULL=0. См. раздел Синтаксис команды SET.

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


    SELECT * FROM tbl_name WHERE date_column IS NULL


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


expr BETWEEN min AND max

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


  • Если expr представляет собой столбец типа TIMESTAMP, DATE или DATETIME, а величины MIN() и MAX() являются константами, то последние приводятся к тому же формату, что и столбец.

  • Если expr является независимым от регистра символов строковым выражением, то производится сравнение строк без учета регистра.

  • Если expr является зависимым от регистра символов строковым выражением, то производится сравнение строк с учетом регистра.

  • Если expr представляет собой целочисленное выражение, то выполняется сравнение целых чисел.

  • Во всех остальных случаях производится сравнение аргументов как действительных чисел с плавающей точкой.



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 NOT BETWEEN min AND max

То же справедливо и для функции NOT (expr BETWEEN min AND max).

expr IN (value,...)

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


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 "a" ="A ";
-> 1


Логические операторы


Все логические операторы дают в результате значения 1 (ИСТИНА), 0 (ЛОЖЬ) или NULL (неустановленное, которое в большинстве случаев принимается как ЛОЖЬ):


NOT


!

Логическое НЕ. Возвращает 1, если операнд равен 0, в противном случае - 0. Исключение: NOT NULL определяется как NULL:


mysql> SELECT NOT 1;
-> 0
mysql> SELECT NOT NULL;
-> NULL
mysql> SELECT ! (1+1);
-> 0
mysql> SELECT ! 1+1;
-> 1


Последний пример дает 1, поскольку данное выражение вычисляется тем же способом, что и (!1)+1.

OR


||

Логическое ИЛИ. Возвращает 1, если любой из операндов не равен ни 0, ни NULL:


mysql> SELECT 1 || 0;
-> 1
mysql> SELECT 0 || 0;
-> 0
mysql> SELECT 1 || NULL;
-> 1



AND


&&

Логическое И. Для операндов, значение которых не равно NULL, дает 1, если оба операнда ненулевые, и 0 - в противном случае. Возвращает NULL, если один из операндов равен NULL:


mysql> SELECT 1 && 1;
-> 1
mysql> SELECT 1 && 0;
-> 0
mysql> SELECT 1 && NULL;
-> NULL




Функции потока управления программой



IFNULL(expr1,expr2)

Если expr1 не равно NULL, то функция IFNULL() возвращает значение expr1, в противном случае - expr2. В зависимости от контекста функция IFNULL() может возвращать либо числовое, либо строковое значение:


mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'


NULLIF(expr1,expr2)

Если выражение expr1 = expr2 истинно, то возвращает NULL, в противном случае - expr1. Эквивалентна оператору CASE WHEN x = y THEN NULL ELSE x END:


mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1


Отметим, что если аргументы равны, то величина expr1 вычисляется в MySQL дважды.

IF(expr1,expr2,expr3)

Если expr1 равно значению ИСТИНА (expr1 <> 0 и expr1 <> NULL), то функция IF() возвращает expr2, в противном случае - expr3. В зависимости от контекста функция IF() может возвращать либо числовое, либо строковое значение:


mysql> SELECT IF(1>2,2,3);
-> 3
mysql> SELECT IF(1<2,'yes','no');
-> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'


expr1 вычисляется как целое число; это означает, что при исследовании чисел с плавающей точкой или строковых величин в этой функции необходимо использовать операцию сравнения:


mysql> SELECT IF(0.1,1,0);
-> 0
mysql> SELECT IF(0.1<>0,1,0);
-> 1


В первом случае из приведенных выше функция IF(0.1) возвращает 0, так как 0.1 преобразуется в целое число и в результате выполняется функция IF(0). Но это вовсе не то, что должно было бы получиться. Во втором случае исходная величина с плавающей точкой исследуется при помощи оператора сравнения, чтобы определить, является ли она ненулевой, и в качестве аргумента функции используется результат сравнения - целое число. В версии MySQL 3.23 возвращаемый по умолчанию тип функции IF() (это может иметь значение при сохранении его во временной таблице) вычисляется, как показано ниже:


Выражение Возвращаемая величина
expr2 или expr3 возвращает строку строка
expr2 or expr3 возвращает величину с плавающей точкой с плавающей точкой
expr2 or expr3 возвращает целое число целое число



Если expr2 и expr3 являются строками, и обе зависимы от регистра символов, то результат является чувствительным к регистру (начиная с 3.23.51).

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END


CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

В первом варианте возвращается значение result, если value=compare-value. Во втором - результат для первого указанного условия condition, если оно истинно. Если соответствующая величина результата не определена, то возвращается значение result, указанное после оператора ELSE. Если часть ELSE в выражении отсутствует, возвращается NULL:


mysql> SELECT CASE 1 WHEN 1 THEN "one"
WHEN 2 THEN "two" ELSE "more" END;
-> "one"
mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;
-> "true"
mysql> SELECT CASE BINARY "B" WHEN "a" THEN 1 WHEN "b" THEN 2 END;
-> NULL



Тип возвращаемой величины будет такой же (INTEGER, DOUBLE или STRING),
как и у первой возвращаемой величины (выражение после первого оператора THEN).


<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Структура языка

Типы данных столбцов

Функции, используемые в операторах SELECT и WHERE (часть 2)

Обработка данных: SELECT, INSERT, UPDATE, DELETE

Определение данных: CREATE, DROP, ALTER

Основные команды пользовательских программ MySQL

Команды управления транзакциями и блокировками в MySQL

Полнотекстовый поиск в MySQL

Кэш запросов в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь