DB(11)
-
오라클 -> MySQL 쿼리 변환하기
오라클 쿼리 : WITH DIV_SCOPE AS ( SELECT #{agoYr} || '1201' AS FRST_DT, TO_CHAR(LAST_DAY(TO_DATE(#{basYr} || '02', 'YYYYMM)), 'YYYYMMDD') AS LAST_DT, 1 AS DIV_NO FROM DUAL UNION SELECT #{basYr} || '0301' AS FRST_DT, TO_CHAR(LAST_DAY(TO_DATE(#{basYr} || '05', 'YYYYMM)), 'YYYYMMDD') AS LAST_DT, 2 AS DIV_NO FROM DUAL UNION SELECT #{basYr} || '0601' AS FRST_DT, TO_CHAR(LAST_DAY(TO_DATE(#{basYr} || '08', ..
2023.12.02 -
현재 일자가 속한 분기 구하는 쿼리
2022년 2023년 12월 1 월 2 월 3 월 4 월 5 월 6 월 7 월 8 월 9 월 10 월 11 월 1분기 2분기 3분기 4분기 지난해 12월을 시작으로 3개월씩 분기를 나누었을 때 특정일자를 기준으로 현재 출력할 수 있는 분기수가 몇 개인지 구하려면 어떻게 해야 할까? 가령 현재 일자가 2023년 11월 29일일 때의 분기를 구하면 4분기가 아니고 3분기가 되어야 한다. 왜냐하면 11월 말일이 30일인데 아직 말일이 안지났기 때문에 분기별 데이터가 계속 쌓일 수 있어서 바로 전 분기인 3분기가 되어야 한다. /* 날짜 판별을 위한 분기 기준 데이터 생성 - agoYr : 지난 해 - basYr : 기준년도 */ SELECT #{agoYr} || '1201' AS FRST_DT, TO_CHAR..
2023.12.02 -
SQLite3 - DB 생성하기
쿼리연습하는데 기왕이면 Oracle 이면 좋겠으나 Docker 로 배포되는 오라클도 있고 MySQL, Maria DB, ... 다양한 오픈소스 DB 가 존재하는데 설치하기도 귀찮고 SQLite 가 최소한의 기능을 지원하니까 만사가 귀찮은 사람에겐 SQLite 를 쓰는 것도 대안이 되리라! 이야~ 단순하다. $ sqlite3 데이터베이스명 DBeaver 에서 조인연습하려고 구한 Chinook.db 가 있지만 Employee 테이블명이 겹쳐서 새 DB는 어떻게 만들어야 하는지 궁금했는데 커맨드 한 개로 바로 해결된다. 쉬워서 좋네. 나중에 안드로이드 앱 개발할 때 써먹으면 되니까. 참고한 사이트 : SQLite In 5 Minutes Or Less Below is a simple TCL program tha..
2023.11.21 -
[SQL] - ORDER BY
ORDER BY 로 쿼리결과를 정렬하려고 할 때, 컬럼값에 따라 우선순위를 정해야 할 경우, CASE 문을 쓰면 된다. SELECT SUBJECT, ... FROM ( SELECT '컴공' AS SUBJECT, ... union SELECT '소프트웨어공' AS SUBJECT, ... union SELECT '전자공' AS SUBJECT, ... ) A ORDER BY CASE WHEN A.SUBJECT = '컴공' THEN 1 WHEN A.SUBJECT = '소프트웨어공' THEN 2 WHEN A.SUBJECT = '전자공' THEN 3 END ASC
2023.11.20 -
MYBATIS - INSERT list
SQL 원형 : INSERT INTO STUDENT (STD_SEQ, STD_NAME, DEPT) VALUES (001, '영호', '수학과'), (002, '영수', '물리학과'), (003, '변식', '컴퓨터공학과'), . . . INSERT 의 경우, VALUES 뒤에 따라오는 (속성값) 레코드가 연속으로 나열하는 방식이기 때문에 VALUES 뒤에 를 넣는다. separator (구분자)는 ',' 임을 명심하기 바란다. INSERT INTO STUDENT_TBL (ID, NAME) VALUES (#{element.id}, #{element.name})
2023.11.03 -
MYBATIS - UPDATE list
SQL 원형: UPDATE PET_TBL SET NAME = '둘리' WHERE ID = 'Pet001'; UPDATE PET_TBL SET NAME = '도너' WHERE ID = 'Pet002'; UPDATE PET_TBL SET NAME = '또치' WHERE ID = 'Pet003'; . . . INSERT 와 달리 UPDATE 문을 여러번 실행하는 방식이기 때문에 쿼리 사이에 반복을 처리하는 foreach 가 올 수 없다. 대신 쿼리문을 로 감싸며 그것의 바깥을 BEGIN, END 로 한 번 더 감싸서 처리해야 한다. 구분자는 마침표를 의미하는 ';' (세미콜론) 으로 지정해야 한다. BEGIN UPDATE TEST_TBL SET NAME = #{element.name} WHERE ID = #{..
2023.10.30