[SQL] WHERE 1=1이란?

Kim Hyen Su·2024년 11월 8일

SQL

목록 보기
14/15
post-thumbnail

개요

일괄/다중 삭제 로직을 한번의 쿼리로 작성하기 위해서 여러 블로그 글들을 참고하던 중 다음과 같은 쿼리를 발견했다.

		DELETE FROM FREEBOARD
		WHERE 1=1
			AND NUM IN
				<foreach collection="list" index="index" item="num" open="(" close=")" separator=",">
					#{num}
				</foreach>

MyBatis 에서 쿼리 매핑을 위해서 사용하는 xml 파일 내 정의한 쿼리인데, WHERE 1=1 이라는 쿼리가 눈에 띈다.

해당 쿼리는 어떤 역할을 하며, 왜 사용하는 것일까?

WHERE 1=1의 역할

이는 기능적으로 어떤 역할을 한다기 보다는 쿼리 작성자를 위한 조건이라고 생각하면 편하다. 의미 자체는 항상 참(true)을 반환하는 조건이다. 이를 사용하는 이유는 크게 2가지 정도이다.

  1. WHERE 조건의 작성 편리함

  2. 가독성

위처럼 WHERE 조건에 1=1을 추가해놓으면, AND와 함께 추가 조건을 주석처리하거나 새로 추가하는 것이 편리하다. 특히, 여러개의 조건이 붙는 쿼리 또는 동적쿼리를 사용하는 경우, 복잡한 WHRER 절에서 AND + 조건을 한줄로 관리할 수 있다. 예를 들어 보겠다.

WHERE 1=1 X

SELECT *
FROM TABLE
// WHERE name = 1 
AND age =10 // 오류
AND height =170;

위처럼 name = 1 이라는 조건을 주석처리하고 싶은 경우에, 아래의 조건의 AND를 WHRER로 변경해줘야 하는 번거로운 작업을 수행해줘야 한다.

WHERE 1=1

그 다음으로 WHERE 1=1 구문을 추가한 예시를 보겠다.

SELECT *
FROM TABLE
WHERE 1=1
//AND name = 1
AND age = 10
AND height 170

위의 경우 , 동일하게 name = 1 조건을 주석처리 하더라도 예외가 발생하지 않는다.

이처럼 여러 조건의 경우 작성 및 주석처리 제거에 용이하기 때문에 편리함으로 인해 사용하게 된다.

주의사항

이를 무의미 하게 남용하게 될 경우, 자칫 잘못하여 잘못된 데이터를 수정 또는 삭제할 가능성이 있으며, 무의미한 조건이므로 필자와 같이 처음 보는 사람들은 이를 왜 사용했는지 의미가 명확하지 않게 느껴진다. 하지만, 이를 잘 활용하면 위와 같이 사용에 유의미해질 때가 있으므로, 필요 시에 사용해보도록 하자.

profile
백엔드 서버 엔지니어

0개의 댓글