SQL 종류 (DDL / DML / TCL)

Jean·2025년 8월 5일
0

풀스택 교육

목록 보기
23/28

🍎 DDL (데이터 정의어)

  • CREATE: 테이블/뷰 등 생성
  • DROP: 삭제
  • ALTER: 구조 수정

⚠️ DDL은 자동으로 COMMIT 됨. 트랜잭션 제어 불가.

🍏 DML (데이터 조작어)

  • INSERT INTO 테이블 (컬럼명...) VALUES (값...);
  • DELETE FROM 테이블 WHERE 조건;
  • UPDATE 테이블 SET 컬럼 = 값, ... WHERE 조건;

✅ 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).

🥑 Select문의 추가 조건 (페이징 처리)

🥝 ROWNUM

  • SELECT 실행 직후에 붙는 번호
  • WHERE 조건에서 rownum = 3 ❌ → 항상 false
  • rownum <= 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번'은 조건에 맞을 수 없음

🥥  ROW_NUMBER()

  • 정렬 기준으로 번호를 다시 매김
  • 서브쿼리로 감싸야 WHERE절에서 번호로 필터 가능
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;

🍈 FETCH / OFFSET

-- 상위 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;

🍒 EXISTS (상관 서브쿼리)

  • 특정 조건을 만족하는 데이터가 있는지만 확인
  • 데이터 내용이 아닌, 존재 유무만 중요할 때 사용
SELECT *
FROM emp e
WHERE EXISTS (
  SELECT 1 FROM dept d WHERE d.deptno = e.deptno
);
profile
햇내기 개발자 지망생

0개의 댓글