CS

[SQL] WHERE 1=1

mark340 2022. 12. 31. 12:50

프리온보딩 백엔드 과제중 팀원이 작성한 코드에서 이해가지 않는 코드를 발견했었다..

지금은 이 코드가 무엇인지 알지만... 또 사용할 일을 대비하여,, 기록한다..

 

const getMeasurementData = async (date1, date2, weight1, weight2) => {
  const getMeasurementData = await myDataSource.query(
    `
    SELECT
      user_id as id, 
      weight,
      date_format(created_at, "%Y-%m-%d %h:%m:%s") as date,
      JSON_ARRAYAGG(JSON_OBJECT("value", measurement_data.data, "name", data_types.name)) as typeData
    FROM measurements
      INNER JOIN measurement_data ON measurements.id = measurement_data.measurement_id
      INNER JOIN data_types ON measurement_data.data_type_id = data_types.id
    WHERE 1=1 AND ((("null" IN (?))AND(created_at=created_at))OR(created_at BETWEEN ? AND ? ))
    OR
    ((("null" IN (?))AND(weight=weight))OR(weight BETWEEN ? AND ? ))
    GROUP BY user_id, weight, created_at
    `,
    [date1, date1, date2, weight1, weight1, weight2],
  );
  return getMeasurementData;
};

 

SQL문으로 DB에서 조회해오는 코드 중 12번째 줄

WHERE 1=1

이 코드는 무엇일까..

 

우선, WHERE는 조회하려는 데이터들의 조건을 거는 문법.

1 = 1은 말그대로 을 의미한다.

해석해보면,,

데이터들을 모두(참) 조회한다.

즉, 1=1이란 조건은 있으나마나 한 조건.

그렇다면 왜 사용할까?

 

WHERE절의 다중조건을 걸어줘야하는 경우 사용한다.

 

뒤에나오는 코드처럼  AND나 OR등 조건을 적용하는 경우 

WHRE 1=1 없이 아래와 같이 코드를 작성하면 오류가 발생된다.

 

WHERE 

USER_ID = '3'  ==> 해당 줄이 비워지면 코드에러남

AND

NAME = "mark"

`
WHERE 
USER_ID = '3'  ==> 해당 줄이 비워지면 코드에러남
AND NAME = "mark"
`

 

WHRE 1=1 을 사용하여 코드를 아래와 같이 사용할 수 있다.

`
WHERE 1=1
AND USER_ID = "3"
AND NAME = "mark"
`