본문 바로가기
서브쿼리 ORM으로 DB를 시작해 로우쿼리를 본격적으로 작성하게 되면서 서브쿼리를 왜 쓰지? 라는 생각을 했었다가 서브쿼리를 사용하는 경우가 대단히 많아져 마침 책에서도 다루고 있어 정리하게 되었다. 서브쿼리서브쿼리가 무엇일까? 정의를 알기 전에 이러한 형태의 쿼리를 보았는지 확인해보자. SELECT *FROM EMPWHERE SAL > ( SELECT SAL FROM EMP WHERE ENAME = 'JONES')이런 형태를 보았다면 서브쿼리를 한 번쯤은 본 적이 있는 것이고, 그렇지 않다면 지금부터 알아가면 된다. 위 쿼리에서 말하고자 하는 것은 EMP 테이블 전체를 조회하는데 EMP 테이블의 JONES 연봉보다 높은 사람들을 조회한다 라는 의미이다. 이처럼 서브쿼리는 SQL 문을 실행하는데 있어서 필요.. 2024. 7. 31.
콜백함수 및 비동기, 동기 처리 시간이 있을 때마다 모던 자바스크립트를 공부하고 더 나아가 타입스크립트를 진행하여 이를 사용하고 있는 nest.js 프레임워크까지 직접 경험해보려고 한다. 실무에서 이미 자바스크립트를 사용하고는 있는데 정확히 자바스크립트가 어떻게 구동되고 있는지 학습이 필요해보였다. 콜백함수콜백함수는 다른 함수의 인자로 전달되어 그 함수 내부에서 호출되는 함수이다. 솔직히 말하면 이해를 못했다. 비동기, 동기 처리에 대한 부분을 어느 정도 이해해야 전달이 쉬운데 언어의 시작을 동기 처리로 대부분 진행되는 것을 하다보니 아무리 해도 이해가 안갔었다. 그래서 무작정 코드로 부딪혔다. function taskA(callback) { setTimeout(() => { console.log('Task A com.. 2024. 7. 15.
객체의 value 값을 다른 객체의 key 값으로 호출 상황은 다음과 같다. 프론트엔드 측에서 백엔드로부터 받은 데이터를 엑셀 처리해주는 모듈을 이행해주고 있어 이를 확인하던 중, 모듈의 리턴값에 객체로써 key-value로 전달하고 이를 엑셀 처리해주고 있다. 하지만 i18n을 적용하면서 또 다른 JSON 객체에서 값을 빼와 이를 언어별로 이름을 구분해주어야 하는 상황이 생겼다. 즉, { '한글' : '한글' } 이라고 리턴하여 엑셀로 변환했을 때 무조건 시트에는 한글이 나오던 상황을 영어인 상황에서는 'hangeul' 이라고 보여주어야 되는 상황이다. 어찌보면 하드코딩된 영역을 동적으로 처리해주어야 하는 상황이기에 나는 언어별로 내려주는 값을 JSON을 통해 미리 받아 선언해주고 리턴값에 바인딩해주는 걸 고려했다. JSON을 통해서 key-value 형태.. 2024. 7. 10.
JSON_EXTRACT, [- >>] mysql 내에 배열 값을 저장했는데 배열 값 내의 특정 값을 산출해서 결과값을 뽑아내야 하는 상황이 생겼다. 물론 실질적으로 mysql은 배열을 저장할 수 있도록 도와주지는 않는다. 하지만 배열을 문자열처럼 저장해서 파싱해 사용하는 식으로 사용하는 경우가 있기에 기록을 남겨두려고 한다. 방법은 위의 함수나 연산자를 사용해서 인덱스 값을 뽑을 수 있다. CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, data JSON);INSERT INTO example_table (data) VALUES('[{"select": 1, "value": "a"}, {"select": 2, "value": "b"}, {"select": 3, "val.. 2024. 6. 26.
CTE 사내에서 대시보드 관련 집계 쿼리를 짜면서 단순한 테이블 조회가 아닌 필요한 데이터를 뽑아 그 내에서 또 추출하는 작업을 진행했다. 이를 진행하면서 서브쿼리가 아닌 CTE를 활용했는데 이를 정리하려고 한다. 정의CTE, Common Table Expression의 줄임말이다. 파생 테이블이라는 개념으로 생각하면 된다. CTE를 비교하려면 서브쿼리보다는 데이터베이스의 뷰와 비교를 해볼 수 있는데 뷰는 사전에 정의해서 권한을 부여하고 작성하는 반면에 CTE는 1회성으로 권한이 필요하지 않고 쿼리문이 끝날 때까지 지속되는 일회성 테이블이다. 활용 예시사내에서 작성했던 코드말고 내가 자주했던 게임의 데이터를 서버장으로부터 받았던 적이 있어 이를 가지고 비교해보겠다. WITH map_players_counts A.. 2024. 6. 19.
JOIN 정의JOIN은 여러 테이블을 하나처럼 사용하는 방법을 말한다. 기존에 집합을 사용했을 때랑 차이가 있다면, 집합의 경우에는 값을 세로로 연결한 것이고 조인은 값을 가로로 연결한 것이라고 생각하면 된다. 외래키 값을 이용해 테이블 간의 상관관계를 맺고 이를 각각 가로로 붙여주어서 여러 테이블을 하나의 테이블처럼 사용할 수 있는 것이다. 예제를 통한 조회EMP 테이블과 DEPT 테이블을 일단 조회해보자. SELECT *FROM EMP, DEPTORDER BY EMPNO;이렇게 조회를 했을 때는 엄청난 로우 데이터들이 나오는 것을 확인할 수 있다. 현재 위의 쿼리를 사용해 조회해보면 56개의 데이터들이 나온다. 왜 56개의 데이터들이 나올까? EMP 테이블에서 SMITH라는 데이터는 DEPTNO가 20으로 R.. 2024. 6. 2.