⚠️ DDL은 자동으로 COMMIT 됨. 트랜잭션 제어 불가.
✅ DML은 트랜잭션 제어 가능
🔁
COMMIT
,ROLLBACK
,SAVEPOINT
사용 가능
여러 SQL 작업을 묶어서 하나처럼 처리하는 것
- 중간에 뭐라도 잘못되면 → 전부 취소 가능
- 다 괜찮으면 → 확정(저장)
💡 모두 성공하면 COMMIT, 하나라도 실패하면 ROLLBACK으로 전부 취소 가능
CHAR(n)
: 고정 길이 문자열. 예: CHAR(5)
는 항상 5자.VARCHAR2(n)
: 가변 길이 문자열. 예: VARCHAR2(5)
는 최대 5자.CLOB
: 매우 큰 문자 데이터 저장 (최대 2GB).NUMBER
: 숫자 전용 (정수, 실수 모두 가능).INT
, FLOAT
: 특정 숫자형을 지정할 수 있음.DATE
: 날짜 + 시간까지 저장 가능.TIMESTAMP
: 날짜 + 시간(밀리초까지) 저장 가능.BLOB
: 이미지, 영상 같은 대용량 이진 데이터 저장 (최대 4GB).rownum = 3
❌ → 항상 falserownum <= 3
✅ (1~3번까지만 읽기 때문)SELECT ROWNUM, EMP.* FROM EMP;
-- ✅ 가능
SELECT ROWNUM, EMP.* FROM EMP WHERE ROWNUM <= 3;
-- ❌ 불가능
SELECT ROWNUM, EMP.* FROM EMP WHERE ROWNUM = 3;
-- → ROWNUM은 한 줄씩 읽으면서 번호를 붙이기 때문에
-- '3번'은 조건에 맞을 수 없음
SELECT ENAME, SAL, ROW_NUMBER() OVER (ORDER BY SAL DESC) AS RN FROM EMP;
-- Top N or 페이징 처리
SELECT * FROM (
SELECT EMP.*, ROW_NUMBER() OVER (ORDER BY HIREDATE) AS RN
FROM EMP
) WHERE RN BETWEEN 8 AND 14;
-- 상위 7개만
SELECT * FROM EMP
ORDER BY HIREDATE
FETCH FIRST 7 ROWS ONLY;
-- 8번째부터 14번째까지
SELECT * FROM EMP
ORDER BY HIREDATE
OFFSET 7 ROWS FETCH NEXT 7 ROWS ONLY;
SELECT *
FROM emp e
WHERE EXISTS (
SELECT 1 FROM dept d WHERE d.deptno = e.deptno
);