본문 바로가기
728x90
반응형

SQL10

[MySQL] Query 성능 확인 1. Explain : 쿼리 명령문을 어떻게 수행할 것인지 실행 계획에 대한 정보 2. Profiling : 현재 세션 과정 동안 실행 문에 대한 리소스 정보 3. Optimizer_trace : 실제 실행 시 바람직한 비용 기반으로 계획을 선택한 과정 정보 ​ ​Explain 쿼리 실행 플랜 정보를 optimizer에서 가져와서 출력. EXPLAIN SELECT Query; ​ ID 실행계획의 순서. 이 순서대로 select 문이 실행. select_type select 문의 유형 SIMPLE : 단순 select문 PRIMARY : 첫번째 쿼리 DERIVED : select문으로 추출된 테이블 ( from 절에서의 서브쿼리 또는 inline view) SUBQUERY : sub query 중 첫번째 .. 2020. 11. 1.
[MySQL] 특정 필드 ,(콤마)로 나열하여 조회하기 : GROUP_CONCAT SER_ROLE 테이블이 아래와 같은 데이터를 가지고있을때, emp_id role type moonsiri ROLE_USER A moonsiri ROLE_USER B moonsiri ROLE_USER C ... ... ... ​ 다음과 같은 결과 값을 구하려고 합니다. emp_id role type moonsiri ROLE_USER A, B, C ​ 이러한 경우, GROUP_CONCAT을 사용하면 위와같은 결과 값을 구할 수 있습니다. SELECT emp_id, role, GROUP_CONCAT(type) FROM user_role WHERE emp_id = 'moonsiri' AND role = 'ROLE_USER'; 2020. 11. 1.
[MySQL] insert ... on duplicate key update (upsert) INSERT ... ON DUPLICATE KEY UPDATE Statement ​insert 하려는 값이 존재하면 update 하는 쿼리입니다. ​ user라는 테이블에 insert를 하려고합니다. INSESRT INTO user (id, name, age) VALUES ('user1', '홍길동', 20); 그런데 이미 'user1'이 존재한다면 에러가 날것입니다. 여기서 'user1'에 새 값으로 수정 하고싶으면, update를 해야합니다. UPDATE user SET name='홍길동', age=20 WHERE id='user1'; 개발을 하다보면 데이터가 존재하는지 체크하고 없으면 insert하고 있으면 update하는 기능을 구현할때가 종종 있을것입니다. 그럴때 사용하는 것이 INSERT .... 2020. 11. 1.
[MySQL] 월별 Partition Table 생성, 수정, 삭제 MySQL에서 지원되는 Partition은 Range, List, Hash, Key의 4가지인데, 여기선 Range를 사용하겠습니다. ​ 통계 데이터나 로그 데이터처럼 데이터량이 많을 경우, 파티션 키 위주로 조회를 자주 하거나 대량의 과거 데이터를 삭제 시 사용합니다. ​ ​ 로그 테이블을 하나 생성하겠습니다. reg_ymdt 컬럼을 사용할 예정인데, Partition RANGE로 사용하려면 해당 테이블에 PK가 지정되어있지 않거나 PK가 지정되어있다면 reg_ymdt 컬럼이 PK로 등록되어야 합니다. 그리고 파티션 range key로 사용할 컬럼은 int 값 이어야 하는데, 날짜로 분리하기 위해 timestamp를 사용하겠습니다. CREATE TABLE audit_log ( id BIGINT(20) .. 2020. 10. 31.
[MyBatis] foreach로 배열 파라미터 삽입 IN으로 항목을 SELECT 해야 할 때 사용하는 방법입니다. SELECT * FROM table where id IN (${list_data}) 위 같은 실수를 하지 않길 바랍니다. 아래 코드처럼 foreach문을 사용하면 보안을 유지할 수 있습니다. SELECT * FROM table where id IN #{map} String[] array; SELECT * FROM table where id IN #{map[i]} ArrayList list = new ArrayList(); SELECT * FROM table id = #{map} 만약, ### Error querying database. Cause: java.sql.SQLException: ORA-56900: 바인드 변수는 피벗|피벗 해제 작업.. 2020. 10. 31.
[springboot] sql script(schema.sql, data.sql) 실행 시 한글 깨짐 로컬에서 실행할땐 한글깨짐 문제가 없었는데, 서버에서 빌드 배포 후 실행을 해보니 db에서 값을 가져오는 글자만 한글이 깨져있었습니다. src └ main └ resource └ application.yml └ data.sql └ schema.sql 처음엔 http encoding 문제인가 하여 확인해봤는데, 이미 적용되어 있었습니다. *.jsp application.yml #springboot 1.5.x spring: http: encoding: charset: UTF-8 enabled: true force: true #springboot 2.1.x server: servlet: encoding: charset: UTF-8 다시 확인해보니 http encoding 문제가 아니라 data.sql로 ins.. 2020. 10. 14.
[mybatis] insert/update 쿼리 실행 후 결과값 가져오기 (useGeneratedKeys, keyProperty, selectKey) insert/update 등을 실행하고서 결과를 확인해야 하는 상황이 생깁니다. 다음은 insert 되는 Auto Increment 값(mysql 등)이나 sequence 값(oracle 등)을 조회하는 방법입니다. useGeneratedKeys, keyProperty 옵션 사용하는 데이터베이스가 Mysql과 같이 자동생성 키를 지원한다면 useGeneratedKeys, keyProperty 옵션을 통해 insert 된 데이터의 key 값을 리턴 받을 수 있습니다. useGeneratedKeys : (insert, update에만 적용) 자동생성 키를 받을때 true로 설정한다. (default: false) keyProperty : 리턴 될 key property 설정. 여러개를 사용한다면 ,(콤마)를.. 2020. 10. 9.
[oracle] OVER (PARTION BY) ; 조건별 누계 (분석함수) 집계함수는 여러행 또는 테이블 전체 행으로부터 그룹별로 집계하여 결과를 반환(그룹별 1개의 행을 반환)하고, 분석함수는 집계 결과를 각 행마다보여줍니다. (+ 오라클 8.1.6 부터 분석함수 지원) SELECT ANALYTIC_FUNTION (arguments) OVER ( [ PARTITION BY 컬럼] [ ORDER BY 컬럼 ] [ WINDOWING 절 (Rows | Range Between) ] ) FROM TABLE_NAME ANALYTIC_FUNCTION : 분석함수명(입력인자) OVER : 분석함수임을 나타내는 키워드. PARTITION BY : 계산 대상 그룹을 정한다. ORDER BY : 대상 그룹에 대한 정렬을 수행한다. WINDOWING 절 : 분석함수의 계산 대상 범위를 지정한다... 2020. 10. 9.
[oracle] ROLLUP, CUBE, GROUPING SETS (집계함수) 집계함수는 여러행 또는 테이블 전체 행으로부터 그룹별로 집계하여 결과를 반환(그룹별 1개의 행을 반환)하고, 분석함수는 집계 결과를 각 행마다 보여줍니다. 1. ROLLUP() 그룹의 소계와 총계를 구한다. (순서가 중요하다. 제일 앞에 놓인 것에 대해서 소계를 구하게 된다.) GROUP BY ROLLUP(A, B) = GROUP BY A, B UNION ALL GROUP BY B UNION ALL 모든 집합 그룹 결과 2. CUBE() 각 그룹의 모든 경우의 수에 대한 소계와 총계를 구한다. GROUP BY CUBE(A, B) = GROUP BY A, B UNION ALL GROUP BY A UNION ALL GROUP BY B UNION ALL 모든 집합 그룹 결과 3. GROUPING SETS() .. 2020. 10. 8.
[mybatis] $ 와 # 의 차이 SQL SELECT * FROM test WHERE id = 'test' # ex) # 값으로 지정할때 많이쓰인다. SELECT * FROM test WHERE id = #{id} $ ex) $ 는 값으로 지정할때 '' (홑따옴표)를 써야한다. 쿼리문작성시 문자열 입력부분에는 가급적 사용되지 않는다. SELECT * FROM test WHERE id = ${id} 차이점 결론 : '(홑따옴표) 붙느냐 안붙느냐 의 차이 2020. 10. 8.
728x90
반응형