요르딩딩

[TIP] 쿼리작성 팁 (mybatis) 본문

[Web]/[DB & Mybatis]

[TIP] 쿼리작성 팁 (mybatis)

요르딩딩 2021. 3. 14. 17:11
728x90
반응형

1. select insert into

 select 후 insert 보다 > select insert into를 활용하여 디비접근을 최소화하면 실행속도를 높일 수 있다.

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

2. mybatis의<selectkey> 태그

: insert 후 저장된 row 데이터의 auto_increment 키값을 가져와야 할때 

   참고 : yookeun.github.io/java/2014/07/11/mybatis-selectkey/

3. 'EXPLAIN'

  'EXPLAIN' 을 사용하면 쿼리를 실행하기전에 실행계획을 분석하여 출력한다.
   출처: https://denodo1.tistory.com/306 [dBack]

4.<![CDATA[쿼리]]>

   mybatis 부등호 오류날때 대체 : <![CDATA[<]]> or <![CDATA[쿼리]]>

5. mybatis LIKE문 

   like '%'||#{company_text}||'%'

6. <foreach> 태그

   List 를 IN절로 받아서 사용할때 

WHERE
slip_no IN

<foreach collection="slip_no_list" item="listItem" open="(" close=")" separator=",">
#{listItem}
</foreach>

7. 숫자나 날짜를 특정 포맷의 문자로 변환하는 함수

  PostgreSQL : TO_CHAR(숫자/날짜, 포맷)

  PostgreSQL : TO_TIMESTAMP(컬럼명, 'YYYYMMDD') + INTERVAL '1' DAY

  MYSQL         :  DATE_FORMAT(날짜, 포맷)]

 

예시)

더보기

PostgreSQL:  TO_CHAR(컬럼명 ,  'YYYY/MM/DD HH24:MI:SS') 

MYSQL : DATE_FORMAT(컬럼명, '%Y.%m.%d %H:%i')

 

[해당날짜 범위 조회]

AND 컬럼명 <![CDATA[>=]]> TO_TIMESTAMP(변수, 'YYYYMMDD')

AND 컬럼명  <![CDATA[<]]>  TO_TIMESTAMP(변수,   'YYYYMMDD') + INTERVAL '1' DAY

 

AND ts BETWEEN  TIMESTAMP(#{startDate}) and TIMESTAMP(#{endDate}+1)

7-1. 날짜 증가, 감소하는 함수

// MYSQL 기준
DATE_ADD(NOW(), INTERVAL 1 SECOND);
// second, minute, hour, day, month, year
// MYSQL 기준
DATE_SUB(NOW(), INTERVAL 1 SECOND);
// second, minute, hour, day, month, year

결과 : 2017-01-11 12:00:00

8. CASE WHEN THEN ELSE END

CASE 
   WHEN fc.charge_state = '1' THEN fc.pre_discount_total_amount 
   ELSE 0 
   END as alias

9. Inline view (인라인 뷰)

   서브쿼리같은 종류

   procedures에 변수를 넣어두고 같이 사용가능하다.

 

[view]

CREATE OR REPLACE
ALGORITHM = UNDEFINED VIEW `v_table` AS
SELECT
    `s`.`s_no` AS `s_no`,
    `ss`.`shared` AS `sharedby`,
    `ss`.`user_no`  AS `user_no`
FROM
    (`t_sdset` `s`
LEFT JOIN `t_sdset_share` `ss` ON
    (`s`.`s_no` = `ss`.`s_no`
        AND `ss`.`shared` = 'Master'))
WHERE
    `s`.`comp` = `s_param1`()
    AND `s`.`reg_user_no` = `s_param2`()

[procedures]

CREATE DEFINER=`ABCID`@`%` FUNCTION `데이터베이스명`.`s_param1`() RETURNS int(11)
    NO SQL
    DETERMINISTIC
return @s_param1

https://coding-factory.tistory.com/224

10. COALESCE 함수

COALESCE 함수는 나열된 인수의 값을 순차적으로 체크하여 NULL이 아닌 첫 번째 인수를 반환한다.

모든 인수가 NULL인 경우에는 NULL을 반환한다.

11. CDATA

   mybatis에서 부등호 사용할때 이용.

<if test="search!=null and searchto!=null">
and date_format(insert_time, '%Y%m') <![CDATA[>=]]> #{search_from}
and date_format(insert_time, '%Y%m') <![CDATA[<=]]> #{search_to}
</if>

12. Mybatis null 체크, equals 체크

Null 체크 : <if test="type!=null and type!=''"

Equals 체크 : <if test="type.equals('true')">

13. TRUNCATE TABLE

  • 기존에 사용하던 테이블의 모든 로우를 제거하기 위한 명령어이다.
  • DROP TABLE과의 차이점
    • DROP TABLE은 테이블의 존재 자체가 삭제하는 반면 TRUNCATE TABLE은 테이블은 존재하는 레코드만 모두 삭제한다.
728x90
반응형

'[Web] > [DB & Mybatis]' 카테고리의 다른 글

[DB] 쿼리 최적화  (0) 2021.05.28
[DB] 인덱스 장점/단점  (0) 2021.05.21
[BASE] DataBase 강의2 정리  (0) 2021.03.07
[TIP] DB 포괄열  (0) 2020.12.23
[TIP] DB 인덱스  (0) 2020.12.23
Comments