반응형

SQL 쿼리문을 짤 때, WHERE 1=1 및 1=2를 사용하는 이유는 쿼리문에서 조건문을 걸 때 편리하게 사용하기 위함입니다. 아래의 분류로 좀 더 깊게 봅시다.

 

WHERE 1=1

WHERE 1=1에서 1=1은 TRUE입니다. 그래서, 쿼리문을 짤 때 무조건 WHERE은 TRUE이기 때문에 조건절이 돕니다. 아래의 예시 쿼리를 봅시다.

SELECT *
  FROM TEST
 WHERE 
 <if test="A != null and A != ''">
		AND A = 1
 </if>

 

위의 쿼리에서 A가 null이 아니고, 빈 값이 아니면 A는 1이 됩니다. 즉, A가 null이 아니고, 빈 값이 아니면 정상적으로 쿼리가 작동합니다. 근데, A가 null이거나 A가 빈값이라면 AND A = 1 이 쿼리문은 없어집니다. 그렇게 되면, 아래의 쿼리문처럼 되어 에러가 발생합니다.

SELECT *
  FROM TEST
 WHERE

 

그래서, 사용하는 것이 바로 WHERE 1=1입니다.

WHERE 1=1을 사용하게 되면 위의 쿼리를 다시 실행했을 때, 아래의 쿼리는 이렇게 남습니다.

SELECT *
  FROM TEST
 WHERE 1=1

 

위의 쿼리를 실행하게 되면, 결국엔 테이블 전체 테이터를 SELECT하게 되는 것과 똑같습니다.

 

 

WHERE 1=2

WEHRE 1=2에서 1=2는 false입니다. 그래서, 쿼리문을 1=2로 짜게 되면, 돌지 않습니다.

SELECT *
  FROM TEST
 WHERE 
 <if test="A != null and A != ''">
		AND A = 1
 </if>

 

위의 쿼리문에서 WHERE을 WHERE 1=2로 바꿔봅시다.

SELECT *
  FROM TEST
 WHERE 1=2
 <if test="A != null and A != ''">
		AND A = 1
 </if>

 

그러면, WHERE 절에 의해 아무런 결과를 받아올 수 없습니다.

 

이 WHERE 1=1과 1=2는 적절한 상황에서만 써야 합니다. 무작정 1=1을 쓸 경우에는 입력값을 잘못 입력해도 결과를 리턴하는 경우가 발생하므로, 정확한 로직에서만 사용해야 합니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기