Oracle에서는 문자열은 ||을 사용하여 합치면 된다.

 

예시 

select ('2021-01-01' || ' ~ ' || '2021-01-02') as resultDate from dual;

 

MySQL은 CONCAT함수를 사용하여 합쳐야 한다

 

예시

select concat('2021-01-01','2021-01-02') as resultDate from dual;

 

추가적으로 MySQL은 CONCAT_WS([구분자], [인자값1], [인자값2], [인자값3],...)의 함수도 존재한다.

 

예시

select concat_ws(' ','서울특별시','중구','세종대로') as result from dual;

 

 

Oracle에서도 CONCAT함수를 제공한다. 그러나 인자값을 2개만 쓸 수 있으므로 불편한 상황이 발생한다.

 

예를 들면, 기존 SQL에 내용을 추가하게 될 때, 아래 예시 같이 쿼리의 가독성이 떨어지게 된다.

 

따라서, 몇 번의 추가적인 내용이 더 생기게 된다면 쿼리가 무엇을 합치려는지 쉽게 알 수가 없기 때문에 CONCAT함수보다는 ||의 사용을 더 선호한다.

 

예시

SELECT CONCAT('서울시','중구') FROM DUAL;
SELECT CONCAT(CONCAT('서울시','중구'),'세종대로') FROM DUAL;

 

SELECT 문법에서 DBMS에 따라 WHERE에 정규식을 사용하여 데이터를 조회할 수 있다.

 

오라클의 경우 REGEXP_LIKE 함수를 MySQL의 경우 REGEXP 함수를 사용한다.

 

 

ORACLE 10G

SELECT * FROM [테이블명] WHERE REGEXP_LIKE([컬럼명], [정규식]);
SELECT * FROM [테이블명] WHERE NOT REGEXP_LIKE([컬럼명], [정규식]);

 

ORACLE 11G에서는 REGEXP_COUNT 함수가 추가 되었다.

SELECT * FROM [테이블명] WHERE REGEXP_COUNT([컬러명], [정규식] ) > 0;

 

사용 예시

SELECT *
FROM MEMBER
WHERE REGEXP_LIKE(NAME, '[a-z] | [A-Z]');

SELECT *
FROM MEMBER
WHERE NOT REGEXP_LIKE(NAME, '[a-z] | [A-Z]');

SELECT *
FROM MEMBER
WHERE REGEXP_COUNT(NAME, '[a-z] | [A-Z]') > 0;

SELECT *
FROM MEMBER
WHERE REGEXP_COUNT(NAME, '[a-z] | [A-Z]') < 0;

 


MySQL

SELECT * FROM [테이블명] WHERE [컬럼명] REGEXP([정규식] );
SELECT * FROM [테이블명] WHERE [컬럼명] NOT REGEXP([정규식] );

 

사용 예시

SELECT *
FROM MEMBER
WHERE NAME REGEXP('[a-z] | [A-Z]');

SELECT *
FROM MEMBER
WHERE NAME NOT REGEXP('[a-z] | [A-Z]');

 

'데이터베이스' 카테고리의 다른 글

[SQL] 문자열 합치기  (0) 2021.01.15
[SQL]Oracle 인덱스 용량 계산  (0) 2021.01.14
[SQL] 기본 SQL  (0) 2021.01.11
[SQL] 매주 특정 요일의 날짜를 SQL로 계산하기  (0) 2020.12.23
[SQL Template] paging, grid template  (0) 2020.02.04

+테이터베이스 

    - 데이터베이스 목록보기

    show databases;

 

    - 테이터베이스 생성

    create database [테이터베이스명];

 

    - 테이터베이스 삭제

    drop database [테이터베이스명];

 

    - 데이터베이스 사용하기

    use [테이터베이스명];



+테이블

    - 테이블 생성

    create table [테이블명]{

        [컬럼명] [테이터타입] [제약조건]

    };

 

    - 테이블 삭제

    drop table [테이블명];

 

    - 테이블 조회 

    select [컬럼명]

    from [테이블명];

 

    - 데이터 추가

    insert into [테이블명] ( [컬럼명] )

    values ( [데이터] );

 

    - 데이터 삭제

    delte from [테이블명] 

    where [조건];

 

    - 데이터 수정

    update [테이블명]

    set [컬럼명] = [데이터]

    where [조건];

Oracle의 경우, next_day()함수를 사용하면 쉽게 구할 수 있다.

--1:일요일, 2:월요일, 3:화요일, 4:수요일, 5:목요일, 6:금요일, 7:토요일
SELECT
NEXT_DAY(SYSDATE,1)
FROM
DUAL;

 

Mysql의 경우, NEXT_DAY()함수가 존재하지 않기 때문에 별도의 쿼리를 작성하여야 한다.

--0: 일요일, 1: 월요일, 2: 화요일, 3:수요일, 4:목요일, 5:금요일, 6:토요일
SELECT 
CASE
	WHEN T1.choiceDay > date_format(sysdate(),'%w') THEN ADDDATE(SYSDATE(),( T1.choiceDay - date_format(sysdate(),'%w')))
	ELSE ADDDATE( SYSDATE(), (7-date_format(sysdate(),'%w')+T1.choiceDay))
END as resultDay
FROM
( SELECT 6 AS choiceDay FROM DUAL )T1
;

 

오라클은 일요일이 1에서 시작하고, Mysql은 일요일이 0에서 시작하기 때문에 이 부분에 대해서는 유의해야 한다.

'데이터베이스' 카테고리의 다른 글

[SQL] 정규식을 사용한 Select 조회  (0) 2021.01.13
[SQL] 기본 SQL  (0) 2021.01.11
[SQL Template] paging, grid template  (0) 2020.02.04
[SQL] INSERT VALUES((SELECT))  (0) 2016.06.03
MariaDB Connector  (0) 2014.11.17

MyBatis 사용 시, 페이징이나 그리드를 위한 쿼리문 템플릿 예시

 

-- selectData에는 실제 사용될 쿼리문을 사용

<sql id=”selectData”>

 실제 사용될 쿼리문

</sql>

 

-- selectDataList에는 한 페이지에 표시될 내용을 출력

-- ( ※ startNum과 endNum은 VO에 값이 있어야 오류 없이 사용 가능 )

-- 예시 : startNum : 1, endNum : 10이면 총 10개의 row로 구성된 내용을 출력 

<select id=”selectDataList” parameterType=”” resultType=””>

select 

       A.*

    from (

        select rownum rn

          ,A.*

        from (

          <include refid="selectData"/>

          )A

     where 1=1

    ) A

where 1=1

and   rn >=#{startNum} and rn &lt;=#{endNum}

</select>

 

-- selectDataListCount에는 쿼리문에 대한 전체 개수 출력

<select id="selectDataListCount" parameterType="" resultType="int">

    select 

           count(1) cnt 

    from   (

        <include refid="selectData"/>

    )

 </select>

 



INSERT INTO TABLE_NAME VALUES('COLUMN_1','COLUMN_2','COLUMN_3');


일반적인 INSERT문을 사용하면서 COLUMN_1에 자동으로 증가하는 값으로 INSERT를 해야되는 경우,



먼저,


SELECT MAX(COLUMN_1) FROM TABLE_NAME



위와 같이 컬럼의 최대값을 획득하면서 +1 하면서 입력이 되어야 한다.


따라서, 최종적으로


INSERT INTO TABLE_NAME

VALUES ( (SELECT MAX(COLUMN_1) FROM TABLE_NAME) + 1

             , 'COLUMN_2'

             , 'COLUMN_3');


위와 같은 형태로 입력하여, COLUMN_1에 자동으로 최대값을 입력하면서 INSERT가 된다.







TABLE에 간략하게 데이터를 삽입하게 될 경우 INSERT를 통해서 직접적으로 입력하여 진행하게 되도 큰 무리가 없다.


하지만 다른 테이블에서 추출된 데이터를 삽입하게 될 경우에, 데이터 입력이 어려울 뿐만 아니라, 


정확한 데이터 입력을 보장 할 수 없을 수도 있다.


그래서 보다 쉬운 방법으로 INSERT문을 진행해보려 한다.


일반적인 INSERT에서 SELECT(추출된 값) 구문을 추가하여 추출된 값이 바로 INSERT되도록 할 것이다.


INSERT INTO TABLE_NAME(COL1, COL2, COL3)

SELECT COL1, COL2, 'Y' FROM OTHER_TABLE_NAME;


위 같이 진행하게 되면 테이블에서 추출된 값을 바로 INSERT할  수 있게 된다.


이중에서도 눈여겨 볼 점은 'Y'로 INSERT할때에, 무조건적으로 'Y'로 삽입될 수 있도록 하게 한다.

'데이터베이스' 카테고리의 다른 글

[SQL Template] paging, grid template  (0) 2020.02.04
[SQL] INSERT VALUES((SELECT))  (0) 2016.06.03
MariaDB Connector  (0) 2014.11.17
[Oracle] CLOB SELECT하기 (Orange 사용) - pgadmin3 추가  (0) 2013.09.12
[iBatis] 부등호 처리  (0) 2012.11.09