1. Главная страница » Компьютеры » Mysql where не равно

Mysql where не равно

Автор: | 16.12.2019

Операторы сравнения дают в результате величину 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 . Это обусловлено тем, что используется логический поиск (очень быстрый):

Читайте также:  Philips 23phh4109 60 прошивка

Если зависимая от регистра строка сравнивается с помощью любого стандартного оператора ( =, <> , . но не 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)

Читайте также:  Djccnfyjdktybt lfyys c aktirb

Команда 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 , но и с многими другими.

Читайте также:  Final cut pro что это

Оператор AND

Выводит запись если оба условия принимают истинное значение.

Синтаксис оператора AND

mysql> SELECT column1, column2, . , columnN
-> FROM table_name
-> WHERE condition1 AND condition2 AND conditionN;

В примере ниже мы выбираем книги, количество которых больше либо равно 10 и их цена ниже 245.

Оператор OR

Выводит запись если хотя бы одно из условий принимает истинное значение.

Синтаксис оператора OR

mysql> SELECT column1, column2, . , columnN
-> FROM table_name
-> WHERE condition1 OR condition2 OR conditionN;

В примере ниже мы выбираем книги, за авторством Льва Толстого или Антона Чехова. Так как книг Антона Чехова в нашей БД нет, то в выводе получим только книги Льва Толстого.

mysql> SELECT id, title, author, price, amount
-> FROM books
-> WHERE author = ‘Лев Толстой’ OR author = ‘Антон Чехов’;
+—-+—————————+———————+———+———+
| id | title | author | price | amount |
+—-+—————————+———————+———+———+
| 6 | Война и мир | Лев Толстой | 341.00 | 1 |
| 7 | Анна Каренина | Лев Толстой | 346.00 | 0 |
+—-+—————————+———————+———+———+
2 rows in set (0.00 sec)

Оператор XOR

XOR (исключающее ИЛИ), также как OR выводит записи, если хотя бы одно из условий истинно, но не выводит запись если оба условия либо истинны, либо ложны.

XOR аналогичен следующей конструкции: (a AND ( NOT b)) OR (( NOT a) AND b).

Синтаксис оператора XOR

mysql> SELECT column1, column2, . , columnN
-> FROM table_name
-> WHERE condition1 XOR condition2 XOR conditionN;

В примере ниже выведем все книги, автором которых будет Михаил Булгаков или цена книги будет больше 241. Однако, если автором книги будет Михаил Булгаков и при этом ее цена будет выше 241, то такая запись не выведется.

mysql> SELECT id, title, author, price, amount
-> FROM books
-> WHERE author = ‘Михаил Булгаков’ XOR price > 241;
+—-+—————————+———————+———+———+
| id | title | author | price | amount |
+—-+—————————+———————+———+———+
| 2 | Нос (Акция) | Николай Гоголь | 255.20 | 7 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 3 |
| 6 | Война и мир | Лев Толстой | 341.00 | 1 |
| 7 | Анна Каренина | Лев Толстой | 346.00 | 0 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 | 10 |
+—-+—————————+———————+———+———+
6 rows in set (0.01 sec)

Оператор NOT

С помощью оператора NOT можно вывести все записи, которые не соответствуют условию.

Синтаксис оператора NOT

mysql> SELECT column1, column2, . , columnN
-> FROM table_name
-> WHERE NOT condition;

В примере ниже выведем все книги, кроме тех, которых нет в наличии.

mysql> SELECT >FROM books WHERE NOT amount=0;
+—-+————————— +———————+———+———+
| 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 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 | 10 |
| 10 | Бесы | Фёдор Достоевский | 212.00 | 8 |
+—-+————————— +———————+———+———+
9 rows in set (0.00 sec)

Комбинации логических операторов

Используя круглые скобки, все логические операторы можно комбинировать и получать более сложные и многоуровневые условия.

Выведем все записи книг за авторством Ивана Тургенева и Фёдора Достоевсткого с ценой меньше 240, и которые при этом не имеют слова «Акция» в названии.

mysql> SELECT id, title, author, price, amount
-> FROM books
-> WHERE (price > 241 AND (author=’Иван Тургенев’ OR author=’Фёдор Достоевский’))
-> AND title NOT LIKE ‘%Акция%’;
+—-+—————————+———————+———+———+
| id | title | author | price | amount |
+—-+—————————+———————+———+———+
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 3 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 |
+—-+—————————+———————+———+———+
2 rows in set (0.00 sec)

Понравилась статья? Расскажите о ней друзьям!

«>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code

Copyright 2018
...
Adblock detector