728x90

 

데이터가 있으면 수정, 없을 경우 삽입을 하는 쿼리를 짜려고 할 때,

- Oracle에서는  Merge into라는 기능이 존재

- MySQL에서는 On duplicate key를 쓰면 됨

 

 

--Oracle
MERGE INTO table_name alias
            USING (table | view | subquery) alias                -- 하나의 테이블만 이용한다면 DUAL 활용
                 ON (join condition)                                     -- WHERE절에 조건 쓰듯이
            WHEN MATCHED THEN                                   -- ON 이하의 조건에 해당하는 데이터가 있는 경우 
                     UPDATE SET col1 = val1[, ...]                -- UPDATE 실행
            WHEN NOT MATCHED THEN                           -- ON 이하의 조건에 해당하는 데이터가 없는 경우
                     INSERT (column lists) VALUES (values);  -- INSERT 실행

--MySQL

INSERT INTO
      dm.product_t02 (
         column_name_1,
         column_name_2,
         column_name_3
      )
   VALUES (
      value_1,
      value_2,
      value_3'     
   )
   ON
      DUPLICATE KEY
   UPDATE
      column_name_1=value_1,
      column_name_2=value_2,
      column_name_3=value_3;

 

Referencehttps://unabated.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-MERGE-INTO-%ED%95%9C%EB%B2%88%EC%97%90-INSERT-UPDATE-%ED%95%98%EA%B8%B0

unabated.tistory.com/entry/오라클-MERGE-INTO-한번에-INSERT-UPDATE-하기

http://pkban.blogspot.com/2019/11/mysql-merge-into.html

728x90

'Dev > DB' 카테고리의 다른 글

[MySQL] 다중 update 쿼리 방법  (0) 2020.07.07
[MySQL] batch작업  (0) 2020.07.02
[MyBatis] Like 처리 방법  (0) 2020.06.30
[MySQL] SELECT IF, EXIST  (0) 2020.06.30
[MySQL] 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수)  (0) 2020.06.26
728x90

 

출처: https://fruitdev.tistory.com/60 [과일가게 개발자]

 

MyBatis Like 검색시 처리방법

MyBatis / iBatis에서 조건절에 Like 검색시 처리하는 방법이다. 검색하고자 하는 필드명이 "title" 이고 해당 필드에서 검색할 내용을 파라미터를 "keyword" 라고 하면 아래와 같이 검색할 수 있다. [MySQL]

fruitdev.tistory.com

 

MyBatis / iBatis에서 조건절에 Like 검색시 처리하는 방법이다.


검색하고자 하는 필드명이 "title" 이고 해당 필드에서 검색할 내용을 파라미터를 "keyword" 라고 하면 아래와 같이 검색할 수 있다.

[MySQL]
title like CONCAT('%',#{keyword},'%')


[Oracle]
title like '%' ||  #{keyword} || '%'


[MSSQL]
title like '%' + #{keyword} + '%'



정리 : 각 DBMS에 맞게 문자열 합치기 함수를 사용하여 이용하면 된다.



728x90
728x90

 

- IF 함수 내에서 EXISTS 절을 하위 쿼리로 전환

SELECT IF( EXISTS(
             SELECT *
             FROM gdata_calendars
             WHERE `group` =  ? AND id = ?), 1, 0)

 

 

- MySQL은 MS SQL처럼 IF Exists이 없음. 따라서 다음처럼 써야함

IF (SELECT 1 = 1 FROM TableName WHERE FieldValue = '') THEN
    SELECT '있다';
ELSE
    SELECT '없다';
END IF;

 

 

Reference

https://www.it-swarm.dev/ko/mysql/mysql%EC%9D%98-if-exists%EC%82%AC%EC%9A%A9/971165590/

https://motolies.com/792

728x90
728x90

extbrain.tistory.com/78

 

[MySQL] 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수)

▶MySQL 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수) ▶설명 MySQL에서 두 날짜간의 차이를 가져올 때 사용하는 함수가 두 가지가 있습니다. 단순히 일 차이를 가져올 때 사용하는 것이 DATEDIFF 함수

extbrain.tistory.com

▶설명


MySQL에서 두 날짜간의 차이를 가져올 때 사용하는 함수가 두 가지가 있습니다.

단순히 일 차이를 가져올 때 사용하는 것이 DATEDIFF 함수입니다.

이 외에도 차이를 연, 분기, 월, 주, 일, 시, 분, 초를 지정하여 가져올 때 사용하는 함수가 TIMESTAMPDIFF 함수입니다.

 

▶사용법


DATEDIFF

DATEDIFF(날짜1, 날짜2);

* 간단히 말하자면 날짜1 - 날짜2 동작입니다.

 

TIMESTAMPDIFF

TIMESTAMPDIFF(단위, 날짜1, 날짜2);

단위

  • SECOND : 초
  • MINUTE : 분
  • HOUR : 시
  • DAY : 일
  • WEEK : 주
  • MONTH : 월
  • QUARTER : 분기
  • YEAR : 연

 

▶예제 쿼리 (Example Query)


DATEDIFF 예제1

쿼리SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01', '2018-03-28');

 

결과

392

 

DATEDIFF 예제2

쿼리SELECT DATEDIFF('2018-03-28 23:59:59', '2017-03-01 00:00:00');

 

결과

392

 


 

TIMESTAMPDIFF : 초

쿼리SELECT TIMESTAMPDIFF(SECOND, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(SECOND, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

33868800

 

TIMESTAMPDIFF : 분

쿼리SELECT TIMESTAMPDIFF(MINUTE, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(MINUTE, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

564480

 

TIMESTAMPDIFF : 시

쿼리SELECT TIMESTAMPDIFF(HOUR, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(HOUR, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

9408

 

TIMESTAMPDIFF : 일

쿼리SELECT TIMESTAMPDIFF(DAY, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(DAY, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

392

 

TIMESTAMPDIFF : 주

쿼리SELECT TIMESTAMPDIFF(WEEK, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(WEEK, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

56

 

TIMESTAMPDIFF : 월

쿼리SELECT TIMESTAMPDIFF(MONTH, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(MONTH, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

12

 

TIMESTAMPDIFF : 분기

쿼리SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

4

 

TIMESTAMPDIFF : 연

쿼리SELECT TIMESTAMPDIFF(YEAR, '2017-03-01', '2018-03-28'); -- SELECT TIMESTAMPDIFF(YEAR, '2017-03-01 00:00:00', '2018-03-28 00:00:00');

 

결과

1



출처: https://extbrain.tistory.com/78 [확장형 뇌 저장소]

출처: https://extbrain.tistory.com/78 [확장형 뇌 저장소]

728x90

+ Recent posts