При обработке запросов 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" и т. д. Для поиска строго одного символа вместо последовательности символов используется групповой символ "_", как в следующем примере.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Операторы сравнения
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Операторы MySQL | Все о MySQL. Операторы сравнения. Продолжение. |