목차
1 DML
2 UPDATE
3 UPDATE와 서브쿼리
4 DELETE
5 TRUNCATE
6 트랜잭션
7 COMMIT과 ROLLBACK
8 SAVEPOINT
9 ALTER TABLE
10 DROP
11 VIEW
12 VIEW와 DML
13 VIEW 생성 옵션
14 SEQUENCE
1 DML
1) DML의 개념
(1) DML의 역할
DML은 테이블 안의 데이터를 조작하는 SQL 명령어이다.
데이터를 추가, 수정, 삭제, 조회할 때 사용한다.
(2) INSERT
INSERT는 테이블에 새로운 행을 추가하는 명령어이다.
새로운 사원, 회원, 게시글 같은 데이터를 저장할 때 사용한다.
(3) UPDATE
UPDATE는 이미 저장된 데이터를 수정하는 명령어이다.
잘못 입력된 값이나 변경된 정보를 다시 저장할 때 사용한다.
(4) DELETE
DELETE는 테이블에 저장된 행을 삭제하는 명령어이다.
조건에 맞는 데이터를 제거할 때 사용한다.
(5) SELECT
SELECT는 테이블에 저장된 데이터를 조회하는 명령어이다.
CRUD에서 READ에 해당한다.
2 UPDATE
1) UPDATE의 개념
(1) UPDATE의 역할
UPDATE는 테이블에 저장된 기존 데이터를 수정할 때 사용하는 명령어이다.
컬럼의 값을 새 값으로 변경하고 싶을 때 사용한다.
(2) 기본 구조
UPDATE문은 어떤 테이블을 수정할지 정하고, SET절에서 어떤 컬럼을 어떤 값으로 바꿀지 작성한다.
WHERE절을 사용하면 특정 조건에 맞는 행만 수정할 수 있다.
2) WHERE절의 중요성
(1) 조건을 사용하는 이유
UPDATE문에서 WHERE절을 사용하지 않으면 테이블의 모든 행이 수정될 수 있다.
특정 데이터만 수정해야 할 때는 반드시 WHERE 조건을 작성해야 한다.
(2) 특정 부서명 수정
부서코드가 D9인 행만 찾아서 부서명을 전략기획부로 변경할 수 있다.
이런 방식으로 원하는 행만 선택해서 수정한다.
3) 여러 컬럼 수정
(1) SET절에서 여러 컬럼 수정
UPDATE문에서는 한 번에 여러 컬럼의 값을 수정할 수 있다.
컬럼명과 변경값을 쉼표로 구분해서 작성하면 된다.
(2) 부서코드와 부서명 동시 수정
DEPT_ID와 DEPT_TITLE을 한 번에 변경하면 같은 행의 여러 정보를 동시에 수정할 수 있다.
관련된 값을 함께 바꿔야 할 때 유용하다.
4) 문자열 일부 수정
(1) SUBSTR 활용
SUBSTR을 사용하면 기존 문자열의 일부는 유지하고, 필요한 앞부분만 새 값으로 바꿀 수 있다.
주민등록번호처럼 앞자리만 수정하고 뒤쪽 값은 유지해야 할 때 사용할 수 있다.
(2) 문자열 연결
Oracle에서는 || 연산자를 사용해 문자열을 이어 붙일 수 있다.
새 생년월일 값과 기존 주민등록번호 뒷부분을 연결해서 전체 값을 다시 만들 수 있다.
3 UPDATE와 서브쿼리
1) UPDATE 서브쿼리의 개념
(1) UPDATE에서 서브쿼리를 사용하는 이유
UPDATE문에서도 서브쿼리를 사용해 다른 행의 값을 가져와 수정할 수 있다.
직접 값을 입력하지 않고, 조회 결과를 수정값으로 사용할 때 유용하다.
(2) 하나의 컬럼 수정
특정 사원의 급여를 다른 사원의 급여와 같게 만들 수 있다.
이때 SET절에 서브쿼리를 작성해 기준이 되는 값을 가져온다.
2) 여러 컬럼 동시 수정
(1) 컬럼 묶음 수정
SALARY와 BONUS처럼 여러 컬럼을 한 번에 서브쿼리 결과로 수정할 수 있다.
수정할 컬럼 개수와 서브쿼리에서 조회하는 컬럼 개수가 맞아야 한다.
(2) 여러 사원에게 같은 값 적용
WHERE절에서 IN을 사용하면 여러 사원의 급여와 보너스를 한 번에 수정할 수 있다.
같은 기준값을 여러 행에 적용할 때 유용하다.
4 DELETE
1) DELETE의 개념
(1) DELETE의 역할
DELETE는 테이블에 저장된 행을 삭제하는 명령어이다.
조건에 맞는 데이터만 삭제하거나, 조건 없이 전체 데이터를 삭제할 수 있다.
(2) 기본 구조
DELETE FROM 뒤에는 삭제할 테이블명을 작성한다.
WHERE절을 작성하면 조건을 만족하는 행만 삭제한다.
2) DELETE와 WHERE
(1) 조건 삭제
급여가 특정 금액 이하인 사원이나 사번이 특정 값인 사원을 삭제할 수 있다.
삭제 대상이 명확할 때 WHERE절을 사용한다.
(2) WHERE 없이 삭제
WHERE절 없이 DELETE를 실행하면 테이블의 모든 행이 삭제된다.
테이블 구조는 남아 있고 데이터만 사라진다.
3) DELETE와 DROP 차이
(1) DELETE
DELETE는 테이블 안의 데이터만 삭제한다.
테이블 구조와 컬럼, 제약조건은 그대로 남아 있다.
(2) DROP
DROP은 테이블 자체를 삭제한다.
데이터뿐만 아니라 테이블 구조도 함께 사라진다.
5 TRUNCATE
1) TRUNCATE의 개념
(1) TRUNCATE의 역할
TRUNCATE는 테이블의 전체 데이터를 빠르게 삭제하는 명령어이다.
DELETE처럼 행을 제거하지만, 전체 삭제에 특화되어 있다.
(2) DELETE와 차이
DELETE는 트랜잭션 제어가 가능해서 ROLLBACK으로 되돌릴 수 있다.
TRUNCATE는 실행 후 ROLLBACK이 불가능하므로 신중하게 사용해야 한다.
2) 사용 상황
(1) 전체 데이터 초기화
테스트 테이블의 데이터를 전부 비우고 다시 사용하고 싶을 때 사용할 수 있다.
테이블 구조는 유지하면서 안의 데이터만 빠르게 제거한다.
6 트랜잭션
1) 트랜잭션의 개념
(1) 트랜잭션의 역할
트랜잭션은 데이터베이스에서 하나의 작업 단위로 처리되는 묶음이다.
여러 작업이 하나의 흐름으로 연결되어 있을 때, 모두 성공하거나 모두 취소되어야 한다.
(2) 트랜잭션이 필요한 이유
데이터 처리 중 일부만 성공하고 일부가 실패하면 데이터가 이상한 상태가 될 수 있다.
트랜잭션은 데이터가 중간에 깨지지 않도록 작업의 성공과 실패를 관리한다.
2) 트랜잭션의 원칙
(1) 모두 성공
작업들이 모두 정상적으로 끝나면 COMMIT을 통해 데이터베이스에 반영한다.
(2) 하나라도 실패
작업 중 문제가 생기면 ROLLBACK을 통해 이전 상태로 되돌린다.
이렇게 하면 잘못된 변경사항이 저장되는 것을 막을 수 있다.
7 COMMIT과 ROLLBACK
1) COMMIT
(1) COMMIT의 역할
COMMIT은 지금까지 변경한 내용을 데이터베이스에 영구적으로 반영하는 명령어이다.
INSERT, UPDATE, DELETE 작업이 정상적으로 완료되었을 때 사용한다.
(2) COMMIT 이후 상태
COMMIT을 실행하면 변경 내용이 확정된다.
이후에는 일반적인 ROLLBACK으로 COMMIT 이전 상태로 되돌릴 수 없다.
2) ROLLBACK
(1) ROLLBACK의 역할
ROLLBACK은 트랜잭션 작업 중 발생한 변경사항을 취소하는 명령어이다.
가장 최근 COMMIT 시점으로 되돌아간다.
(2) 사용 상황
데이터를 잘못 입력하거나 수정했을 때 ROLLBACK을 사용하면 변경 전 상태로 되돌릴 수 있다.
실수한 작업을 확정하기 전에 취소할 수 있는 안전장치이다.
8 SAVEPOINT
1) SAVEPOINT의 개념
(1) SAVEPOINT의 역할
SAVEPOINT는 트랜잭션 중간에 되돌아갈 지점을 만들어두는 명령어이다.
전체 작업을 모두 취소하지 않고, 특정 지점 이후의 작업만 취소하고 싶을 때 사용한다.
(2) ROLLBACK TO
ROLLBACK TO SAVEPOINT명을 사용하면 지정한 SAVEPOINT 시점으로 되돌아갈 수 있다.
여러 단계의 작업을 나누어 관리할 때 유용하다.
2) 사용 상황
(1) 일부 작업만 취소
데이터 3개를 저장한 시점에 SAVEPOINT를 만들고, 이후 추가한 데이터만 취소할 수 있다.
전체 트랜잭션을 취소하지 않고 필요한 부분만 되돌릴 수 있다.
9 ALTER TABLE
1) ALTER TABLE의 개념
(1) ALTER TABLE의 역할
ALTER TABLE은 이미 생성된 테이블의 구조를 수정하는 DDL 명령어이다.
컬럼 추가, 컬럼 삭제, 컬럼명 변경, 테이블명 변경, 자료형 수정, 제약조건 추가 등에 사용한다.
(2) DML과의 차이
DML은 테이블 안의 데이터를 바꾸는 명령어이다.
ALTER TABLE은 데이터가 아니라 테이블의 구조 자체를 수정한다.
2) 컬럼 추가
(1) ADD
ADD는 기존 테이블에 새로운 컬럼을 추가할 때 사용한다.
예를 들어 부서 테이블에 LNAME이라는 지역명 컬럼을 추가할 수 있다.
(2) DEFAULT와 함께 추가
컬럼을 추가할 때 DEFAULT 값을 설정하면 새 데이터 입력 시 기본값이 자동으로 들어갈 수 있다.
예를 들어 LNAME 컬럼의 기본값을 한국으로 설정할 수 있다.
3) 컬럼 삭제
(1) DROP COLUMN
DROP COLUMN은 테이블에서 특정 컬럼을 삭제할 때 사용한다.
더 이상 필요하지 않은 컬럼을 제거할 수 있다.
(2) 모든 컬럼 삭제 불가
테이블에는 최소한 하나의 컬럼이 남아 있어야 한다.
모든 컬럼을 삭제하려고 하면 오류가 발생한다.
4) 제약조건 추가
(1) PRIMARY KEY 추가
ALTER TABLE로 기존 테이블의 컬럼에 기본키를 추가할 수 있다.
테이블 생성 후에도 식별 기준을 설정할 수 있다.
(2) UNIQUE 추가
특정 컬럼에 중복을 막는 UNIQUE 제약조건을 추가할 수 있다.
부서명처럼 중복되면 안 되는 값에 적용할 수 있다.
(3) NOT NULL 추가
MODIFY를 사용하면 기존 컬럼에 NOT NULL 제약조건을 추가할 수 있다.
필수 입력 컬럼으로 바꾸고 싶을 때 사용한다.
5) 이름 변경
(1) 컬럼명 변경
RENAME COLUMN을 사용하면 기존 컬럼명을 새 이름으로 바꿀 수 있다.
컬럼명이 더 명확해야 하거나 설계가 바뀌었을 때 사용한다.
(2) 테이블명 변경
RENAME TO를 사용하면 테이블 이름을 변경할 수 있다.
테이블의 목적이 바뀌었거나 이름을 더 명확하게 정리하고 싶을 때 사용한다.
(3) 제약조건 이름 변경
RENAME CONSTRAINT를 사용하면 제약조건 이름도 변경할 수 있다.
자동 생성된 이름보다 의미 있는 이름으로 바꾸면 관리하기 쉽다.
6) 자료형 수정
(1) MODIFY
MODIFY는 기존 컬럼의 자료형이나 크기를 변경할 때 사용한다.
VARCHAR2 길이를 늘리거나 CHAR 타입으로 바꾸는 작업을 할 수 있다.
(2) 크기 축소 주의
이미 저장된 데이터보다 더 작은 크기로 컬럼 길이를 줄일 수는 없다.
기존 값이 잘리지 않도록 데이터 크기를 확인한 뒤 수정해야 한다.
7) DDL과 COMMIT
(1) DDL의 특징
CREATE, ALTER, DROP 같은 DDL은 실행하면 자동으로 COMMIT된다.
일반적인 ROLLBACK으로 되돌릴 수 없다.
(2) DML 후 DDL 실행 주의
DML 작업 후 COMMIT하지 않은 상태에서 DDL을 실행하면 이전 DML 작업까지 함께 COMMIT될 수 있다.
따라서 DDL 실행 전에는 현재 트랜잭션 상태를 확인하는 것이 중요하다.
10 DROP
1) DROP의 개념
(1) DROP의 역할
DROP은 데이터베이스 객체 자체를 삭제하는 명령어이다.
테이블, 뷰, 사용자, 시퀀스 같은 객체를 제거할 때 사용한다.
(2) DELETE와 차이
DELETE는 테이블 안의 데이터만 삭제한다.
DROP은 테이블이나 뷰 같은 객체 자체를 삭제한다.
2) 사용 대상
(1) DROP TABLE
DROP TABLE은 테이블 자체를 삭제한다.
테이블 구조와 데이터가 함께 제거된다.
(2) DROP VIEW
DROP VIEW는 생성된 뷰를 삭제한다.
뷰는 삭제되지만 원본 테이블은 삭제되지 않는다.
(3) DROP SEQUENCE
DROP SEQUENCE는 생성된 시퀀스 객체를 삭제한다.
더 이상 자동 번호 생성이 필요 없을 때 사용한다.
11 VIEW
1) VIEW의 개념
(1) VIEW의 역할
VIEW는 SELECT문을 저장해두고, 필요할 때 테이블처럼 조회할 수 있는 데이터베이스 객체이다.
실제 데이터를 새로 저장하는 것이 아니라, SELECT 쿼리문 자체를 저장한다.
(2) VIEW를 사용하는 이유
자주 사용하는 복잡한 SELECT문을 뷰로 만들어두면 매번 긴 JOIN문을 작성하지 않아도 된다.
필요한 컬럼만 보여주거나 복잡한 조회 결과를 간단하게 사용할 수 있다.
2) VIEW 생성
(1) CREATE VIEW
CREATE VIEW는 새로운 뷰를 생성하는 명령어이다.
AS 뒤에 뷰가 실행할 SELECT문을 작성한다.
(2) CREATE OR REPLACE VIEW
CREATE OR REPLACE VIEW는 같은 이름의 뷰가 이미 있으면 덮어쓰고, 없으면 새로 생성한다.
기존 뷰를 수정하듯 다시 만들 때 사용한다.
3) VIEW 조회
(1) SELECT FROM VIEW
뷰는 테이블처럼 SELECT문으로 조회할 수 있다.
사용자는 뷰 이름만 조회하면 내부에 저장된 SELECT 결과를 확인할 수 있다.
(2) 조건 조회
뷰를 조회할 때도 WHERE절을 사용할 수 있다.
예를 들어 뷰 결과 중 특정 사번에 해당하는 사원만 조회할 수 있다.
4) VIEW와 원본 테이블
(1) 원본 데이터 반영
뷰는 SELECT문을 저장하는 객체이기 때문에 원본 테이블의 값이 바뀌면 뷰에서 보이는 결과도 함께 바뀐다.
뷰가 데이터를 따로 복사해서 저장하는 것이 아니기 때문이다.
(2) 뷰 삭제
DROP VIEW로 뷰를 삭제해도 원본 테이블은 삭제되지 않는다.
삭제되는 것은 저장된 SELECT문 객체이다.
12 VIEW와 DML
1) VIEW를 통한 데이터 조작
(1) 가능한 경우
단순한 테이블 조회로 만들어진 뷰는 INSERT, UPDATE, DELETE가 가능할 수 있다.
뷰를 통해 데이터를 조작하면 실제 원본 테이블에 반영된다.
(2) 주의할 점
뷰는 테이블처럼 보이지만 실제로는 SELECT문이다.
뷰 구조에 따라 데이터 추가, 수정, 삭제가 제한될 수 있다.
2) VIEW에서 DML이 어려운 경우
(1) 보이지 않는 필수 컬럼
뷰에 포함되지 않은 컬럼 중 NOT NULL 제약조건이 있는 컬럼이 있으면 INSERT가 어려울 수 있다.
값을 넣어야 하는 컬럼이 뷰에 없기 때문이다.
(2) 산술연산 컬럼
SALARY * 12처럼 계산으로 만들어진 컬럼은 실제 저장 컬럼이 아니다.
이런 가상 컬럼에는 직접 값을 INSERT하거나 UPDATE할 수 없다.
(3) JOIN을 사용한 뷰
여러 테이블을 JOIN한 뷰는 어떤 원본 테이블에 데이터를 반영해야 하는지 애매할 수 있다.
그래서 DML 작업이 제한될 수 있다.
(4) 그룹 함수와 GROUP BY
SUM, AVG 같은 그룹 함수나 GROUP BY를 사용한 뷰는 요약 결과를 보여준다.
요약 결과는 실제 한 행과 직접 연결되지 않기 때문에 DML 작업이 어렵다.
13 VIEW 생성 옵션
1) OR REPLACE
(1) OR REPLACE의 역할
OR REPLACE는 같은 이름의 뷰가 이미 있으면 기존 뷰를 새 내용으로 덮어쓰는 옵션이다.
뷰를 수정할 때 DROP 후 다시 CREATE하지 않아도 된다.
2) FORCE와 NO FORCE
(1) FORCE
FORCE는 뷰에서 참조하는 테이블이 없어도 일단 뷰를 생성하는 옵션이다.
나중에 테이블이 생성될 예정일 때 사용할 수 있다.
(2) NO FORCE
NO FORCE는 기본값이며, 참조하는 테이블이 실제로 존재해야 뷰를 생성한다.
잘못된 테이블을 참조하는 뷰 생성을 막을 수 있다.
3) WITH CHECK OPTION
(1) WITH CHECK OPTION의 역할
WITH CHECK OPTION은 뷰의 조건을 벗어나는 방향으로 데이터를 추가하거나 수정하지 못하게 하는 옵션이다.
뷰가 보여주는 범위 안에서만 데이터 변경이 가능하도록 제한한다.
(2) 사용 이유
특정 조건을 가진 뷰를 만들었을 때, 그 조건을 깨는 데이터가 뷰를 통해 들어오지 못하게 막기 위해 사용한다.
뷰의 조회 기준과 데이터 변경 기준을 일치시킬 수 있다.
4) WITH READ ONLY
(1) WITH READ ONLY의 역할
WITH READ ONLY는 뷰를 통해 INSERT, UPDATE, DELETE를 할 수 없게 막는 옵션이다.
뷰를 조회 전용으로 만들 때 사용한다.
(2) 사용 상황
사용자에게 데이터는 보여주되, 원본 데이터를 수정하지 못하게 하고 싶을 때 사용한다.
조회용 화면이나 보고서용 뷰에 적합하다.
14 SEQUENCE
1) SEQUENCE의 개념
(1) SEQUENCE의 역할
SEQUENCE는 숫자를 자동으로 생성해주는 데이터베이스 객체이다.
1, 2, 3처럼 순차적으로 증가하는 번호가 필요할 때 사용한다.
(2) SEQUENCE를 사용하는 이유
사원번호, 게시글번호, 주문번호처럼 중복되지 않는 번호를 직접 입력하기 어렵다.
SEQUENCE를 사용하면 자동으로 고유한 숫자를 생성할 수 있다.
2) SEQUENCE 생성 옵션
(1) START WITH
START WITH는 시퀀스가 시작할 첫 번째 값을 설정한다.
예를 들어 300부터 번호를 시작하게 만들 수 있다.
(2) INCREMENT BY
INCREMENT BY는 다음 값으로 증가할 간격을 설정한다.
5로 설정하면 300, 305, 310처럼 증가한다.
(3) MAXVALUE
MAXVALUE는 시퀀스가 생성할 수 있는 최대값을 설정한다.
최대값을 넘으면 설정에 따라 오류가 발생하거나 순환될 수 있다.
(4) MINVALUE
MINVALUE는 시퀀스가 가질 수 있는 최소값을 설정한다.
CYCLE 옵션과 함께 사용할 때 다시 돌아갈 기준이 될 수 있다.
(5) CYCLE
CYCLE은 최대값에 도달한 뒤 다시 최소값부터 번호를 생성할지 정하는 옵션이다.
번호를 순환해서 사용할 때 설정한다.
(6) NOCYCLE
NOCYCLE은 최대값에 도달하면 더 이상 번호를 생성하지 않도록 하는 옵션이다.
고유 번호가 반복되면 안 되는 경우에 사용한다.
(7) CACHE
CACHE는 시퀀스 값을 미리 메모리에 만들어두는 옵션이다.
성능을 높일 수 있지만, 시스템 종료 등으로 일부 번호가 건너뛰어 보일 수 있다.
(8) NOCACHE
NOCACHE는 시퀀스 값을 미리 저장하지 않고 필요할 때 생성하는 옵션이다.
실습이나 번호 흐름을 명확히 확인하고 싶을 때 사용할 수 있다.
3) NEXTVAL과 CURRVAL
(1) NEXTVAL
NEXTVAL은 시퀀스의 다음 값을 생성하고 반환한다.
INSERT문에서 새로운 번호를 넣을 때 자주 사용한다.
(2) CURRVAL
CURRVAL은 현재 세션에서 마지막으로 생성된 시퀀스 값을 반환한다.
NEXTVAL을 한 번 실행한 뒤에 사용할 수 있다.
4) SEQUENCE 수정
(1) ALTER SEQUENCE
ALTER SEQUENCE는 이미 생성된 시퀀스의 옵션을 수정할 때 사용한다.
증가값, 최대값, 순환 여부, 캐시 여부 등을 변경할 수 있다.
(2) 초기값 변경 제한
시퀀스의 시작값은 ALTER SEQUENCE로 직접 변경할 수 없다.
시작값을 다시 설정하고 싶다면 기존 시퀀스를 삭제하고 새로 생성해야 한다.
5) SEQUENCE 사용 제한
(1) 사용 가능한 위치
시퀀스는 SELECT, INSERT, UPDATE 등에서 사용할 수 있다.
특히 INSERT에서 기본키 값을 자동으로 넣을 때 많이 사용한다.
(2) 사용이 제한되는 위치
시퀀스는 서브쿼리의 SELECT문, VIEW, DISTINCT 컬럼, GROUP BY, HAVING, ORDER BY 등에서는 사용할 수 없다.
자동 번호 생성의 의미가 명확하지 않은 위치에서는 제한된다.
6) SEQUENCE를 이용한 데이터 추가
(1) 자동 번호 입력
INSERT문에서 SEQ_ID.NEXTVAL을 사용하면 새로운 사원번호를 자동으로 생성해 넣을 수 있다.
매번 번호를 직접 계산하지 않아도 되기 때문에 편리하다.
(2) 중복 방지
시퀀스는 순차적으로 값을 생성하므로 기본키처럼 고유한 번호가 필요한 컬럼에 적합하다.
데이터 추가 시 번호 중복 문제를 줄일 수 있다.
'멀티캠퍼스' 카테고리의 다른 글
| [2026.05.15] - TIL 31일차 JDBC 개념과 자바 DB 연결 정리 (0) | 2026.05.18 |
|---|---|
| [2026.05.15] - TIL 31일차 SQL INDEX, PL/SQL, PROCEDURE, FUNCTION, TRIGGER 정리 (0) | 2026.05.18 |
| [2026.05.13] - TIL 29일차 SQL 제약조건, 테이블 생성, ALTER, INSERT 정리 (0) | 2026.05.18 |
| [2026.05.12] - TIL 28일차 SQL JOIN, 서브쿼리, 순위 함수, DDL과 제약조건 정리 (0) | 2026.05.18 |
| [2026.05.11] - TIL 27일차 SQL 날짜 함수, 변환 함수, 그룹 함수, JOIN 정리 (0) | 2026.05.18 |