WHERE 1=1이 뭐임?
WHERE는 조회하려는 데이터들의 조건을 거는 문법이다.
‘1=1’은 말그대로 참을 의미한다.
SELECT *
FROM CUSTOMERS
WHERE 참
AND CUSTOMER_ID = '3'
SQL
복사
해석하면 CUSTOM_ID 가 ‘3’인 데이터들을 모두(참) 조회한다 라는 뜻이다.
왜 WHERE 1=1 절을 쓸까?
•
쿼리 디버깅 시, 주석처리가 편하다.
SELECT *
FROM CUSTOMERS
WHERE CUSTOMER_ID = '3'
AND COMPANY_NAME LIKE 'L%';
SQL
복사
COMPANY_NAME LIKE 'L%' 인 데이터가 잘 조회되는지 확인하기 위해
CUSTOMER_ID = ‘3’인 조건행을 잠시 주석처리하고 싶다면
SELECT *
FROM CUSTOMERS
WHERE --CUSTOMER_ID = '3'
--AND COMPANY_NAME LIKE 'L%';
SQL
복사
다음과 같이 처리할 수 있다. 하지만 이럴 경우 주석을 두 번이나 달아야 한다.
SELECT *
FROM CUSTOMERS
WHERE 1=1
-- AND CUSTOMER_ID = '3'
AND COMPANY_NAME LIKE 'L%';
SQL
복사
WHERE 1=1 을 사용하면 비교적 쉽게 주석처리를 하면서 디버깅할 수 있다.
•
동적쿼리에서 특정상황마다 WHERE절을 다르게 작성해줘야 할 때 편리하다.
동적쿼리란?
우선, 특정상황마다 WHERE 절을 다르게 작성해야 할 때란
흔히 조회조건이 있는 조회기능을 떠올리면 편하다.
예를 들어, 사용자가 CUSTOMER_ID를 조회조건으로 선택한 후 조회를 할 때는 CUSTOMER_ID로
COMPANY_NAME을 조회조건으로 선택한 경우 COMPANY_ID로
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 + "'"
}
Java
복사
첫 조건에 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 + "'"
}
Java
복사


