[SQL] 1=1

SONGB·2023년 8월 1일
0

SQL

목록 보기
12/13

비니 왔덩영
오늘도 SQL 쿼리문을 씹고 뜯고 맛보는 중 (즐기지는 못함)



1=1

1=1 당연하지 않은가?
그래서 참을 가르키는 듯...

내가 보는 쿼리들에서

SELECT COL1
	,COL2
    ,COL3
FROM TABLE1
WHERE 1=1
AND ID=#ID#

이렇게 생겨먹은 구조를 굉장히 보았다.
솔직히 1=1이 참 조건을 추가해준 것이기 때문에
ID가 부합하는 모든 데이터의 COL1, COL2, COL3을 결과로 준다.
그럼 안 적는 것과 결국은 같다는 것인데 왜 적는지 궁금했다.
하지만 나는 게으르고 호기심보다는 귀찮음이 먼저기에 그냥 썼나봄 하면서 지나갔다가 이제서야 슬쩍 정리를 해본다.




사용 이유🖱

1.주석처리가 편해진다.

SELECT COL1
	,COL2
    ,COL3
    ,COL4
FROM TABLE1
WHERE --COL1=#ID#
--AND 
COL2=#NAME#
AND COL3=#AGE#
;

위는 1=1을 하지 않을 경우 주석 처리이다

SELECT COL1
	,COL2
    ,COL3
    ,COL4
FROM TABLE1
WHERE 1=1
--AND COL1=#ID#
AND COL2=#NAME#
AND COL3=#AGE#
;

위는 1=1을 사용할 때의 주석처리이다

누가 봐도 밑에 쿼리문이 깔끔하다는 걸 알 수 있다.


2.동적쿼리에 용이하다.

<select id="select">
    SELECT
        COL1
		,COL2
    	,COL3
    	,COL4
    FROM TABLE
    WHERE 1=1
    <if test="ID != null and ID= ''">
        AND COL1 = #{ID}
        AND COL2 = #{NAME}
        AND COL3 = #{AGE}
    </if>
</select>




주의점🧨

✔ NULL CHECK

UPDATEDELETENULL체크를 하지 않고 1=1을 넣은 채로 진행하게 된다면?

<update id="update">
    UPDATE TABLE
    SET COL2 = #{NAME}
    , COL3 = #{AGE}
    WHERE 1=1
    <if test="ID != null">
        AND COL1 = #{ID}
    </if>
</update>

위에 업데이트 문에서 만약 ID가 NULL이면 어떻게 될까?

    UPDATE TABLE
    SET COL2 = #{NAME}
    , COL3 = #{AGE}

이 쿼리문을 진행하게 될 것이다.
이러면 모든 인스턴스에 대해서 UPDATE가 일어나는 참사가 벌어지고 만다.

사람은 기계가 아니고 실수할 수 있기 때문에 UPDATE, DELETE에서는 1=1과 같은 참을 넣는 것을 지양해야 한다.

profile
⚽⚾데굴데굴 굴러가는 내 맘대로 벨로그🏀🏐

0개의 댓글