where 에서 and 조건 괄호를 쳐서 or를 넣으면? 0 4 827

by 란주 [SQL Query] [2020.08.11 17:34:04]


1번. where ( 조건 or 조건 ) and 조건

2번. where 조건 or 조건 and 조건

 

1번과 2번은 다른건가요???

by pajama [2020.08.11 18:03:09]

넵.. 다릅니다. 연산 순서를 명시적으로 하려면 괄호를 하는게 좋습니다.

 

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

 


by 란주 [2020.08.11 20:53:23]

답변 감사합니다~!!!!

집에와 테스트 했을때 답변처럼 답이 나옵니다.

죄송하지만 다시 질문을..ㅠㅠ

이해가... 

(a=2 and a=3) // 조건이 a가 2 그리고 3

and, or 조건도 이젠 혼란이..

첫번째 row를 만나면 멈춰서 결과를 보여주는건가요?????

 

select * from tab2 where a=1 or a=2 and a=3; // 이 쿼리 결과는 1,2,3 모두가 출력되는게 아닌가 했습니다.

 

 

 


by pajama [2020.08.11 22:15:32]

제가 예로 든건 결과가 달리 나오는걸 보여드리기위한 극단적인 예라서..일반적으론 저런식으로 쿼리를 하진 않죠.

조건절의 연산자는 우선순위가 있는데 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


by 란주 [2020.08.12 06:30:17]

아 답변 감사합니다 ㅎㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입