Mysql уроки, книга (самовчитель) для початківців з нуля, урок 6
Оператори порівняння в 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
mysql> select ".01" <> "0.01:
-> 1 mysql> select .01 <> "0.01"
-> 0 mysql> select "zapp" <> "Zappp"
-> 1
Менше, ніж або рівні (mysql> select 0.1 1
Строго менше, ніж (mysql> select 2 0
Більше, ніж або рівні (> =):
Строго більше, ніж (>):
mysql> select 2> 2;
-> 0
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 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
Повертається 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.)).
Якщо expr дорівнює NULL, ISNULL () повертає 1, інакше це повертає 0:
mysql> select ISNULL (1 + 1);
-> 0
mysql> select ISNULL (1/0);
-> 1
Зверніть увагу, що порівняння значень NULL, що використовують =, завжди дорівнюватиме false!
Повертає Перший не-NULL елемент в списку:
mysql> select COALESCE (NULL, 1);
-> 1
mysql> select COALESCE (NULL, NULL, NULL);
-> NULL
Повертає 0, якщо N 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