조건문 – IF vs CASE
SQL에서 조건 분기 처리하는 방법
MySQL – IF 함수
SELECT name,
IF(salary >= 5000, '고연봉', '일반') AS pay_grade
FROM employees;
- IF(expr, true_value, false_value) 형식
- 조건식이 TRUE면 두 번째 값, FALSE면 세 번째 값 반환
Oracle – CASE 문
SELECT name,
CASE
WHEN salary >= 5000 THEN '고연봉'
ELSE '일반'
END AS pay_grade
FROM employees;
- SQL 표준 CASE 문법
- 복수 조건도 가능
다중 INSERT
여러 행을 한 번에 INSERT 하는 방법
MySQL
INSERT INTO user (id, name) VALUES
(1, '홍길동'),
(2, '이순신'),
(3, '강감찬');
- 여러 레코드 한 번에 삽입 가능
Oracle 11g
INSERT INTO user (id, name) VALUES (1, '홍길동');
INSERT INTO user (id, name) VALUES (2, '이순신');
INSERT INTO user (id, name) VALUES (3, '강감찬');
- 다중 VALUES 지원 안 함 → 여러 번 INSERT 실행 필요
- 12c 이상에서는 INSERT ALL 문법 가능
TOP N 행 조회 – LIMIT vs ROWNUM
결과 상위 N개만 가져오기
MySQL
SELECT * FROM products ORDER BY price DESC LIMIT 5;
- 간단하게 LIMIT 사용 가능
Oracle 11g
SELECT *
FROM (
SELECT * FROM products ORDER BY price DESC
)
WHERE ROWNUM <= 5;
- ROWNUM은 정렬 전에 부여되므로, 정렬 후 제한하려면 서브쿼리 필요
집계 문자열 – GROUP_CONCAT vs LISTAGG
그룹별 문자열 합치기
MySQL
SELECT department_id, GROUP_CONCAT(name ORDER BY name SEPARATOR ', ')
FROM employees
GROUP BY department_id;
Oracle 11g
SELECT department_id,
LISTAGG(name, ', ') WITHIN GROUP (ORDER BY name) AS names
FROM employees
GROUP BY department_id;
- Oracle 11g부터 LISTAGG 지원
10. Boolean 자료형
참/거짓 값 저장
MySQL
CREATE TABLE flags (
is_active TINYINT(1)
);
- TINYINT(1)로 대체 (0 = false, 1 = true)
Oracle
CREATE TABLE flags (
is_active NUMBER(1)
);
- BOOLEAN 자료형 없음 (PL/SQL에는 있음)
- 0/1로 표현
Dual 테이블
임시/가상 테이블
MySQL
SELECT 1;
- FROM 절 없이 바로 가능
Oracle
SELECT 1 FROM dual;
- DUAL 테이블 필수
서브쿼리 별칭
서브쿼리 결과에 별칭 필수 여부
MySQL
SELECT * FROM (SELECT * FROM employees) e;
- 별칭 생략 가능 (단, 권장 X)
Oracle
SELECT * FROM (SELECT * FROM employees) e;
- 별칭 필수 (없으면 오류 발생)
IF EXISTS / REPLACE 차이
MySQL
DROP TABLE IF EXISTS my_table;
REPLACE INTO table_name ...
- IF EXISTS 지원
- REPLACE INTO로 UPSERT 구현 가능
Oracle
-- IF EXISTS 없음 → 예외 처리로 대체
-- REPLACE INTO 없음 → MERGE 사용
MERGE INTO target t
USING (SELECT 1 id FROM dual) s
ON (t.id = s.id)
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT (...);
'DB' 카테고리의 다른 글
| SQL 오라클 자동증가 방법 (0) | 2025.08.29 |
|---|---|
| Oracle DB 실습 – 시퀀스, 트리거, 프로시저, 함수, 인덱스, 실행계획 (4) | 2025.08.18 |
| MySQL 과 Oracle NULL 처리 – IFNULL vs NVL (1) | 2025.08.11 |
| MySQL 과 Oracle 자동 증가(PK) 구현 차이/ LIMIT vs ROWNUM – 결과 제한 처리 (0) | 2025.08.11 |
| 오라클 - SQL 집합 연산자 & DML 정리 (0) | 2025.06.11 |