[SQL] Oracle DML 정리 - INSERT / UPDATE / DELETE 기본 문법과 서브쿼리 활용
by 우와한개발자
[ INSERT : 행 삽입 ]
- 새로운 행 삽입하는 구문
1. 새로운 행 삽입
INSERT INTO 테이블명[(컬럼1, 컬럼2, ...)]
VALUES(값1, 값2,..);
- 오라클은 하나의 행씩만 삽입 가능
| 구분 | 설명 | 비고 |
| 컬럼 명시 O | 지정한 컬럼에만 값 삽입 | 안전하니 사용 지향 |
| 컬럼 명시 X | 테이블 전체 컬럼 순서대로 삽입 | 순서 틀리거나 값이 전체 컬럼의 갯수와 다르면 오류 발생 |
2. 서브쿼리로 행 복사
- VALUE 절 대신에 서브쿼리 이용해서 복사
- 서브쿼리의 컬럼 갯수와 INSERT의 컬럼 개수가 일치해야함
INSERT INTO 테이블명[(컬럼1, 컬럼2, ...)]
SELECT문;
-- 다른 테이블에서 복사
INSERT INTO emp_backup (empno, ename, job, salary)
SELECT empno, ename, job, salary
FROM emp;
-- 조건에 맞는 행만 복사
INSERT INTO emp_backup (empno, ename, job, salary)
SELECT empno, ename, job, salary
FROM emp
WHERE deptno = 10;
❓ DESC 키워드
- 테이블 구조 확인
- DESCRIBE 약어
DESC 테이블명;
[ UPDATE : 행 갱신 ]
- 기존 행의 데이터를 갱신하는 구문
UPDATE 테이블명
SET 컬럼명1 = 값1[,컬럼명2 = 값2, ...] -- 해당 컬럼에 넣을 값
[WHERE 조건];
1. 기존 행 갱신
- 조건에 맞는 행의 값을 직접 변경
-- 단일 컬럼 수정
UPDATE emp
SET salary = 4000
WHERE empno = 1001;
-- 여러 컬럼 수정
UPDATE emp
SET salary = 5000,
job = 'MANAGER'
WHERE empno = 1002;
2. 서브쿼리로 다중 컬럼 갱신
- 다른 테이블 또는 조회 결과를 이용해 값 변경
- 서브쿼리는 반드시 단일 행만 반환하고, SET과 SELECT 컬럼의 갯수가 일치해야 함
UPDATE emp e
SET (salary, job) = (
SELECT salary, job
FROM emp_temp t
WHERE t.empno = e.empno
)
WHERE e.empno = 1001;
[ DELETE : 행 제거 ]
- 기존 행을 제거하는 구문
- WHERE절 없이 실행하면 전체 데이터 삭제됨
DELETE [FROM] 테이블명
[WHERE 조건];
1. 기존 행 삭제
- 조건에 맞는 행 삭제
-- 특정 행 삭제
DELETE FROM emp
WHERE empno = 1001;
-- 조건 삭제
DELETE FROM emp
WHERE salary < 2000;
2. 서브쿼리로 행 삭제
- 다른 조건을 기준으로 삭제
-- 특정 부서 사원 삭제
DELETE FROM emp
WHERE deptno IN (
SELECT deptno
FROM dept
WHERE location = 'SEOUL'
);
3. 테이블에 저장된 중복 행 삭제
- 동일한 데이터 중 1개만 남기고 나머지 삭제
DELETE FROM 테이블명
WHERE ROWID IN (
SELECT rid
FROM (
SELECT ROWID rid,
ROW_NUMBER() OVER (PARTITION BY 컬럼1, 컬럼2, 컬럼3 ORDER BY ROWID) rn
FROM 테이블명
)
WHERE rn > 1
);
| 단계 | 설명 |
| PARTITION BY | 중복 기준 컬럼 그룹화 |
| ROW_NUMBER() | 그룹 내 순번 부여 |
| rn > 1 | 중복 데이터만 선택 |
| ROWID | 실제 행 식별해서 삭제 |
'데이터베이스 > SQL' 카테고리의 다른 글
블로그의 정보
우와한개발자 님의 블로그
우와한개발자