그동안 MySQL로 공부했기 때문에 이와 차이점을 통해 Oracle 문법과 기타 사용방법 등을 정리해보려 한다.
아직 고급 문법은 필요한 단계가 아니므로, 우선 간단한 문법만 작성한다.
MySQL : USE database_name;
Oracle : ALTER SESSION SET CONTAINER=pdb_name;
* 오라클에서는 pdb라는 개념을 사용(자세한건 검색)
참고
오라클은 MySQL과 달리 사용자 계정으로 데이터베이스를 구분함.
다시 말해 MySQL은 같은 계정으로 여러 데이터베이스를 사용했다면,
오라클은 여러 계정으로 각 계정의 데이터베이스를 사용.
MySQL : userGeneratedKey 속성을 이용
Oracle : selectKey 사용
Oracle 예시
테이블create table Board( board_id number primary key, title varchar2(30) not null, content varchar2(100) not null ); create sequence seq_board; --자동증가 값을 가져오기 위한 시퀀스매퍼 파일
<insert id="insertBoard" parameterType="Board"> <selectKey keyProperty="boardId" resultType="Long" order="BEFORE"> select seq_board.nextval from dual </selectKey> insert into board (board_id, title, content) values (#{board_id}, #{title}, #{name}) </insert>* 오라클에서 시퀀스값 조회는 from dual이 표준
* insert문을 실행하기 전(order="BEFORE")에 키값(keyProperty="boardId")을 Long타입(resultType="Long")으로 받아옴.
* selectKey 로직에서 Board객체의 id값을 세팅할 때 Board클래스의 Setter 필요* 참고
오라클 마이바티스에서 PK 자동 생성 : https://sesoc.tistory.com/41
selectKey 각 속성 의미 : https://yookeun.github.io/java/2014/07/11/mybatis-selectkey/
MySQL : 대소문자 구분 O
Oracle : 대소문자 구분 X
* 단 따옴표("") 사용 시 구분
ex) "user" 와 "USER"은 다르게 취급
MySQL : IFNULL(컬럼명, '출력단어')
Oracle : NVL(컬럼명, '출력단어')
* Null Value Logic
MySQL : CONCAT('문자', '문자', 문자')
Oracle : '문자' || '문자' || '문자'
MySQL : SUBSTRING(문자열, 시작위치, 추출갯수)
Oracle : SUBSTR(문자열, 시작위치, 추출갯수)
ex) SUBSTR('abcde', 2, 4)
결과 : bcde
MySQL : LIMIT 5,10 --정렬 후 수행
Oracle : WHERE ROWNUM > 5 AND ROWNUM <= 10 --정렬 전 수행
* Oracle에서 LIMIT과 동일한 결과를 얻는 예시
SELECT * FROM ( SELECT * FROM USERS WHERE NAME IN ('KIM') ORDER BY AGE ) WHERE ROWNUM <= 5;SELECT절로 한번 감싸서, ROWNUM을 사용
MySQL : NOW()
Oracle : SYSDATE
MySQL : DATE_FORMAT(컬럼명, 날짜형식)
Oracle : TO_CHAR(컬럼명, 날짜형식)
* 날짜형식도 다름
오라클 날짜형식
YYYY : 연도
MM : 월
DD : 일
HH24 : 24시간
MI : 분
SS : 초
ex) TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')* 원하는 요소만 사용 가능
ex) TO_CHAR(SYSDATE, 'YYYYMMDD')* 문자 삽입을 통해 형식 변형 가능 (- . , / : 등)
ex) TO_CHAR(SYSDATE, 'YYYY-MM-DD')
ex) TO_CHAR(SYSDATE, 'YYYY.MM.DD')
생일이 3월인 사람 찾기
MySQL : WHERE DATE_OF_BIRTH LIKE '%03%' --DATE 타입을 자동으로 CHAR로 적용하여 실행
ORACLE : WHERE TO_CHAR(DATE_OF_BIRTH, 'MM') = 3 --직접 CHAR로 변환
MySQL : `USER` --백틱
Oracle : "USER" --쌍따옴표
프로그래머스 SQL 문제 연습 정리
(MySQL 사용)