WHERE 1=1 조건이 붙는이유?

박건태·2023년 10월 26일
0

WHERE 1=1은 참을 의미

  • 말그대로 WHERE 1=1은 조건문에서 항상 참을 의미합니다.

왜 사용하나요?

  • 쿼리의 조건을 동적으로 변경한다거나, SQL 작성시 조건을 주석처리하며 질의문을 변경할 수 있기 때문에 사용합니다.

ex)
SELECT *
FROM user
WHERE name = 'kim'
AND phone = '01012345678'

위와 같이 조건이 2개인 질의문이 있을때 AND절의 phone번호가 01012345678이 맞는지 우선적으로 확인하고 싶다면 name='kim' 조건을 주석처리해야 하는데

ex)
SELECT *
FROM user
// WHERE name = 'kim'
AND phone = '01012345678'

이처럼 주석된 부분을 제외하고 보면 쿼리가 제대로 만들어지지 않습니다.

그러면 AND 부분까지 주석처리하고 WHERE을 추가해주어야하는데 SQL문이 조금만 더 복잡해지고 길어진다면 굉장히 귀찮아집니다.

그래서 WHERE 1=1 조건을 넣어주면서 이 부분을 해결해줍니다.

ex)
SELECT *
FROM user
WHERE 1=1
AND name = 'kim'
AND phone = '01012345678'

이렇게 쿼리를 작성하면 AND name = 'kim'을 바로 주석처리 해버려도 정상적으로 쿼리가 작동하기 때문에 편리해 집니다.

MyBatis에서는 어떻게 사용할까?

ex)
SELECT *
FROM user
< where >
< if test="phone != null and phone = ' ' " >
AND phone = '01012345678'
</ if>
< if test="name != null and name != ''">
AND name = 'kim'
</ if>

MyBatis에서는 where 태그를 이용하여 처리할 수 있습니다. 위와 같이 질의 조건에 따라 동적쿼리의 생성여부가 결정되는데 조건태그 if를 where 태그로 감싸서 생성을 한다면 MyBatis에서 자동으로 질의 조건에 따라 WHERE를 생성하거나 생략합니다. 즉, WHERE 1=1과 같은 처리를 하게 됩니다.

주의 사항

  • 쿼리의 조건을 동적으로 변경하여 질의를 좀 더 효율적으로 할 수 있지만, 반대로 지양해야 할 요소도 분명히 존재합니다. SELECT문 이외에 데이터를 수정 및 삭제하는 쿼리에는 사용을 지양하는 것이 좋습니다. UPDATE, DELETE문에 WHERE 1=1을 사용했을 경우 조건이 없기 때문에 데이터가 변경 또는 삭제될 우려가 있기 때문입니다.

출처 : https://ssd0908.tistory.com/entry/MYSQL-WHERE-11-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD%EC%9C%BC%EB%A1%9C%EB%8A%94

0개의 댓글