회사에 입사하고 쿼리를 사용하면서
종종 보지만, 잘 이해가 가지 않는 구문이 생겼어요.
WHERE 1=1
바로 요놈!
오늘 공부해보도록 할게요.
Chapter 1. WHERE 1=1이 뭐야??
우선, WHERE는 조회하려는 데이터들의 조건을 거는 문법이에요.
1 = 1은 말그대로 참을 의미해요.
그럼 위 쿼리를 아래와 같이 바꿀 수 있죠.
해석해보면,
CUSTOMERID가 '3'인 데이터들을 모두(참) 조회한다.
즉, 1=1이란 조건은 있으나마나 한 조건이라는 의미죠.
Chapter2. 그렇다면 왜 WHERE 1=1절을 쓸까?
① 쿼리 디버깅 시, 주석처리가 편하다.
아래와 같은 쿼리가 있다고 하죠.
저는 COMPANYNAME LIKE 'L%'인 데이터가 잘 조회되는지 확인하기 위해
CUSTOMERID = '3'인 조건행을 잠시 주석처리하고 싶어요.
그럼 아래와 같이 처리하겠죠.
흠.. 저는 주석을 두번이나 달아야해서 좀 귀찮네요.
여기서 WHERE 1=1을 사용하면 비교적 쉽게 주석처리하면서 디버깅을 할 수 있어요.
② 동적쿼리에서 특정상황마다 WHERE절을 다르게 작성해줘야 할때 편리하다.
여기서 잠깐! 동적쿼리가 뭔지 궁금하면 아래 더보기 참고하쟈.
동적쿼리란?
동적쿼리는 조건에 따라서 결과값이 달라지는 쿼리를 의미합니다.
대표적으로, 파라미터를 받아서 조건을 거는 경우가 있습니다.
위 쿼리는 @CUSTOMER, @COMPANAYNAME의 값에 따라서 SELECT하는 결과값이 달라집니다.
이렇게 SELECT되는 값이 고정되어있지 않고, 바뀔수 있는 쿼리를 동(動)적쿼리라고 합니다.
CF. 정적쿼리
동적쿼리와는 반대로 결과값이 고정된 쿼리를 의미합니다.
SELECT * FROM CUSTOMER WHERE CUSTOMERID = '3'
위 쿼리는 실행할 때 마다 동일한 결과값을 내겠죠.
이런 쿼리를 정적쿼리라고 합니다.
우선, 특정상황마다 WHERE절을 다르게 작성해야 할때란
흔히 조회조건이 있는 조회기능을 떠올리면 편합니다.
예를 들어,
사용자가 CUSTOMERID를 조회조건으로 선택한 후 조회를 할 때는 CUSTOMERID로
COMPANYNAME을 조회조건으로 선택한 경우에는 COMPANYID로
WHERE절의 조건을 걸어줘야하는 경우이죠.
JAVA를 사용해서 소스를 만들어보면 아래와 같습니다.
query1 = "SELECT * FROM CUSTOMER "
if(!cusotmerID.equals("") {
query2 = "WHERE CUSTOMERID = '" + customerID + "'"
}
if(!companyName.equals("") {
if(!customerId.equals("") {
query3 = "AND"
} else {
query3 = "WHERE"
}
query4 = "COMPANAYNAME = '" + companayname + "'"
}
첫 조건에 WHERE가 붙어야하기 때문에 소스가 복잡해졌습니다.
지금은 조건이 2개밖에 없지만
3개, 4개로 늘어나면 더 복잡해질거에요.
이때, WHERE 1=1을 사용하면 단순한 소스로 수정할 수 있습니다.
query1 = "SELECT * FROM CUSTOMER WHERE 1=1 "
if(!cusotmerID.equals("") {
query2 = "AND CUSTOMERID = '" + customerID + "'"
}
if(!companyName.equals("") {
query2 = "AND COMPANYNAME = '" + companyName + "'"
}
'MSSQL' 카테고리의 다른 글
[쿼리 튜닝] Where 조건 좌측(?)에 함수를 사용하면 인덱스가 깨져요!! (0) | 2021.03.31 |
---|---|
MSSQL count, group by - 가격이 여러개 존재하는 품목을 찾자! (1) | 2020.06.08 |