Содержание
- 1 Тестовая БД
- 2 Команда WHERE
- 3 Операторы сравнения в MySQL
- 4 Логические операторы AND, OR, NOT, XOR в MySQL
- 5 Оператор AND
- 6 Оператор OR
- 7 Оператор XOR
- 8 Оператор NOT
- 9 Комбинации логических операторов
Операторы сравнения дают в результате величину 1 (истина, TRUE), 0 (ложь, FALSE) или NULL . Эти функции работают как с числами, так и со строками. Строки при необходимости автоматически преобразуются в числа, а числа — в строки (как в Perl).
Операции сравнения в MySQL выполняются по следующим правилам:
- Если один или оба аргумента — NULL , то и результат сравнения будет NULL . Справедливо для всех операторов кроме .
- Если оба аргумента в операторе сравнения являются строками, то они сравниваются как строки.
- Если оба аргумента — целые числа, то они сравниваются как целые числа.
- Шестнадцатеричные величины, если они не сравниваются с числом, трактуются как строки с двоичными данными.
- Если один из аргументов представляет собой столбец типа TIMESTAMP или DATETIME , а второй аргумент — константа, то константа перед выполнением сравнения преобразуется к типу TIMESTAMP . Это сделано для лучшей совместимости с ODBC.
- Во всех других случаях аргументы сравниваются как действительные числа с плавающей точкой.
По умолчанию сравнение строк производится без учета регистра символов с использованием текущего набора символов (по умолчанию ISO-8859-1 Latin1, который, к тому же, прекрасно подходит для английского языка).
Ниже приведены примеры, иллюстрирующие преобразование строк в числа для операторов сравнения:
= Равно: <> != Не равно: Меньше или равно: Меньше чем: >= Больше или равно: > Больше чем: NULL-безопасное сравнение (равно): IS NULL IS NOT NULL Тест для определения, является величина равной NULL или нет: Для того, чтобы MySQL хорошо работал с другими программами, обеспечивается поддержка следующих дополнительных возможностей для функции IS NULL :
- Можно найти последнюю вставленную строку, используя выражение: Это свойство можно блокировать установкой SQL_AUTO_IS_NULL=0 . See section 5.5.6 Синтаксис команды SET .
- Для данных типа NOT NULL DATE и столбцов DATETIME можно найти особую дату 0000-00-00 , используя выражение: Это необходимо для работы некоторых приложений ODBC (так как ODBC не поддерживает значение даты 0000-00-00 ).
expr BETWEEN min AND max Если величина выражения expr больше или равна заданному значению min и меньше или равна заданному значению max , то функция BETWEEN возвращает 1 , в противном случае — 0 . Это эквивалентно выражению ( min ), в котором все аргументы представлены одним и тем же типом данных. Способ выполнения сравнения определяется первым аргументом ( expr ):
- Если expr представляет собой столбец типа TIMESTAMP , DATE или DATETIME , а величины MIN() и MAX() являются константами, то последние приводятся к тому же формату, что и столбец.
- Если expr является независимым от регистра символов строковым выражением, то производится сравнение строк без учета регистра.
- Если expr является зависимым от регистра символов строковым выражением, то производится сравнение строк с учетом регистра.
- Если expr представляет собой целочисленное выражение, то выполняется сравнение целых чисел.
- Во всех остальных случаях производится сравнение аргументов как действительных чисел с плавающей точкой.
expr NOT BETWEEN min AND max То же справедливо и для функции NOT (expr BETWEEN min AND max) . expr IN (value. ) Возвращает 1 , если выражение expr равно любой величине из списка IN , иначе — 0 . Если все величины — константы, то они оцениваются в соответствии с типом выражения expr и сортируются. Поиск элемента в этом случае производится методом логического поиска. Это означает, что функция IN является очень быстрой, если список значений IN состоит полностью из констант. Если expr является зависимым от регистра строковым выражением, то сравнение строк производится с учетом регистра: expr NOT IN (value. ) То же справедливо и для функции NOT (expr IN (value. )) . ISNULL(expr) Если expr равно NULL , то ISNULL() возвращает 1 , в противном случае — 0 : Обратите внимание: при сравнении величин NULL с использованием оператора = всегда будет возвращаться значение FALSE ! COALESCE(list) Возвращает первый в списке элемент со значением, не равным NULL : INTERVAL(N,N1,N2,N3. ) Возвращает 0 , если N , и 1 , если N , и так далее. Все аргументы трактуются как целые числа. Для корректной работы этой функции необходимо условие N1 . Это обусловлено тем, что используется логический поиск (очень быстрый):
Если зависимая от регистра строка сравнивается с помощью любого стандартного оператора ( =, <> , . но не LIKE ), то конечный пробел игнорируется.
golos81
Новичок
Знак неравно в MySql
Не получается выбрать записи, неравные условию.
Пробовал <>, !=, NOT LIKE. Ни ошибок, ни результата, ничего не выводится.
Подскажите, что не так?
Пишу ‘=’ — работает, пишу неравно с другими полями — работает. А именно с этим полем и неравно — не работает((
Фанат
oncle terrible
if (!mysql_error()) — это ты сам придумал, или кто-то очень умный тебе подсказал?
а знак "не равно" в mysql именно <>
пэтому разбирайся со свими данными.
и, в общем, ищи косяки в своем коде/ситуации.
golos81
Новичок
Автор оригинала: *****
if (!mysql_error()) — это ты сам придумал, или кто-то очень умный тебе подсказал?
а знак "не равно" в mysql именно <>
пэтому разбирайся со свими данными.
и, в общем, ищи косяки в своем коде/ситуации.
Со знаком — подсказали.
Выборка не происходит из-за того, что часть значений Read = NULL. Тогда вопрос: как выбрать значение = NULL. Пишу
В принципе могу сделать default = 0 вместо NULL, тогда это решает мой вопрос. Но правильно ли это будет? Т.е. есть ли какая-то разница между default = 0 и default = NULL?
Фанат
oncle terrible
а зачем ты ищешь строку NULL?
у тебя это поле типа варчар что ли?
golos81
Новичок
Нет — поле типа tinyint(1). Мне надо выбрать все поля, где !=1, то бишь =NULL.
я тебе не прознак писал, а про if (!mysql_error())
Все равно подсказали, а что в этом криминального?
Всегда мучался вопросом, какой правильно тип поля указывать, если у меня в нем будет только два значения: либо 0, либо 1?
Кажется разобрался:
в моем случае надо использовать 0, а не NULL, и это будет правильно, а я думал наоборот.
А по поводу if (!mysql_error()), если можно, в чем здесь проблема?
Фанат
oncle terrible
golos81
Новичок
Фанат
oncle terrible
golos81
Новичок
maxru
МИФИст
Trianon
Новичок
golos81
В SQL-языке троичная логика. Выражения логического типа могут являться истинными, ложными и неопределенными.
Выражение `ready` = 0 сработает лишь в том случае, когда ready определено и равно нулю.
Если хочется учитывать и случай неопределенного поля — нужно задавать это явно
(`ready` IS NULL OR `ready` = 0)
либо
COALESCE( `ready`, 0) = 0
Тестовая БД
Для всех примеров далее будем использовать базу данных книжного магазина — Bookstore.
Выведем все строки которые содержаться в таблице books.
Получим следующие данные.
mysql> SELECT >FROM books;
+—-+—————————+———————+———+———+
| id | title | author | price | amount |
+—-+—————————+———————+———+———+
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 | 20 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 | 7 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 | 8 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 | 3 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 3 |
| 6 | Война и мир | Лев Толстой | 341.00 | 1 |
| 7 | Анна Каренина | Лев Толстой | 346.00 | 0 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 | 10 |
| 10 | Бесы | Фёдор Достоевский | 212.00 | 8 |
+—-+—————————+———————+———+———+
10 rows in set (0.00 sec)
Команда WHERE
Команда WHERE предназначена для создания условий (фильтров).
WHERE используется тогда, когда нужно вывести только те строки, которые соответствуют одному или нескольким условиям.
WHERE похожа на условный оператор if , который используется во многих языках программирования для создания условий.
WHERE применяется только совместно с командами SELECT , UPDATE и DELETE .
Синтаксис команды WHERE
Рассмотрим несколько примеров создания условий.
Выведем все книги, которые написал Лев Толстой.
Выведем все книги, доступное количество которых равно трём.
mysql> SELECT >FROM books WHERE amount=3;
+—-+—————————+———————+———+———+
| id | title | author | price | amount |
+—-+—————————+———————+———+———+
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 | 3 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 3 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 |
+—-+—————————+———————+———+———+
3 rows in set (0.00 sec)
Операторы сравнения в MySQL
Команда WHERE , помимо оператора = , использует также целый набор других операторов сравнения.
Далее представлена таблица операторов сравнения с примерами их использования.
Оператор | Значение |
---|---|
= | Равенство |
<>, != | Неравенство |
> | Больше |
mysql> SELECT >FROM books WHERE price | |
>= | Больше либо равно |
mysql> SELECT >FROM books WHERE price | |
BETWEEN | Между двумя значениями |
LIKE | Соответствует шаблону |
IN | Соответствует набору значений |
Логические операторы AND, OR, NOT, XOR в MySQL
Наравне с языками программирования MySQL имеет свои логические операторы. Операторы AND , OR , NOT , XOR используются для создания нескольких условий (фильтров) вывода и обработки записей таблиц базы данных. Все логические операторы могут использоваться не только с командами SELECT и WHERE , но и с многими другими. Оператор ANDВыводит запись если оба условия принимают истинное значение. Синтаксис оператора ANDmysql> SELECT column1, column2, . , columnN В примере ниже мы выбираем книги, количество которых больше либо равно 10 и их цена ниже 245. Оператор ORВыводит запись если хотя бы одно из условий принимает истинное значение. Синтаксис оператора ORmysql> SELECT column1, column2, . , columnN В примере ниже мы выбираем книги, за авторством Льва Толстого или Антона Чехова. Так как книг Антона Чехова в нашей БД нет, то в выводе получим только книги Льва Толстого. mysql> SELECT id, title, author, price, amount Оператор XORXOR (исключающее ИЛИ), также как OR выводит записи, если хотя бы одно из условий истинно, но не выводит запись если оба условия либо истинны, либо ложны. XOR аналогичен следующей конструкции: (a AND ( NOT b)) OR (( NOT a) AND b). Синтаксис оператора XORmysql> SELECT column1, column2, . , columnN В примере ниже выведем все книги, автором которых будет Михаил Булгаков или цена книги будет больше 241. Однако, если автором книги будет Михаил Булгаков и при этом ее цена будет выше 241, то такая запись не выведется. mysql> SELECT id, title, author, price, amount Оператор NOTС помощью оператора NOT можно вывести все записи, которые не соответствуют условию. Синтаксис оператора NOTmysql> SELECT column1, column2, . , columnN В примере ниже выведем все книги, кроме тех, которых нет в наличии. mysql> SELECT >FROM books WHERE NOT amount=0; Комбинации логических операторовИспользуя круглые скобки, все логические операторы можно комбинировать и получать более сложные и многоуровневые условия. Выведем все записи книг за авторством Ивана Тургенева и Фёдора Достоевсткого с ценой меньше 240, и которые при этом не имеют слова «Акция» в названии. mysql> SELECT id, title, author, price, amount Понравилась статья? Расскажите о ней друзьям! «> Рекомендуем к прочтениюAdblock detector
|