넵.. 다릅니다. 연산 순서를 명시적으로 하려면 괄호를 하는게 좋습니다.
SQL> create table tab2 (a int); Table created. SQL> insert into tab2 values (1); 1 row created. SQL> insert into tab2 values (2); 1 row created. SQL> insert into tab2 values (3); 1 row created. SQL> select * from tab2 where a=1 or a=2 and a=3; A ---------- 1 SQL> select * from tab2 where a=1 or (a=2 and a=3 ); A ---------- 1 SQL> select * from tab2 where (a=1 or a=2) and a=3; no rows selected
제가 예로 든건 결과가 달리 나오는걸 보여드리기위한 극단적인 예라서..일반적으론 저런식으로 쿼리를 하진 않죠.
조건절의 연산자는 우선순위가 있는데 AND가 OR보다 우선됩니다.
https://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions001.htm#SQLRF52103
그래서 원글의 2번. where 조건 or 조건 and 조건은 조건 or (조건 and 조건) 과 같습니다.
a=2 and a=3 은 a란 필드가 동시?에 2와 3이란 값이 될수 없으므로 FALSE, 남은 a=1 or 조건은 TRUE or FALSE 가 되므로 TRUE인 집합(a=1)만 표시되는 것입니다. 설명이 조잡한데..; 아래 링크의 표를 참고하세요.
https://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions004.htm#SQLRF52116