개인 공부

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

MySQL & Maria

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

Yunhyeong.lee 2023. 12. 8. 20:58
반응형

음.. 이번에는 쿼리를 짤때 자주 사용되는 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

 

반응형

'MySQL & Maria' 카테고리의 다른 글

log_slow_extra  (0) 2025.03.09
[ DML ] Rollback 시간 산정  (0) 2025.01.03
[ MySQL ] MyISAM to InnoDB  (14) 2023.05.26
[ MySQL ] CPU 부하 Query 모니터링  (10) 2023.03.10
[ MySQL ] innodb_onlin_alter_log_max_size 중요성  (15) 2023.02.27