SQL

SQL 연산자 우선 순위

Slow Motion~ 2023. 3. 17. 15:19
728x90

맨처음 실행은 이랬고 순서대로 OR 과 AND를 할 거라고 생각했으나 type이 0이외에도 출력

SELECT * FROM TB_FAULT tf WHERE device = 3 OR device = 4 AND `type` = 0 ORDER BY write_time DESC

연산자의 순서는

  1. ()괄호
  2. NOT
  3. AND
  4. OR

따라서 이 문법은 실제로 

(device = 3) OR ((device = 4) AND (`type` = 0))

이렇게 실행되고 있었던 것이다.

device 3은 그냥 다 조회했다.

 

해결은 간단하게 괄호를 써서 해결

SELECT * FROM TB_FAULT tf WHERE (device = 3 OR device = 4) AND `type` = 0 ORDER BY write_time DESC