SQL WHERE условие, почему результат с использованием «a! = 7 и b! = 836» не равен «! (A = 7 и b = 836)»?

0

Существует три записи:

  • a = 7, b = 836
  • a = 8, b = 836
  • a = 7, b = 839

Я хочу получить результат без (a = 7 и b = 836).

результат пуст при выполнении sql, например select * from test where a!=7 and b!=836, но он получил правильный результат, используя select * from test where a<>7 or b<>836.

У меня есть два вопроса:

  1. Почему 'a! = 7 и b! = 836' не равно! (A = 7 и b = 836)?
  2. Какая разница между этими двумя условиями? 'a! = 7 и b! = 836' и 'a <> 7 или b <> 836'
  • 0
    Разница между И / ИЛИ. Это разные логические операторы.
  • 0
    В! = Условие используйте оператор AND, а в <> оператор OR. пожалуйста, исправьте сначала
Теги:
where

2 ответа

2
Лучший ответ

Разница в ваших логических операторов, and и or в сочетании с круглыми скобками.

select * from test where a!=7 and b!=836

Этот запрос будет выбирать, где BOTH ваших операторов вернет true, то есть оба не 7, а b не 836. Это ничего не вернет, нет записи, где оба они являются истинными.

select * from test where !(a=7 and b=836)

Когда вы кладете круглые скобки вокруг вашего and вы двигаетесь логика вокруг. Это утверждение означает, что все записи НЕ соответствуют любой записи, где оба равно 7 и b равно 836. Таким образом, внутри скобки она соответствует первой записи, а затем инвертирует этот выбор.

select * from test where a<>7 or b<>836

<> - это то же самое, что и != (Ссылка на документацию). Но в этом запросе вы используете or. Таким образом, он будет соответствовать любой записи, где a не 7, и любая запись, которая не является 836. Таким образом, будет соответствовать как вторая, так и третья строки.

Для получения дополнительных материалов ознакомьтесь с Законами Де Моргана. !(a and b) равно !a or !b. Больше объяснений здесь и здесь.

-2

На самом деле! = И <> точно то же самое. См. Документацию.

<> является стандартом sql != нестандартным.

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_not-equal

Ещё вопросы

Сообщество Overcoder
Наверх
Меню