WHERE 1=1 하는 이유
동적으로 조건절을 붙일 수 있다는 점과, 불완전한 SQL문을 방지하고자 쓴다.
아래는 USER 테이블에서 활성화된 여성 고객을 찾고자 하는 쿼리 예제이다.
SELECT * FROM USER WHERE <if test="activeYn != null and activeYn != ''"> activeYn = #{activeYn} </if> AND gender = 'F'
만약 WHERE절에 if 구문을 넣었는데 activeYn 파라미터가 빈 값으로 넘어온다면 어떤 일이 벌어질까? 아마도 다음과 같은 SQL이 만들어질 것이다.
SELECT * FROM USER WHERE
AND gender = 'F'
불완전한 SQL문이 만들어졌다.
이 때문에 사전에 에러를 방지하고자 아래처럼 WHERE 1=1을 하는 이유도 있을 것이다.
SELECT * FROM USER WHERE 1=1 <if test="activeYn != null and activeYn != ''"> AND activeYn = #{activeYn} </if> AND gender = 'F'
참고로, 1=1은 항상 참이기 때문에 쿼리 결과에 영향을 주지 않는다.
또한 1=2 도 사용할 수 있다. 항상 False 이기 때문에 임시적으로 조회가 불가능 하도록 할 때 사용할 수 있다.
반응형
'Database > DB' 카테고리의 다른 글
오라클 LPAD 함수 (0) | 2014.05.09 |
---|---|
oracle Trigger(오라클 트리거) 정의 (0) | 2014.04.10 |
오라클 - 모든 시퀀스 조회 (0) | 2014.03.28 |
Oracle 자동증분 Sequence와 max(seq)+1의 차이 (0) | 2014.03.28 |
oracle to_char 를 이용한 숫자 공백 채우기 99 --> 0099 , FM00000000 의미 (0) | 2014.02.05 |