본문 바로가기
SQL s

Oracle To MariaDB

by 엔터티 2021. 6. 4.
반응형

1.1. 데이터 타입 비교

Oracle / MariaDB Data Type Mapping

Oracle / MariaDB Data Type Mapping

1.2. Function / Statements

Oracle / MariaDB Function 비교

Oracle Maria Example ( Oracle ) Example ( Maria )
NVL IFNULL SELECT NVL( MAX( logging_time ) , SYSDATE ) last_time FROM xapm_server_time SELECT IFNULL( MAX( logging_time ) , now() ) last_time FROM mjlee9.xapm_server_time
SYSDATE NOW() SELECT SYSDATE FROM DUAL; SELECT now();
|| CONCAT() A||B CONCAT(A, B)
TO_DATE STR_TO_DATE SELECT TO_DATE('2021-02-11', 'YYYY-MM-DD') FROM dual; SELECT STR_TO_DATE('2021-02-11', '%Y-%m-%d');
TO_CHAR DATE_FORMAT SELECT TO_CHAR(SYSDATE,‘YYYY-MM-DD') credate FROM DUAL SELECT DATE_FORMAT(NOW(),'%Y-%m-%d')
TO_CHAR() CAST select to_char(1111) from dual select cast(1111 as char)
TO_NUMBER() CAST select to_number(1111) from dual select cast(1111 as unsigned)
TO_DATE() CAST select to_date(‘2015’) from dual select cast(‘2015’ as datetime)
DECODE CASE THEN SELECT DECODE(foods,'한식',1,'중식',2,'
양식',3,4)
SELECT CASE foods
WHEN '한식' THEN 1
WHEN  '중식' THEN 2
WHEN '양식' THEN 3
ELSE 4
END
JOIN(+) OUTER JOIN SELECT t1.*, t2.* FROM t1, t2 where
t1.i1 = t2.i2(+) ;
SELECT t1.*, t2.* FROM t1, t2 where
t1.i1(+) = t2.i2 ;
SELECT t1.*, t2.* FROM t1 LEFT OUTER
JOIN t2 ON t1.i1 = t2.i2 ;
SELECT t1.*, t2.* FROM t1 RIGHT
OUTER JOIN t2 ON t1.i1 = t2.i2 ;
ROWNUM LIMIT SELECT * FROM TABLE WHERE
ROWNUM >=1 AND ROWNUM <=5
SELECT * FROM TABLE LIMIT 1,10 ;
REGEXP_SUBSTR REGEXP_SUBSTR SELECT REGEXP_SUBSTR('ab12cd','[0-
9]+') FROM DUAL;
SELECT REGEXP_SUBSTR('ab12cd','[0-
9]+');
REGEXP_INSTR REGEXP_INSTR SELECT REGEXP_INSTR('abc','b') FROM
DUAL;
SELECT REGEXP_INSTR('abc','b');
REGEXP_LIKE REGEXP select REGEXP_LIKE(ERROR,
'\[JEF.*\].*|\[HI.*\].*')
select (ERROR REGEXP '\[JEF.*\].*' AND
ERROR REGEXP '\[HI.*\].*')
TRUNC TRUNCATE TRUNC(TO_NUMBER(b.playtime)/60) TRUNCATE(cast(b.playtime as
unsigned)/60,0)
CHR() CHAR() select chr(100) from dual select char(100 using ascii)

Oracle / MariaDB 구문 비교

Oracle Maria Example ( Oracle ) Example ( Maria )
OVER N/A SQL> select deptno, ename, sal, sum(sal)
over (partition by deptno)
from emp order by 1, 3
DEPTNO ENAME SAL
SUM(SAL)OVER(PARTITIONBYDEPTNO)
mysql> select a.DEPTNO, a.ENAME, a.SAL, b.TOTSAL
from EMP as a
inner join ( select DEPTNO, sum(SAL)
TOTSAL
from EMP group by DEPTNO )
as b
on a.DEPTNO = b.DEPTNO
order by 1, 3;
RANK() OVER N/A SQL>
select *
from (select deptno, empno, lastname,
firstname, sal,
rank() over (partition by deptno order
by sal desc) "RANK"
from employees)
where "RANK" <= 5
order by deptno, "RANK"
mysql>
select *
from (select a.DEPTNO, a.EMPNO,
a.LASTNAME, a.FIRSTNAME, a.SAL,
(select 1 + count(*) from
EMPLOYEES b
where b.DEPTNO = a.DEPTNO and
b.SAL > a.SAL) RANK
from EMPLOYEES as a) as x
where x.RANK <= 5
order by x.DEPTNO, x.RANK;
COUNT() OVER()  COUNT() select id, count(1) over() from
tb_access_log
select id, (select count(1) from
tb_access_log) from tb_access_log;
ROW_NUMBER()
OVER
N/A SELECT empno, ename, job, sal,
ROW_NUMBER() OVER (PARTITION BY job ORDER BY sal)
AS rnum FROM scott.emp;
SELECT empno, ename, job, sal, rnum
FROM ( SELECT a.*,
(CASE @vjob
WHEN a.job
THEN @rownum:=@rownum+1
ELSE @rownum:=1 END) rnum,
(@vjob:=a.job) vjob FROM emp a, (SELECT
@vjob:='', @rownum:=0 FROM DUAL) b
ORDER BY a.job, a.sal ) c;
NLSSORT BINARY select * from test order by NLSSORT(name);  select * from test order by BINARY(name);
ROWNUM   select t.*
from (
select ROWNUM rnum
, a.*
from tb a
) t;
select t.*
from (
select @ROWNUM := @ROWNUM +
1 as rnum
, a.*
from tb a
, (select @ROWNUM := 0) R
) t;
WITH ~ AS   WITH tab1 AS
(
select *
from tb1
)
, tab2 as
(
select *
from tb2
)
select *
from tab1
, tab2
where tab1.key = tab2.key;
select *
from tb1
inner join tb2
on tb1.key = tb2.key;
서브쿼리 alias 반드시 필요  AND a.fi_status = 1
AND a.fi_mt_id = 99
AND a.fi_u_id = 99
ORDER BY fKind ASC
, reg_dt desc
) originalquery
)
AND a.fi_status = 1
AND a.fi_mt_id = 99
AND a.fi_u_id = 99
ORDER BY fKind ASC
, reg_dt desc
) originalquery
) tt
HINT   1. /*+ 힌트 */
2. --+ 힌트
# 인텍스 생성
create index index_name on
table_name(col);
# 인텍스 SCAN
select * from table_name USE
INDEX(index_name) where col = 1;
RECURSIVE SQL  N/A select deptno,
ltrim(sys_connect_by_path(ename,','),',')
ename
from ( select deptno, ename,
row_number() over (partition by
deptno order by empno) rn,
count(*) over (partition by deptno)
cnt from emp )
where level = cnt start with rn = 1
connect by prior deptno = deptno and
prior rn = rn-1 ;
DEPTNO ENAME ------- ------------------------------------
10 CLARK,KING,MILLER
20 SMITH,JONES,SCOTT,ADAMS,FORD
30
ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
select deptno,
group_concat(ename order by empno
separator ',') as ename
from emp group by deptno;
DEPTNO ENAME
------- ------------------------------------
10 CLARK,KING,MILLER
20 SMITH,JONES,SCOTT,ADAMS,FORD
30
ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
14 rows in set (0.00 sec)

반응형

댓글