▶ INSERT
- 테이블에 새로운 "행"을 추가하는 구문
■ INSERT INTO 계열
1)
INSERT INTO 테이블명 VALUES(값1, 값2, 값3, ...);
- 해당 테이블에 존재하는 "모든" 컬럼에 대해 추가하고자하는 값을 내가 직접 제시해서 "한 행"을 INSERT하고자할 때 쓰는 표현법
주의사항
- 컬럼의 순서, 자료형, 개수를 맞춰서 VALUES 괄호 안에 값을 나열해야 한다.
- 부족하게 제시하면 NOT ENOUGH VALUE 오류가 발생한다.
- 더 많이 제시하면 TOO MANY VALUE 오류가 발생한다.
ex)
INSERT INTO EMPLOYEE
VALUES (900, '홍길동', '123456-1234567', 'AABBCC@naver.com', 01012345678, 'D1', 'J7', 'S6', 1800000, 0.9, 200, SYSDATE, NULL, DEFAULT);
2)
INSERT INTO 테이블명(컬럼명1, 컬럼명2, 컬럼명3, ...)
VALUES(값1, 값2, 값3, ...);
- 해당 테이블에 "특정"컬럼만 선택해서 그 컬럼에 추가할 값만 제시하고자할 때 사용한다.
- 한 행 단위로 추가되기 때문에 선택안된 컬럼은 NULL값이 들어간다.(단, DEFAULT설정이 되어있을 경우 그 값이 들어간다.)
주의사항
- NOT NULL 제약조건이 걸려있는 컬럼은 반드시 선택해서 직접 값을 제시해야한다.
- 단, DEFAULT설정이 되어있다면 선택은 안해도 된다.
ex)
INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, DEPT_CODE, JOB_CODE, SAL_LEVEL)
VALUES (901, '이순신', '123456-1234567', 'D1', 'J6', 'S5');
3)
INSERT INTO 테이블명 (서브쿼리);
- VALUES()로 값을 직접 기입하는 것이 아니라 서브쿼리로 조회한 결과값을 통째로 INSERT하는 구문
- 즉, 여러행을 한번에 INSERT 할 수 있다.
ex)
-- 전체 사원들의 사번, 이름, 부서명을 조회한 결과를 EMP_01 테이블에 통째로 추가
INSERT INTO EMP_01(
SELECT EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
);
■ INSERT INTO 계열
- 두 개 이상의 테이블에 각각 INSERT 할 때 사용한다.
- 조건 : 그 때 사용되는 서브쿼리가 동일해야 한다.
1)
INSERT ALL
INTO 테이블명1 VALUES(컬럼명, 컬럼명, ...)
INTO 테이블명2 VALUES(컬럼명, 컬럼명, ...)
서브쿼리;
2)
INSERT ALL
WHEN 조건1 THEN
INTO 테이블명1 VALUES(컬럼명, 컬럼명, ...)
WHEN 조건2 THEN
INTO 테이블명2 VALUES(컬럼명, 컬럼명, ...)
서브쿼리;
- 조건에 맞는 값들만 넣을 때 사용한다.
▶ UPDATE
- 테이블에 기록된 기존의 데이터를 수정하는 구문이다.
[표현법]
UPDATE 테이블명
SET 컬럼명 = 바꿀값,
컬럼명 = 바꿀값,
...
WHERE 조건; -- WHERE절은 생략이 가능한데 생략시 모든 테이블의 모든 행이 바뀌게 된다.
- 여러개의 컬럼값을 동시변경 가능하고 이때 AND가 아니라 , 로 나열한다.
- WHERE절은 생략이 가능한데 생략시 모든 테이블의 모든 행이 바뀌게 된다.
■ ROLLBACK
- 변경사항에 대해서 되돌리는 명령어
- 롤백시 마지막 커밋시점으로 돌아간다.
▶ UPDATE시 서브쿼리 사용
- 서브쿼리를 수행한 결과값으로 기존의 값으로부터 변경할 때 사용한다.
- CREATE시에 서브쿼리 사용시 : 서브쿼리 수행한 결과로 테이블을 만들겠다.
- INSERT시에 서브쿼리 사용시 : 서브쿼리 수행한 결과를 해당 테이블에 새롭게 삽입하겠다.
[표현법]
UPDATE 테이블명
SET 컬럼명 = (서브쿼리)
WHERE 조건;
▶ DELETE
- 테이블에 기록된 데이터를 "행"단위로 삭제하는 구문
[표현법]
DELETE FROM 테이블명
WHERE 조건;
- WHERE절 생략 가능하다. 단, 생략시 해당 테이블의 모든 행이 삭제된다.
ex)
-- DEPARTMENT테이블로부터 DEPT_ID가 D1인 부서를 삭제
DELETE FROM DEPARTMENT
WHERE DEPT_ID = 'D1';
▶ TRUNCATE
- 테이블의 전체 행을 다 삭제할 때 사용하는 구문
- DELETE 구문보다 수행속도가 훨씬 빠르다.
- 별도의 조건을 제시할 수 없다.
- ROLLBACK이 불가능하다.(신중하게 삭제해야 한다.)
[표현법]
TRUNCATE TABLE 테이블명;
● DELETE 구문과 비교
TRUNCATE TABLE 테이블명; | DELETE FROM 테이블명; |
별도의 조건제시 불가(WHERE 안됨) | 특정조건 제시 가능(WHERE 가능) |
수행속도가 빠르다. | 수행속도가 느리다. |
ROLLBACK 불가능 | ROLLBACK 가능 |
'DB' 카테고리의 다른 글
DB (9) DCL(GRANT, REVOKE) (0) | 2023.06.13 |
---|---|
DB (8) DDL(ALTER, DROP) (0) | 2023.06.10 |
DB (6) DDL(CREATE) (0) | 2023.06.08 |
DB (5) DML(SELECT) SUBQUERY (0) | 2023.06.05 |
DB (4) DML(SELECT) JOIN (0) | 2023.06.04 |