프리온보딩 백엔드 과제중 팀원이 작성한 코드에서 이해가지 않는 코드를 발견했었다..
지금은 이 코드가 무엇인지 알지만... 또 사용할 일을 대비하여,, 기록한다..
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 |