프리온보딩 백엔드 과제중 팀원이 작성한 코드에서 이해가지 않는 코드를 발견했었다..
지금은 이 코드가 무엇인지 알지만... 또 사용할 일을 대비하여,, 기록한다..
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"
`
'CS' 카테고리의 다른 글
[OS] 메모리 계층 구조 쉽게 이해하기 (0) | 2023.01.04 |
---|---|
Object Oriented Programming 객체 지향 프로그래밍 (0) | 2023.01.02 |
파싱(Parsing)이란 무엇인가 (0) | 2022.12.30 |
[Network] 인터넷 네트워크 구조 (IP,TCP,UDP,DNS,PORT) (0) | 2022.12.30 |
[OAuth] OAuth 2.0 이란 (0) | 2022.10.14 |