그럼 오라클 vs MySQL 어떤 걸 쓰는 것이 좋을까?
웹 개발, 그룹웨어 개발 등 데이터를 저장하기 위해 사용하는 DB로는 오라클 or mysql or PostgreSQL등로 나눠진다.
가장 많이 쓰이는 것은 오라클 or MySQL이다.
오라클
- 충분히 큰 예산과 복잡한 비즈니스 요구, 기업 고객을 위해 사용된다.
- 성능이 뛰어나고 여러 가지 기능 및 백업 등의 안전성까지 모두 갖춘 데이터베이스이다.
- 단점은 라이센스가 비싸고 유지보수 비용도 비싸다.
- 대기업에서 사용된다.
MySQL
- DB기반 웹 사이트 및 Non-critical 애플리케이션에 사용되는 저가의 데이터베이스이다.
- 속도 성능 모두 일반적인 수준을 만족하지만 복잡한 쿼리에서는 성능이 저하된다.
- 자체 서비스 기업이나 스타트업들이 주로 사용한다.
오라클 툴 종류
Toad | 오라클 전용 클라이언트 Tool | window용 | 유료 |
SQLgate | 오라클,MySQL DB 개발 및 관리솔루션 | Window용 | 유료 |
Orange | Oracle전용 | window용 | 유료 |
DBTool | web상에서 sql, mysql, oracle 쿼리문을 실행 관리가 가능한 툴 | 무료 | |
Oracle SQL Developer | Oracle전용 | 웹용 | 무료 |
그럼 오라클과 MySQL 차이는 있을까?
거의 동일하지만 다른 부분도 있다.
1. 칼럼 값에 NULL이면 다른 값으로 표시해주는 함수 사용법이 다르다.
ORACLE에서는 NVL함수를 사용하지만 MYSQL에서는 IFNULL을 사용합니다.
ex) (ORACLE) SELECT NVL(USER_ID,’’) FROM KGON
ex) (MYSQL ) SELECT IFNULL(USER_ID,’’) FROM KGON
2. 현재 날짜 시간 확인하는 방법이 다릅니다.
ORACLE에서는 SYSDATE를 사용하지만 MYSQL에서는 NOW() 함수를 사용한다.
ex) (ORACLE) SELECT SYSDATE FROM DUAL;
ex) (MYSQL ) SELECT NOW() FROM DUAL;
3. 날짜 포맷 변환 방법이 다릅니다.
ORACLE에서는 날짜를 STRING으로 변경 시 TO_CHAR() 함수를 사용하지만 MYSQL에서는 DATE_FORMAT() 함수를 사용한다.
ex) (ORACLE) SELECT TO_CHAR(REG_DATE, ‘YYYYMMDD HH24 MISS’) FROM DUAL;
ex) (MYSQL ) SELECT DATE_FORMAT(REG_DATE, ‘%Y%m%d%H%i%s’) FROM DUAL;
[형식에 쓰는 영문자는 대소문자에 따라 다른 값이 나올 수 있었다.]
[%Y는 4자리년도(2022) , %y는 2자리년도(22)]
4. 요일변환의 숫자범위가 다르다.
ORACLE은 일,월,화,수,목,금,토를 1,2,3,4,5,6,7로 인식한다.
MYSQL은 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 인식한다.
그렇기 때문에 요일 계산하는 경우 조심해야합니다.
오늘이 수요일인경우 ORACLE에서는 4가 반환되고 MYSQL에서는 3이 반환되기 떄문에 요일변환 사용하는 부분을 잘 확인해야한다.
[보통 JAVASCRIPT에서 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 쓰기 때문에 ORACLE인경우 결과값을 -1해서 반환하는 경우가 많다.]
ex) (ORACLE) SELECT TO_CHAR(SYSDATE, ‘D’) FROM DUAL; [결과값: 오늘이 수요일인경우 4를 반환]
ex) (MYSQL ) SELECT DATE_FORMAT(NOW(), ‘%w’) FROM DUAL; [결과값: 오늘이 수요일인경우 3을 반환]
5. 문자와 문자 합치는 방법이 다르다.
ORACLE에서는 문자와 문자를 합칠때 ' '을 사용한다.
MYSQL에서는 문자와 문자를 합칠때 CONCAT()함수를 사용한다.
ex) (MYSQL ) SELECT USER_ID FROM KGON WHERE USER_ID LIKE CONCAT(‘%’,’kgon’,’%’)
6. 형변환방법이 다르다.
ORACLE에서는 TO_CHAR, TO_NUMBER을 사용하여 형을 변환하지만 MYSQL에서는 CAST를 사용하여 형을 변환한다.
ex) (ORACLE) SELECT TO_CHAR(632) FROM DUAL
ex) (MYSQL ) SELECT CAST(1234 AS CHAR) FROM DUAL
7. 페이징처리가 다르다.
ORACLE은 ROWNUM을 이용하여 WHERE에서 BETWEEN으로 1~10번째자료를 나타낸다.
MYSQL은 LIMIT를 사용하여 1~10번째자료를 나타낸다.
ex) (ORACLE) SELECT * FROM ( SELECT ROWNUM , A.* FROM (SELECT * FROM KGON) A )WHERE ROWNUM BETWEEN 0 AND 10
ex) (MYSQL ) SELECT * FROM KGON LIMIT 0, 10
8. 시퀀스사용시 다음번호 불러오는 방법이 다르다.
ORACLE은 시퀀스명.NEXTVAL을 사용하지만 MYSQL은 시퀀스명.CURRVAL를 사용한다.
오라클 공부 순서
많은 글들을 읽다 보니 오라클 공부는 우선 아래 3가지를 하라고 한다.
1. DB Select Insert Update Delete
2.switch Case / 서브쿼리() / JOIN(ANSI권장) / 각종 함수 (오라클 - nvl, decode mysql - IFNULL, IF)등을 어떻게 활용해야 하는가
3. 함수(Function) / 프로시저(Procedure)를 직접 작성하고 호출
추가로 면접 공부시 패키지, 트리거 , 뷰 , 저장 서브프로그램, 프로시저 등 용도를 알면 좋다.
몇 개 안된다고 생각하지만 기본 지식이 없다면 1번을 수행하기 전에 테이블을 만들어야 하고 (실무에선 CREATE/ALTER) 할 필요는 없지만 면접에선 말할 줄 알아야 하므로, 그리고 기본을 대충 알아야지 일을 할 때 편하다.
그리고 char, varchar, numder, date, not null, pk, FK, Defauit 정도는 테이블 생성 시 어떤 기능을 하는지 알아야 한다.
또한, WHERE / GROUP BY / HAVING / ORDER BY를 어떻게 사용하는지 알면 기본이 된 거라고 한다.
다음 심화단계는 서브 쿼리이다. 실제 업무에선 원하는 값을 조회하기 위해 서브 쿼리를 몇 중으로 해서 최종 결과를 얻는 경우가 많이 몇 중으로 만드는 과정 까진 아니더라도 서브 쿼리를 봤을 때 읽을 수는 있어야 한다.
JOIN은 오라클에서 지원하는 방식이 아닌 ANSI방식을 권장한다.
ANSI는 모든 DB에서 통하는 방식이기 때문이다.
JOIN은 크게 4가지가 있다. INNER LEET RIGHT FULL 하지만 실무에선 INNER, LEET만 거의 사용한다.
이제 마지막 함수 / 프로시저 생성 및 호출 공부 방법에 대해서 야기하겠다.
함수는 기존에 존재하는 NVL IFNULL 등을 내가 직접 만들어서 피라미터를 던 저주면 값을 계산하여 결과를 리턴해주는 과정인데 이를 실제 만드는 것부터 호출하는 것까지 해보고
프로시저의 경우 값을 넣고 호출했을 경우 쿼리를 수행하게 되는데 실제 예제를 보면 피라미터를 넣으면 그걸 가지고 안에서 INSRT, UPDATE, DELETE쿼리를 수행하게 된다.
즉, 함수는 값을 넣으면 계산한 결과를 주는 거고 프로시저는 값을 넣으면 그걸 가지고 쿼리를 수행한다.
그래도 결국 DB는 SELECT가 중요하다.
https://leetcode.com/problemset/database/
위 링크엔 DB연습문제가 많기 때문에 많이 풀어보자.
책으로 습득하는 건 한계가 있다.
참조 : Oracle과 MySQL의 차이점 – JungHyun Baek – Developer from South Korea (junghyun100.github.io)
참조 : 웹개발 학원에서 DB는 어떻게 공부해야 되나 (tistory.com)
'IT' 카테고리의 다른 글
1. SQL 기본구조 & 기초명령어 (0) | 2022.06.28 |
---|---|
허브/스위치/라우터/공유기 차이 (0) | 2022.06.27 |
이클립스 설치과정 (0) | 2022.06.23 |
window에서 톰캣(Tomcat) 설치와 구동하기 (0) | 2022.06.22 |
윈도우 JDK 설치하고 환경변수 설정까지의 방법 (0) | 2022.06.22 |