1. 기본 사용법
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20)
INTO 절의 컬럼 개수와 데이터 타입이 VALUES 절의 컬럼 개수와 데이터 타입이 동일해야 한다.
VALUES 절에 테이블의 모든 컬럼이 나열되어 있다면, INTO 절의 컬럼을 생략할 수 있지만, INTO 절에 입력할 컬럼을 모두 나열하는 방식을 권장한다.
2. 기본 사용법 (컬럼명 생략)
INSERT INTO emp
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20)
VALUES 절에 입력할 테이블의 모든 컬럼이 나열되어 있다면 INTO 절의 컬럼은 생각해도 된다. 실무에서 쿼리를 작설할 때는 꼭 INTO 절에 컬럼을 모두 작성할 것을 권장한다. 테이블에 컬럼이 추가되거나 삭제되었을 경우 기존 쿼리문에 오류가 발생할 수 있기 때문이다.
3. 일련번호 채번 후 INSERT (MAX + 1)
INSERT INTO emp ( empno
, ename
, job
, mgr
, hiredate
, sal
, comm
, deptno
)
VALUES ( (SELECT NVL(MAX(empno), 0) + 1 FROM emp)
, 'SCOTT'
, 'ANALYST'
, 7566
, TO_DATE('1987-04-19', 'YYYY-MM-DD')
, 3000
, NULL
, 20
)
VALUES 절에서 서브 쿼리를 사용하여 일련번호를 채번 후 INSERT를 수행할 수 있다. 오라클은 컬럼에 자동 증가 옵션이 없기 때문에, 시퀀스 또는 MAX + 1 같은 방법을 활용하여 일련번호를 생성한다.
4. 서브쿼리 INSERT (SELECT INSERT) ★
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT 8000
, a.ename
, a.job
, a.mgr
, a.hiredate
, a.sal
, a.comm
, a.deptno
FROM emp a
WHERE a.empno = 7788
VALUES 절 대신에 서브 쿼리를 사용하여 여러 건의 데이터를 INSERT 하거나, 기본 값을 조회 후 파라미터로 전달된 값과 합쳐서 INSERT를 할 때 사용한다.
5. INSERT ALL, FIRST ★
INSERT ALL
WHEN sal >= 3000 THEN
INTO emp_sal1 VALUES (empno, ename, sal)
WHEN sal >= 2000 THEN
INTO emp_sal2 VALUES (empno, ename, sal)
ELSE
INTO emp_sal3 VALUES (empno, ename, sal)
SELECT a.empno
, a.ename
, a.sal
FROM emp a
WHERE a.empno = 7788
INSERT ALL을 사용하면 한 번에 여러 개의 테이블에 INSERT를 할 수 있다.
☆ 조건(WHEN~THEN)에 만족하면 해당 테이블에 INSERT 한다.
sal이 3000인 경우 emp_sql1, emp_sal2 두개의 테이블에 INSERT한다.
INSERT FIRST
WHEN sal >= 3000 THEN
INTO emp_sal1 VALUES (empno, ename, sal)
WHEN sal >= 2000 THEN
INTO emp_sal2 VALUES (empno, ename, sal)
ELSE
INTO emp_sal3 VALUES (empno, ename, sal)
SELECT a.empno
, a.ename
, a.sal
FROM emp a
WHERE a.empno = 7788
☆ INSERT FIRST는 조건에 만족하는 첫 번째 WHEN~THEN의 테이블에만 INSERT 한다.
sal이 3000인 경우 emp_sql1 테이블에 INSERT한다.
(단, INSERT ALL, FIRST는 반드시 서브 쿼리와 함께 사용해야 한다)
※ DAUL
DEFINE empno = 8800;
DEFINE ename = '''SCOTT''';
DEFINE sal = 3000;
INSERT ALL
WHEN &sal >= 3000 THEN
INTO emp_sal1 VALUES (&empno, &ename, &sal)
WHEN &sal >= 2000 THEN
INTO emp_sal2 VALUES (&empno, &ename, &sal)
ELSE
INTO emp_sal3 VALUES (&empno, &ename, &sal)
SELECT *
FROM dual
서브 쿼리를 사용하지 않을 경우 dual을 사용하면 된다.
파라미터를 전달된 값으로 조건을 만들고 INSERT 하면 된다.
참고 : https://gent.tistory.com/408?category=360526
'자격증 > SQLP' 카테고리의 다른 글
SQL INDEX & INDEX HINT (0) | 2022.10.07 |
---|---|
3. Update 심화 (1) | 2022.10.06 |
NULL은 IS NULL IS NOT NULL 로만 연산이 가능 (0) | 2022.10.05 |
옵티마이저(Optimizer) & 프로시저(Procedure) 자료 (0) | 2022.10.04 |
1. 카티션 제곱(cartesian product)이란? (0) | 2022.09.28 |
댓글