새소식

MySQL & Maria

AND / OR 논리 연산자 우선 순위

  • -
반응형

음.. 이번에는 쿼리를 짤때 자주 사용되는 AND / OR 논리 연산에 대한 우선 순위에 대해 작성해보려고 합니다.

많은 분들이 잘 알고 계시겠지만 이 우선순위에 의해서 원하는 결과 값이 아닌 다른 값이 나올수 있다는 점!!!  

 

 

 

AND / OR ?

  • AND: 두 조건이 모두 참인 레코드를 검색
  • OR : 두 조건중 하나라도 참인 레코드

 

예제

쿼리를 통해 AND / OR 연산자의 우선 순위를 보겠습니다.

1. 2페이지에 해당하는 데이터중 Title에 'Test'가 포함된 데이터

select * from (
select 
  rownum rn, bro, title, wirter
from board
  where title like '%Test%' and rownum < =20
) A
where rn > 10;

 

2. title 이나 content 중에 'Test'라는 문자열이 있는 게시글

select
* 
from
( select 
  rownum rn, bro, title, wirter
from board
 where title like '%Test%' or content like '%Test%' and rownum <= 20
)
where rn > 10;
  • 위의 구문을 보면 구문자체는 문제가 없지만 실제로 동작시켜보면 10개의 데이터가 아닌 많은 양이 데이터가 출력된다.
    • 이유는 AND / OR의 연산자 우선순위에따라 실제로 실행될떄 아래와 같은 조건으로 실행이된다.
    • “ROWNUM이 20보다 작거나 같으면서(AND) + Content가 ‘Test’이거나(OR) + Title이 ‘Test’라는 문자열이 있는 게시글
where title like '%Test%' or content like '%Test%' and rownum <= 20

##연산자 우선순위에 따라 아래처럼 구문이 실행된다.
where rownum <=20 and title like '%Test%' or content like '%Test%'

 

 

해결책

괄호( ) 를 사용하여 우선순이를 명확하게 해주자.

where ( title like '%Test%' or content like '%Test%' )
and rownum <= 20

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.