[DB](16)
-
Partition 이란?
개요 테이블 설계시 쿼리 성능 향상을 위한 방법 중 한가지인 파티션에 대해 공부한 바를 서술함. 환경 DB Tool : DBeaver RDBMS : mySQL 목적 파티션에 대한 기초 설명 목차 1. 파티션이란? 2. 파티션 사용 이유 3. 파티션 컬럼 선정 기준 4. 파티션 형식 종류 1. 파티션이란? 크기가 큰 테이블을 컬럼을 기준으로 여러개로 분할하는 기능입니다. 논리적으로는 하나의 테이블이지만, 실제 사용시에는 (MySQL 서버 입장애서) 컬럼 기준으로 나누어진 풀 에서 기능을 수행하게 됩니다. 2. 파티션 사용 이유 하나의 큰 테이블에서 select 하는 것 보다 나누어진 테이블에서 찾는게 더 빠르기 때문에 사용합니다. 따라서 규모가 작은 테이블에서 파티션 적용은 불필요 합니다. 인덱스의 크기가..
2024.03.26 -
[Connect by]_ 계층형 쿼리 & 재귀 쿼리 응용 ( 이달의 휴일 구하기 )
개요 휴일 정보 테이블과 연계하여 이달( 선택한 달 ) 의 총 일수, 총 휴일 수 , 총 근무일 수 를 구하는 쿼리 작성 OUTPUT Total_cnt : 해당 월의 총 일수 Working_cnt : 해당 월의 근무일 수 ( 평일 ) Holiday_cnt 해당 월의 휴일 사용 Oracle 함수 connect by to_char to_date with as () 휴일 테이블 HOLIDAY 해당 테이블에는 휴일 ('YYYY-MM-DD') 생성일 작성자 3가지의 데이터가 들어가도록 구성 선택 월 2022-11-01 11월에는 평일이 22일 휴일이 8일 총일이 30일이 있습니다. Connect by 를 응용한 계층형 쿼리 SELECT COUNT(*) AS TOTAL_CNT ,SUM(WORK_TOTAL_CNT) ..
2022.11.28 -
[connect_by]_ORACLE_계층 형 함수 사용(메뉴트리)
개요 ORACLE 에서 제공하는 계층형 함수인 connect by 탐구 메뉴 정보 테이블에서 메뉴트리 쿼리 생성해보기 의의 보통 트리형 구조( 메뉴트리 ) 와 같은 데이터에 사용 데이터의 부모, 자식 간의 관계를 통해 depth 구분할 때 유용합니다. 문법 START WITH : 계층 구조를 만들 주체 CONNECT BY : 각 데이터의 연결 관계 설정 PRIOR : CONNECT BY 에 사용하며 지정된 컬럼이 부모- 자식의 관계를 가집니다. ORDER SIBLINGS : 계층형 쿼리에서의 정렬을 수행합니다. 예제 1. 태이블 설계 메뉴정보를 입력할 테이블을 구성합니다. 메뉴를 구별할 PK 인 MENU_ID 메뉴 이름인 MENU_NM 부모의 메뉴 아이디를 저장할 HIGH_MENU_ID 로 3가지 컬럼을..
2022.11.21 -
[Oracle]_날자 , 요일 추출_그룹 핑 후 순번 매기기
개요 테이블에 저장된 날자 정보를 토대로 해당 날자의 저장 횟수 (로그인한 횟수) 접속한 날자의 요일 접속한 날자의 Day 일 을 쿼리를 통해서 추출 사용 함수 해당 날자데이터를 요일로 추출 to_char(createDate,'day') 요일 해당 'YYYY-MM-DD' 형식 데이터를 DD 만 추출 substr(trunc(createDate,'dd'),7,2) dd 해당 'YYYY-MM-DD' 데이터를 날자의 '일' 데이터로 추출 EXTRACT(day from createDate) 그룹핑 이후 얼마나 중복되는지 순번을 매겨주는 함수 row_number() over (partition by createDate order by createDate) 예제 유저접속기록 테이블 원래는 'YYYY-MM-DD' 만 ..
2022.10.25 -
[Mybatis]_MyBatis의 동적 태그 정리
개요 Mybatis 나 IBatis 를 사용하여 쿼리문을 작성할 때 특정 조건, 혹은 파라미터의 존재 유무에 따라 ex)_ 페이징 처리 비슷한 쿼리를 여러개 작성해야 합니다. 이렇게 비슷한 쿼리를 여러개 생성하는 것 보다. MyBatis 에서 제공하는 동적쿼리를 사용하면 한 쿼리 안에 여러가지의 경우의 수를 가진 쿼리를 작성 할 수 있습니다. - MyBatis의 동적 태그에는 if, choose, where, trim, foreach가 있습니다. 1. IF 문 : 단일 조건문 기본 문법 ] //실행할 쿼리 예시] AND user_Name = #{userName} 전달 파라미터 : userName 비교문 : userName 이 null이 아니거나 "" (공백) 이 아닐경우 쿼리 실행 쿼리 내용 : 이전에 ..
2022.10.19 -
[MyBatis]_동적 쿼리_foreach문_feat(List<Map>데이터)
사용환경] DB : oracle FrameWork : Spring, mybatis 목표] 클라이언트에서 한가지 key 와 value 로 이루어진 json 데이터 뿐 만 아니라 파라미터에 List 데이터가 담긴 경우 여러 API 를 발송하는 것이 아니라 한번에 수정하도록 구현 사용함수&방법] 화면] 문법] MyBatis foreach collection : 파라미터로 전달받은 인자, list 혹은 Array 형태만 가능 item : 전달받은 인자를 대신할 값 open : 구문이 시작될때 삽입할 문자열 close : 구문이 종료될때 삽입할 문자열 separator : 반복 되는 사이에 출력할 문자열 index : 반복되는 구문 번호이다. 0부터 순서대로 증가 +@ iBatis property : 파라미터 p..
2022.10.19 -
[Oracle]_NVL 사용 (DATE,Number) 비교
사용환경] DB : oracle FrameWork : mybatis,ibatis 문제 발생] NULL 처리 시도 방법] CASE WHEN 을 사용 NVL 함수를 사용 NVL 을 사용했을 때 문제가 되었던 점을 정리해 보았습니다. 날자, Number 을 비교했을 때 문제 발생 NVL 의 경우 NVL(target,result) 로 2가지 인자를 받습니다. 만약 target 이 DATE 나 INT 일 경우 동일한 자료형으로 바꿔줄 수 있습니다. 이를 치환할 target 자료형에 맞춰야 합니다. 제가 한 부분은 null일 경우 '-' (하이픈) 처리를 해야 했고, 값은 varchar 이를 group 하여 오름차순 정렬을 해야 했습니다. 해결방법 null은 null 대로 반환이 필요하고 0의 값은 별도로 존재하며..
2022.08.29 -
[WITH RECURSIVE]_재귀 쿼리 사용법
사용 이유 WITH RECURSIVE 문을 사용해서 메모리 상에 가상의 테이블을 저장 할수 있다. 테이블을 생성, 데이터 삽입 등을 하지 않아도 가상 테이블을 생성하여 이용할 수 있다. 예제 WITH RECURSIVE TGT_HOUR AS ( SELECT CONVERT( CONCAT(#{nowDate}, '090000') , DATETIME) as STD_DT , #{nowDate} as STD , '09' as `hour` , '00' as `minute` , 1 as ORDER_SEQ UNION ALL SELECT DATE_ADD(STD_DT, INTERVAL 10 MINUTE) , DATE_FORMAT(DATE_ADD(STD_DT, INTERVAL 10 MINUTE), '%Y%m%d') , DATE..
2022.06.29 -
[MySQL]_Mybatis 의 choose, when , otherwise 개념,사용
목적 : DB Framework 인 Mybatis 를 사용하면서 자주 쓰이는 choose 문과 if문의 차이점과 개념 숙지 환경 DB : MariaDB FrameWork : Mybatis 개념 통상적인 else if 와 같은 사용법입니다. 태그 의 경우 조건이 true 곳에서 멈추고 해당 쿼리만 실행 후 choose 문을 빠져나옵니다. 모든 을 통과하여도 true가 나오지 않을 경우 마지막의 쿼리를 실행합니다. 는 생략 할 수 있습니다. 예제 select * from table1 where bno = #{num} AND (OPEN_DT LIKE CONCAT('%',#{opendate},'%')) (PUT_DT LIKE CONCAT('%',#{putdate},'%')) (OPEN_DT LIKE CONCAT..
2022.06.09 -
[MySQL]_서브쿼리 개념 (feat. select , from , where)
서브쿼리 : 하나의 메인 쿼리 문장 안에 포함된 다른 쿼리 - 메인쿼리를 실행하기 전에 모든 서브쿼리가 한번 실행됨 서브쿼리는 조회 쿼리의 기본 형태인 select from where 의 3가지 위치에서 사용가능합니다 또한 위치에 따라서 종류가 나뉘어 집니다. 1] select - 스칼라 서브쿼리 select 절 안에 쿼리가 있는 경우 스칼라 서브쿼리라고 부릅니다 스칼라 서브쿼리는 반드시 단일 행 혹은 단일 값으로 이루어져야 합니다. 서브쿼리로 실행된 값을 메인쿼리에서 집어오기 때문입니다. 스칼라 서브쿼리를 복잡하게 작성할 경우 ( JOIN 과 같은 ) 심각한 기능저하가 일어날 수 있어 사용을 자제합니다. 2] from - 인라인 뷰 서브쿼리 from 절 안에 쿼리가 있는 경우이며, 해당 쿼리는 반드시 ..
2022.05.31 -
MYSQL_UNION , UNION ALL 차이점, 설명
TABLE 1] TABLE 2] TABLE 3] 이런 3가지 테이블이 있다고 가정합니다. UNION : 쿼리의 결과를 합칩니다. 단 중복된 쿼리가 있으면 한가지만 출력합니다. select bno , date from 테이블 1번 where 조건문 기입 union select bno , date from 테이블 2번 where 조건문 기입 union select bno , date from 테이블 3번 where 조건문 기입 단 중복을 검사하는데 시간이 걸려 중복을 제거하지 않는 UNION ALL 보다는 속도가 느립니다. 결과 : UNION ALL : UNION 과 같으나, 중복이 있어도 제거하지 않고 전부 합해서 보여줍니다. select bno , date from 테이블 1번 where 조건문 기입 u..
2022.05.31 -
[Oracle]SelectKey_사용하기 (feat. SEQUENCE)
구조 : Oracle DB framework: Mybatis 목적 : SEQUENCE 로 증가되는 PK 를 가진 테이블의 INSERT 후 증가된 PK 가져오기 이유 : 글 작성 table 과 fileupload table 은 별도로 구성되어 있고, 파일 업로드시 게시글 table 의 pk 를 JOIN 하기 위함 조건: JOIN 할 태이블은 SEQUENCE 설정이 되어 있어야 함 시퀀스는 다음글 참고 : https://yn971106.tistory.com/107 [Oracle]_SEQUENCE (feat. 테이블 pk) 구조 : Oracle DB framework: Mybatis 목적 : PK 이면서 값이 하나씩 또는 원하는 숫자만큼 증가해야하는 컬럼을 가진 테이블생성 ex) 테이블 고유 번호 기존 : 테..
2022.05.24