업무를 하며 기존에 작성된 쿼리 문들을 보면,
간혹 WHERE 절 뒤에 '1=1'이라는 녀석이 붙은 것을 볼 수 있었다.
어떤 의미인지, 또 언제 사용하는지 궁금하여 알아보았던 내용을 작성한다.
WHERE 절?
이 글을 찾아온 것 자체가
WHERE 절이 무엇인지 알고 있을 것이라 생각한다.
'어디'라는 WHERE의 의미처럼,
내가 DB로부터 가져오고 싶은 데이터의
'조건'을 걸어주는 부분이다.
가정
이 글의 목적이었던 '1=1'의 의미를 얼른 알아보기 전,
아래와 같은 간단한 쿼리 문이 있다고 가정하자.
SELECT
TOP 100 *
FROM
GYM_USER
WHERE
SQUAT >= '160'
AND BENCHPRESS >= '80'
AND DEADLIFT >= '180'
GYM_USER라는 테이블로부터
상위 100개의 레코드(행)를 조회해 올 것인데
SQUAT이 '160' 이상, BENCHPRESS가 '80' 이상,
DEADLIFT가 '180' 이상인 녀석들만 조회할 것이다.
그렇게 위의 쿼리 문을 신나게 사용하다가,
고객사로부터 아래와 같은 요구를 받게 된다.
"이번 달 동안만, SQUAT이 '160' 이상인 조건은 빼주세요."
그렇다면 아래 두 가지 프로세스를 거쳐야 한다.
1. "SQUAT >= '160'" 주석 처리
2. "AND BENCHPRESS >= '80'" 부분에서 "AND" 삭제
혹은 해당 라인 주석 처리 후, "BENCHPRESS >= '80'" 새로 입력
WHERE 1=1 ?
아주 간단한 예제라 별 거 없지만,
더욱 복잡한 WHERE 절의 쿼리 문과 요구사항이라면
꽤나 귀찮은 단계를 거쳐야 할 것이다.
이럴 때를 대비하여 사용하는 것이 '1=1'이다.
'1=1'은 '1은 항상 1과 같다'라는 의미처럼
언제나 TRUE인 조건을 뜻하기 때문에,
WHERE 절 뒤에 '1=1'만 적용한다면
사실상 조건을 걸지 않은 것과 동일하여 모든 데이터를 조회해온다.
위에서 보았던 쿼리 문에서 '1=1'을 사용하여 수정해보고,
고객사의 요구 사항을 반영해보자.
SELECT
TOP 100 *
FROM
GYM_USER
WHERE 1=1
--AND SQUAT >= '160'
AND BENCHPRESS >= '80'
AND DEADLIFT >= '180'
주석 처리인 '--' 하나만 넣어주면 끝난다, 깔깔.
만약, BENCHPRESS와 DEADLIFT 조건들도 주석 처리를 해주면
"WHERE 1=1"만 남게 되어
GYM_USER 테이블의 상위 100개의 레코드(행)를
아무 조건 없이 모두 불러올 것이다.
아주 사소하지만, 쿼리 문을 작성하거나 수정할 때 사용하면 효율적이다.
끝!
'Study > ETC' 카테고리의 다른 글
[ETC][일상] 기업에서 강조하는 협업, 커뮤니케이션 능력? (0) | 2021.06.28 |
---|---|
[ETC][일상] 개발자 소양의 1순위 - 꼼꼼함 (0) | 2021.06.23 |
[ETC][일상][배포] QA 테스트 및 운영 배포 실수에 대한 고찰 (0) | 2021.04.16 |
[ETC][일상][배포] 인생 첫 배포 후기 (0) | 2021.01.06 |
[ETC][일상][세미나] 2020 우아한 테크 콘서트 후기 (0) | 2020.12.21 |