SQL 종류 | 명령문 |
---|---|
Data Manipulation Language (DML:데이터 조작어) | INSERT(데이터 입력) UPDATE(데이터 수정) DELETE(데이터 삭제) MEGRE(데이터 병합) |
Transaction Control Language (TCL:트랜잭션 처리어) | COMMIT(트랜잭션 작업 반영) ROLLBACK(트랜잭션 작업 취소) SAVEPOINT(트랜잭션내 책갈피 설정) |
--문법
INSERT INTO 테이블명 [(컬럼명, 컬럼명2, ...)]
VALUES(값, 값2, ...);
INSERT INTO dept(deptno, dname)
VALUES(70, '인사');
INSERT INTO dept(deptno, dname, loc)
VALUES(80, '인사', NULL);
INSERT INTO dept(deptno, dname, loc)
VALUES (11, '인사');
INSERT INTO dept
VALUES(12, '인사');
INSERT INTO (deptno, dname, loc)
VALUES('개발', 13, '인사');
INSERT INTO dept(deptno, dname, loc)
VALUES('개발', 14, 인사);
-- 문법
INSERT INTO 테이블명[(컬럼명, 컬렴명2 ...)]
Subquery;
CREATE TABLE 테이블명 [(컬럼명, 컬럼명2)]
AS
Subquery;
-- 테이블 제약조건은 가져오지 않는다.
CREATE TABLE mydept
AS
SELECT * FROM dept
WHERE 1 = 2;
INSERT INTO mydept
SELECT deptno, dname, loc
FROM dept;
-- 문법
INSERT ALL
[WHEN 조건식 THEN]
INTO 테이블1 VALUES (컬럼명, 컬럼명2, .... , 컬럼명n)
[WHEN 조건식2 THEN]
INTO 테이블2 VALUES (컬럼명, 컬럼명2, .... , 컬럼명n)
Subquery;
INSERT ALL
INTO sal_history VALUES (empno, hiredate, sal)
INTO mgr_history VALUES (empno, mgr, sal)
SELECT empno, hiredate, sal, mgr
FROM emp;
INSERT ALL
WHEN sal < 2500 THEN
INTO sal_history VALUES(empno, hiredate, sal)
WHEN sal > 2500 THEN
INTO mgr_history VALUES(empno, mgr, sal)
SELECT empno, hiredate, sal, mgr
FROM emp;
INSERT ALL
WHEN sal > 3000 THEN
INTO sal_history VALUES (empno, ename, hiredate, sal)
WHEN mgr = 7698 THEN
INTO mgr_history VALUES (empno, ename, mgr)
SELECT empno, ename, hiredate, sal, mgr
FROM emp;
조건 INSERT FIRST문
- WHEN절에 지정된 조건이 중복되는 경우에 처음 조건에 일치하는 테이블에만 저장되고 이후에는 조건이 일치해도 테이블에 저장되지 않는 방법이다.
INSERT FIRST WHEN sal = 800 THEN INTO sal_history VALUES(empno, hiredate, sal) WHEN sal < 2500 THEN INTO mgr_history VALUES(empno, mgr, sal) ELSE INTO test_history VALUES(empno, sal) SELECT empno, hiredate, sal, mgr FROM emp;
- 월급이 800이면 첫 번째 WHEN 절에 지정된 조건도 만족하고 두 번째 WHEN절에 지정된 조건도 만족하게 된다. 첫 번째 조건에 만족하면 이후에는 조건이 일치해도 테이블에 저장하지 않도록 하는 방법이 INSERT FIRST문이다.
UPDATE 테이블명
SET 컬럼명=변경할값[, 컬럼명1=변경할값]
[WHERE 조건식];
UPDATE dept
SET dname= '경리과', loc = '부산'
WHERE deptno = 90;
UPDATE dept
SET dname = '경리과'
WHERE dname LIKE '인사%';
UPDATE copy_dept
SET dname = (SELECT dname
FROM dept
WHERE deptno = 10),
loc = (SELECT loc
FROM dept
WHERE deptno = 20)
WHERE deptno = 60;
--문법
DELETE FROM 테이블명
[WHERE 조건식];
DELETE FROM dept
WHERE deptno =91;
DELETE FROM emp
WHERE deptno IN (
SELECT deptno
FROM dept
WHERE dname = '경리과');
MERGE INTO 테이블1 별칭
USING (테이블명2|뷰|서브쿼리) 별칭
ON (조인조건)
WHEN MATCHED THEN
UPDATE SET
컬럼명 = 값,
컬럼명1 = 값1
[WHERE 조건식]
[DELETE WHERE 조건식]
WHEN NOT MATCHED THEN
INSERT (컬럼 목록)
VALUES (값 목록)
[WHERE 조건식];
MERGE INTO p_total total
USING pt_01 p01
ON (total.판매번호 = p01.판매번호)
WHEN MATCHED THEN
UPDATE SET total.제품번호 = p01.제품번호
WHEN NOT MATCHED THEN
INSERT VALUES (p01.판매번호, p01.제품번호, p01.수량, p01.금액);
MERGE INTO p_total total
USING pt_02 p02
ON (total.판매번호 = p02.판매번호)
WHEN MATCHED THEN
UPDATE SET total.제품번호 = p02.제품번호
WHEN NOT MATCHED THEN
INSERT VALUES (p02.판매번호, p02.제품번호, p02.수량, p02.금액);
테이블을 생성하거나 수정, 삭제하는 명령어인 DDL(Data Definition Language)문은 자동으로 COMMIT된다.