AND
имеет более высокий приоритет оператора, чем OR
. Таким образом, при отсутствии скобок AND
оцениваются вместе, а затем OR
.
Думайте о приоритете оператора как о том, насколько липкими будут условия, если не использовать круглые скобки. Итак, с этим:
Chanel = 'Internet' AND Username = 'InternetUser' AND mop = 3 OR mop = 4`
Это слипается:
Chanel = 'Internet' AND Username = 'InternetUser' AND mop = 3
Так что OR mop = 4
идет сам по себе:
Chanel = 'Internet' AND Username = 'InternetUser' AND mop = 3
OR
mop = 4
Вышеуказанное оценивается следующим образом, если выражено в явных скобках:
(Chanel = 'Internet' AND Username = 'InternetUser' AND mop = 3)
OR
mop = 4
Но это приведет к неверному результату, также с условием без скобок. Поэтому вам нужно поставить круглые скобки в нужных местах, чтобы исправить ваше состояние:
Chanel = 'Internet' AND Username = 'InternetUser' AND (mop = 3 OR mop = 4)
В SQL есть сокращение для OR
, когда вы хотите сравнить поле со многими значениями. Это оператор IN
, он не только полезен, когда у вас есть много значений для сравнения с полем, он также полезен, когда вы хотите минимизировать использование скобок. Поэтому вместо OR
используйте IN
:
Chanel = 'Internet' AND Username = 'InternetUser' AND mop IN (3,4)
AND
имеет более высокий приоритет, чем OR
, а затем IN
имеет более высокий приоритет, чем AND
, поэтому вышеприведенное не оценивается как:
(Chanel = 'Internet' AND Username = 'InternetUser' AND mop) IN (3,4)
Вместо этого сначала оценивается IN
, а затем AND
. Таким образом, он оценивается следующим образом, когда явно написано в скобках:
Chanel = 'Internet' AND Username = 'InternetUser' AND (mop IN (3,4))
Поскольку IN
имеет более высокий приоритет, чем AND
, скобка вокруг mop IN (3,4)
может быть безопасно удалена:
Chanel = 'Internet' AND Username = 'InternetUser' AND mop IN (3,4)