Oracle

SELECT * FROM TABS;
SELECT * FROM ALL_TAB_COLUMNS;

 

MySQL

SELECT * FROM INFORMATION_SCHEMA.TABLES;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS;

 

두 DBMS에서 가장 큰 차이점은 Oracle의 경우, 'TABS','ALL_TAB_COLUMNS'와 같은 이름으로 바로 조회가 가능하지만

MySQL에서는 INFORMATION_SCHEMA라는 DB명과 그에 맞는 이름을 사용하여 조회를 해야 한다.

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 
    B.TABLE_NAME
    , A.SEGMENT_NAME
    , ROUND(SUM(BYTES)/1024/1024) "SIZE_MB"
    , A.SEGMENT_TYPE
FROM USER_SEGMENTS A, USER_INDEXES B
WHERE A.SEGMENT_NAME = B.INDEX_NAME
AND A.SEGMENT_TYPE IN ('INDEX','INDEX PARTITION')
AND B.TABLE_NAME IN ([테이블명])
AND B.INDEX_NAME IN (
                    SELECT INDEX_NAME 
                    FROM USER_IND_COLUMNS
                    WHERE COLUMN_NAME = [컬럼명]
                    AND TABLE_NAME IN ([테이블명])

                   )
GROUP BY B.TABLE_NAME, A.SEGMENT_NAME, A.SEGMENT_TYPE
;

 

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