-
[SQL/Oracle] WHERE 1 = 1 사용하는 이유, 사용하지 말아야 하는 이유💻 하나씩 차곡차곡/프로그래머스 (SQL) 2024. 1. 31. 20:51728x90320x100
어떤 선배 개발자는 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
https://katfun.tistory.com/entry/SQL-WHERE-1-1
728x90320x100'💻 하나씩 차곡차곡 > 프로그래머스 (SQL)' 카테고리의 다른 글
[String, Date] 취소되지 않은 진료 예약 조회하기 (Oracle) (0) 2023.06.30 [String, Date] 자동차 대여 기록 별 대여 금액 구하기 (Oracle) (0) 2023.06.29 [String, Date] 대여 기록이 존재하는 자동차 리스트 구하기 (Oracle) (0) 2023.06.28 [String, Date] 조건별로 분류하여 주문상태 출력하기 (Oracle) (0) 2023.06.27 [String, Date] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (Oracle) (0) 2023.06.27