[Question] 11월 28일 들어온 질문


1. 삼항연산자 질문

SQL 질문이 들어왔습니다. 다음과 같은 형식의 쿼리와 js가 섞인 형태였습니다!!

`SELECT * FROM ${TABLE_NAME} ` + 
where ? ' WHERE ' + Object.entries(where).map(it => `${it[0]} = '${it[1]}'`).join(' ') : '';

앞에서 부터 차근차근 알아보겠다.

SELECT * FROM ${TABLE_NAME}은 TABLE_NAME의 모든 칼럼을 가져오겠다는 뜻이다.

그 후에 where ? 로 시작하는 삼항연산자가 등장한다.

삼항 연산자란 (조건부) ? (참일때 실행) : (거짓일때 실행) 과 같은 구조로 이루어진 문법이다.

위의 쿼리를 살펴보면서 이해해 보자!!

where ? ' WHERE ' + Object.entries(where).map(it => `${it[0]} = '${it[1]}'`).join(' ') : '';

현재 where가 조건부 자리에 들어가 있다. 그렇다면 where값의 유무에 따라 다음과 같이 쿼리가 실행될 수 있는 것이다.


1. where == false

`SELECT * FROM ${TABEL_NAME}

where 가 없다면 단순하게 테이블의 모든 값을 불러오는 쿼리를 실행한다.

2. where == true

`SELECT * FROM ${TABEL_NAME} WHERE ` Object.entries(where).map(it => `${it[0]} = '${it[1]}'`).join(' ')

이번꺼가 약간 복잡한데, 예시를 들어 설명해보겠다.

만약 where = {title : “제목”, name : “이동훈” } 으로 설정되어 있다고 가정해보자.

그렇다면 Obejct.entries(where)에 의해 Object가 [[“title”,”제목”],[“name”,”이동훈”]] 와 같은 배열로 변환된다.

그 후에 map()와 join() 메소르들 수행하면서 title = “제목” name = “이동훈” 이라는 String 값을 반환하게 된다.

결과적으로 위와 같은 쿼리는 다음과 같이 해석될 수 있다.

SELECT * FROM TABLE_NAME WHERE title = "제목" name = "이동훈"

끝!