티스토리 뷰

DB/Mysql

SQL AND/OR 우선 순위

H!GHR 2018. 11. 14. 21:51
1
SELECT * FROM EMP  WHERE DEPTNO<>20 AND JOB<>'SALESMAN';
cs

DEPTNO(부서번호)가 20이 아니고 JOB(직무)가 세일즈맨이 아닌 사람들을 SELECT 하면 다음과 같다.




1
SELECT * FROM EMP  WHERE DEPTNO = 10 OR DEPTNO = 30 AND JOB = 'MANAGER' OR JOB = 'CLERK';
cs

DEPTNO(부서번호)가 10 또는 30이고 JOB(직무)가 매니저 또는 직원인 사람들을 SELECT 하면 다음과 같다.



원래 의도는 위 쿼리에서 JOB이 PRESIDENT인 사람을 제외하고 결과가 같도록 하는거였는데 다르다!

DEPT가 10 또는 30인 사람만 나와야하는데 20인 사람이 툭 튀어나온 것이다.

왜 그럴까 ?


AND는 OR에 비해서 우선 순위가 높기 때문이다!

AND를 먼저 처리하고 OR를 이후에 처리하기 때문에, 두번째 쿼리를 다시보면

1
SELECT * FROM EMP  WHERE DEPTNO = 10 OR (DEPTNO = 30 AND JOB = 'MANAGER') OR JOB = 'CLERK';
cs

이렇게 된거랑 같은 것이다.

DEPT는 10 또는 DEPT가 30이고 매니저인 사람 또는 직원인 사람이 나오게 된 것!

(그래서 DEPT가 20인 CLERK의 결과가 나옴)

댓글