본문 바로가기
💻 하나씩 차곡차곡/DB (SQL)

[SQL/Oracle] WHERE 1 = 1 사용하는 이유, 사용하지 말아야 하는 이유

by 뚜루리 2024. 1. 31.
728x90
320x100
어떤 선배 개발자는 WHERE 1 = 1 사용해도 된다고 하고 어떤 개발자는 지양해야 한다고 말한다. 도대체 진실은 뭘까?

 

[WHERE 1 = 1 을 사용하는 이유]

1. 쿼리 짤 때 편하다

  • 여러 and 조건들을 넣었다가 뺐다가 해야 할 경우가 많은데 아예 조건절에 where 1 = 1 을 넣고 아래 and 조건만 주석처리 혹은 추가하면서 작업하면 되니까 쿼리 짤 때 솔직히 편하다.

 

2. 동적 쿼리문을 만들 때 편하다 

  • 동적으로 조건을 가져와 동적 쿼리문을 만들 때 어떤 컬럼이 조건으로 와도 무조건 AND 조건으로 만 붙이면 되니까! 동적 쿼리문을 짤 때도 편함!

 

3. 실행계획에 최적화 됨!

  •  이건 검색해보면서 알게 된건데 대부분의 데이터베이스 서버는 실행 계획을 최적화 할 때, 쿼리의 WHERE 절을 분석하여 인덱스를 사용할지 여부 등을 결정한다고 함. 이 때 WHERE 1=1 을 사용하면 WHERE절이 있음을 알리면서도 실제로 어떤 조건도 만족하지 않음으로 실행 계획이 최적화 된다고 한다.

 

 

[WHERE 1 = 1 사용을 지양하는 이유]

DELECT FROM TABLE
<if test="id != null and id != undefined and id != """>
WHERE ID = #{id}
</if>
  • 이런식으로 DELECT 구문을 동적으로 짠다고 가정했을 때 id값이 Null이라면 테이블을 통째로 삭제하는 격이 되버린다.
  • 이렇게 해서는 안되겠지만 어쨌든 위험성이 커지는 것은 당연함

 

 

그래서?

개인적인 생각으로는 SELECT 문에서는 유용하게 쓸 것 같고

DELECT 문에서는 사용을 하지 않도록 해야 할 것 같음. 

 

 

 


출처- https://alisyabob.tistory.com/495

 

where 1=1 쓰는 이유

where 1=1 쓰는 이유 알아보기 Where 1=1 이란? 이 구문은 기본적으로 아무런 조건 없이 모든 레코드를 선택하는 것과 같은 결과를 반환하지만, 다른 조건절을 추가하기 용이하도록 구문을 사용합니

alisyabob.tistory.com

https://katfun.tistory.com/entry/SQL-WHERE-1-1

 

[SQL] WHERE 1 = 1

업무 중 마주한 내용에 대해 추가적으로 알아보고자 공부하고 작성하였습니다. 이미 작성된 쿼리를 보다 보면 이런 내용을 많이 볼 수 있습니다. select * from TEST_TABLE a where 1 = 1 and a.name is not null a

katfun.tistory.com

 

728x90
320x100