При обработке запросов SELECT, вы обязательно почувствуете благодарность всем операторам сравнения MySQL, которые позволяют сравнивать левые и правые части выражений. Результатом такой операции сравнения всегда является 1 (истина), 0 (ложь) или NULL (невозможно определить).
В табл. 6.2 дается перечень различных операторов сравнения, имеющихся в MySQL.
Операторы сравнения
Эти операторы сравнения могут использоваться для сравнения как чисел, так и строк. Числа сравниваются как вещественные значения, а строки - без учета регистра (если, конечно, не используется ключевое слово BINARY, но об этом подробнее во врезке "Тонкости двоичного мира"). Кроме того, как упоминалось в предыдущем разделе, MySQL обладает интеллектом, позволяющим производить автоматическое преобразование чисел в строки (и наоборот) по принципу "если надо". (Подробнее об этом можно узнать во врезке "Искусственный интеллект"). Рассмотрим следующий пример, в котором проиллюстрировано, как в различных ситуациях MySQL обрабатывает числа из строк.
Операторы сравнения
Искусственный интеллект
Внутренне MySQL представляет узлы дерева синтаксического разбора как объект класса, производного от класса Item. Класс Item имеет три метода оценки: longlong Item::val_int(),double Item::val() и string* Item:: val_str(String* buf). Первый из них оценивает узел выражения в контексте 64-битовых целых чисел, второй - в контексте вещественных чисел, а третий - в контексте символических строк. Родительский узел управляет контекстом оценки непосредственных потомков, вызывая соответствующий метод Item при вычислении подвыражений, и MySQL пытается выработать наиболее интуитивное и совместимое со стандартами решение в каждом конкретном случае выбора контекста.
Операторы сравнения
 126 Часть II. Применение
Альтернативой оператору = является оператор <>, который используется для проверки неравенства двух частей выражения, возвращая значение "истина", если они являются таковыми, и "ложь" - если не являются.
Операторы сравнения
Тонкости двоичного мира
Так как по умолчанию MySQL сравнивает строки без учета регистра букв, выражение 'a' = 'A' в результате даст значение "истина". При необходимости осуществлять сравнение с учетом регистра, MySQL позволяет добавить ключевое слово BINARY, которое сообщает MySQL, что следующую за ним строчку необходимо обрабатывать двоичным образом. В реальном мире это означает, что при обработке операций сравнения, MySQL будет учитывать регистр. Это и демонстрирует следующий пример:
Операторы сравнения
 Ключевое слово BINARY в MySQL является одной из производных форм функции CAST(). Функция CAST() детально описывается в следующей главе. Операторы <=, >= и > используются для проверки того, является ли левая сторона выражения, соответственно, меньше или равна, больше или равна или больше по сравнению с правой стороной выражения. 
Операторы сравнения
Фактор места
Необходимо заметить, что при выполнении операций сравнения, MySQL не учитывает завершающие пробелы, символы табуляции и перевода строки. Поэтому выражения
'zebra' = 'ZEBRA'
и
'zebra' = 'ZEBRA '
являются равносильными и оба возвращают значение "истина". Однако ведущие пробелы, символы табуляции и переводы строк, учитываются при сравнении, т.е. проверка выражений 'zebra' = 'ZEBRA' и
'zebra' = ' ZEBRA' не даст одинаковых результатов.
Оператор BETWEEN предназначен для проверки принадлежности значения (или выражения) указанному диапазону (см. листинг 6.23).
Операторы сравнения
Операторы сравнения
Операторы сравнения
И тут возникает очень важный вопрос: как можно проверить наличие или отсутствие реальных значений NULL в выражении? Ответ дают операторы IS NULL и IS NOT NULL, которые и были разработаны для выполнения операций сравнения с учетом значений NULL.
Рассмотрим следующий пример, демонстрирующий использование оператора IS NULL для проверки наличия пустых значений.
Операторы сравнения
Из этого примера видно, что только значения NULL возвращают значение "истина" из проверки IS NULL. Обратите внимание на последнее выражение из этого примера: несмотря на то, что выражение 1=NULL содержит целое число 1, все выражение оценивается как NULL (из-за того, что внутри его имеется значение NULL), поэтому тест IS NULL возвращает положительный результат.
Но справедливо и обратное (имеется в виду оператор IS NOT NULL).
Операторы сравнения
Еще можно воспользоваться специальным оператором <=>, который в руководстве по MySQL называется "оператором равенства, обрабатывающим NULL-значения". Это значит, что в противоположность обычному поведению, MySQL возвратит "истинный" или "ложный" результат при проведении операции сравнения даже тогда, когда выражения, задействованные в операции, будут содержать значение NULL. Следующий пример наглядно иллюстрирует этот факт.
Операторы сравнения
Операторы сравнения
Кстати, в последующих главах вы увидите, насколько эти возможности используются при обработке MySQL столбцов, содержащих значения NULL.
Операторы сравнения
Как видите, в отличие от многих языков программирования, MySQL делает четкое различие между пустой строкой и значением NULL. И это не просто случайность, а составная часть стандарта MySQL. Но будьте внимательны - это обычно вызывает беспокойство у новичков!
При групповом поиске данных рекомендуется использовать возможности оператора LIKE. Он позволяет производить поиск записей, соответствующих всей или какой-то составляющей части строки, благодаря специальным групповым символам в выражении.
Рассмотрим соответствующий пример.
Операторы сравнения
В этом случае групповой символ "%" сообщает MySQL о том, что нужны строки, содержащие ноль или больше включений подстроки "ll". Например, "hello", "hell", "ball" и т. д. Для поиска строго одного символа вместо последовательности символов используется групповой символ "_", как в следующем примере.
Операторы сравнения