[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 = "이동훈"
끝!