보통사람

[SQL] 1=1 구문, 1=0 구문을사용하는 이유 본문

정리

[SQL] 1=1 구문, 1=0 구문을사용하는 이유

pej4303 2019. 7. 30. 23:27

개발을 하다 보면 1=1 구문을 흔하게 볼 수 있는데 오늘 1=0 구문을 처음 보게 되어 해당 내용을 정리해보고자 합니다.

 

1.  1=1 구문

 

보통 WHERE 1=1 구문을 사용하는 이유는 2가지입니다.

  • 이유 없이 그냥

  • 동적 쿼리 사용 시

사람마다 개발하는 스타일이 다르기 때문에 딱히 어떤 것이 옳다고 할 수는 없으며  2번의 경우에 사용하는 것이 맞으나 1번의 경우에도 사용한다는 것을 알고만 있자. 또한 WHERE 1=1 구문과 비슷한 것으로 WHERE NULL IS NULL 구문이 있습니다.

SELECT * FROM TEMP
WHERE 1=1
 <if test="조건문">
    AND 조건문
 </if>
 
-- 예시1) 조건문이 없는 경우
SELECT * FROM TEMP
WHERE 1=1

-- 예시2) 조건문이 있는는 경우
SELECT * FROM TEMP
WHERE 1=1
  AND 조건문

 

2. 1=0 구문

 

WHERE 1=0 구문은 OR절과 함께 사용합니다. 그러나 아래의 쿼리문에서 좀 다르게 사용됩니다.

A테이블과 B테이블에서 데이터를 가져오는 데 B테이블에는 AGE컬럼이 없다고 가정해보죠.

물론 B테이블에서 AGE컬럼에 관한 if문을 안 하는 게 최선의 방법이지만 이렇게 처리할 수 도 있다는 것만 알아두면 됩니다.

-- #{age} 값이 있으면 테이블B에 대한 쿼리문은 실행되지 않음

SELECT NAME FROM A
	WHERE 1=1
      <if test="name != null and name != ''">
          AND NAME LIKE #{name} || '%'
      </if>

      <if test="age != null and age != ''">
          AND AGE = #{age}
      </if>
UNION ALL
	SELECT NAME FROM B
    WHERE 1=1
      <if test="name != null and name != ''">
          AND NAME LIKE #{name} || '%'
      </if>

      <if test="age != null and age != ''">
          AND 1=0	-- 테이블 B는 AGE 컬럼이 없음
      </if>