DML (Data Manipulation Language)
데이터 조작어라 부르는 명령어는 SELECT문으로 조회한 테이블에 데이터를 추가, 수정, 삭제할 때 사용하는 명령어로 이루어짐.
- 테이블 생성하기
-- DEPT테이블을 복사해서 DEPT_TEMP 테이블 만들기 (백업 목적)
CREATE TABLE DEPT_TEMP
AS SELECT * FROM DEPT;
-- DEPT_TEMP 테이블 전체 열 조회하기
SELECT * FROM DEPT_TEMP;
- 테이블 삭제하고 다시 만들기
-- 테이블을 잘못 만들었을 때,
-- 기본 형식
-- DROP TABLE 테이블 이름;
-- 테이블을 삭제하고
DROP TABLE DEPT_TEMP;
-- 다시 생성
CREATE TABLE DEPT_TEMP
AS SELECT * FROM DEPT;
테이블에 데이터를 추가하는 INSERT문
특정 테이블에 데이터를 새로 추가할 때 INSERT문을 사용.
INSERT INTO절 뒤에 데이터를 추가할 테이블 이름을 쓰고 해당 테이블의 열을 소괄호로 묶어 지정한 후 VALUES절에는 지정한 열에 입력할 데이터를 작성.
-- 기본 형식
INSERT INTO 테이블 이름 [(열1, 열2, ..., 열n)]
VALUES (열1에 들어갈 데이터, 열2에 들어갈 데이터, ... 열n에 들어갈 데이터);
-- DEPT_TEMP 테이블에 데이터 추가하기
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (50, 'DATABASE', 'SEOUL');
--확인
SELECT * FROM DEPT_TEMP;
| 키워드 | 필수 요소 | 선택 요소 | 설명 |
| INSERT INTO | 테이블 이름 | 테이블의 열 | 새로운 데이터를 입력할 대상 테이블과 열을 지정 |
| VALUES | 입력할 데이터 | INSERT INTO에서 지정한 테이블의 열 순서와 자료형에 맞는 데이터 입력 |
** 주의점: INSERT문에 지정한 열 개수와 각 열에 입력할 데이터 개수가 일치하지 않거나 자료형이 맞지 않을 때 또는 열 길이를 초과하는 데이터를 지정했을 때 INSERT문 오류가 발생함.
INSERT문에 열 지정을 생략할 때
INSERT문에 지정하는 열은 생략할 수도 있는데, 열 지정을 생략하면 해당 테이블을 만들 때 설정한 열 순서대로 모두 나열되었다고 가정하고 데이터를 작성. 이 또한 테이블을 구성하는 열 개수나 자료형과 길이는 반드시 맞춰야함.
-- INSERT문에 열을 지정하지 않고 데이터 추가하기
INSERT INTO DEPT_TEMP
VALUES (60, 'NETWORK', 'BUSAN');
--확인
SELECT * FROM DEPT_TEMP;
테이블에 NULL데이터 입력하기
INSERT문으로 새로운 데이터를 추가할 때 특정 열에 들어갈 데이터가 확정되지 않았거나 굳이 넣을 필요가 없는 데이터일 때는 NULL을 사용하며, NULL을 INSERT문에 지정하는 방법에는 명시적을 입력하는 방식과 대상 열을 생략하여 암시적으로 NULL이 입력되도록 유도하는 방식이 있음.
-- NULL의 명시적 입력
-- NULL을 지정하여 입력하기
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES(70 ,'WEB',NULL);
-- 확인
SELECT * FROM DEPT_TEMP;
-- 빈 공백 문자열로 NULL입력하기
INSERT INTO DEPT_TEMP (DEPTNO, DNAME ,LOC)
VALUES(80 ,'MOBILE','');
--확인
SELECT * FROM DEPT_TEMP;
** 실무에선 보통 NULL이란 단어를 정확히 입력하는 방식을 선호
-- NULL의 암시적 입력
-- 열 데이터를 넣지 않는 방식으로 NULL 데이터 입력하기
INSERT INTO DEPT_TEMP (DEPTNO, LOC)
VALUES(90 , 'INCHEON');
-- 확인
SELECT * FROM DEPT_TEMP;
-- 아무것도 기입하지 않으면 NULL
테이블에 날짜 데이터 입력하기
-- EMP 테이블을 복사해서 EMP_TEMP 테이블 만들기
CREATE TABLE EMP_TEMP
AS SELECT *
FROM EMP
WHERE 1 <> 1;
SELECT * FROM EMP_TEMP;
- WHERE절의 조건이 1<>1 이면, 각 행을 조건식에 대입한 결괏값은 항상 false가 되어 행을 입력하지 않음.
- 위에 사용한 create 명령어는 EMP 테이블과 열 구조는 같지만 데이터는 복사하고 싶지 않을 때 종종 사용.
-- INSERT문으로 날짜 데이터 입력하기(날짜 사이에 / 입력)
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01',
5000, 1000, 10);
SELECT * FROM EMP_TEMP;
-- INSERT문으로 날짜 데이터 입력하기(날짜 사이에 - 입력)
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (1111, '성춘향', 'MANAGER', 9999, '2001-01-05', 4000,NULL, 20);
SELECT * FROM EMP_TEMP;
-- TO_DATE 함수를 사용하여 날짜 데이터 입력하기
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (2111, '이순신', 'MANAGER', 9999,
TO_DATE('07/01/2001', 'DD/MM/YYYY'),
4000, NULL, 20);
SELECT * FROM EMP TEMP;
서브쿼리를 사용하여 한 번에 여러 데이터 추가하기
-- 서브쿼리를 사용하여 한 번에 여러 데이터 추가하기 (백업 목적)
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND S.GRADE = 1;
SELECT * FROM EMP_TEMP;
** 주의 점
VALUES절은 사용하지 않는다.
데이터를 추가할 테이블과 서브쿼리의 열 개수가 일치해야 한다.
데이터를 추가할 테이블과 서브쿼리의 자료형이 일치해야 한다.
INSERT 대상이 되는 테이블의 열 개수와 자료형만 맞춰 준다면 INSERT문에서 사용하는 서브쿼리는 여러개의 테이블을 조인한 결과일지라도 열 이름에 상관없이 데이터를 추가할 수 있음.
다양한 방식의 INSERT문과 MERGE문
ALL, FIRST와 같은 옵션을 사용하여 한 번에 여러 테이블을 대상으로 데이터를 추가하거나 특정 조건에 따라 다른 테이블에 데이터를 추가하는 등 다양한 방식을 사용할 수 있음.
MERGE문
MERGE문을 사용하면 열 구조가 같은 여러 테이블 또는 서브쿼리의 결과 데이터를 한 테이블에 병합하여 추가할 수도 있음.
'SQL' 카테고리의 다른 글
| [SQL] 데이터를 추가, 수정, 삭제하는 데이터 조작어_3 (0) | 2025.12.01 |
|---|---|
| [SQL] 데이터를 추가, 수정, 삭제하는 데이터 조작어_2 (0) | 2025.12.01 |
| [SQL] SQL 속 또 다른 SQL, 서브쿼리_3 (0) | 2025.12.01 |
| [SQL] SQL 속 또 다른 SQL, 서브쿼리_2 (0) | 2025.12.01 |
| [SQL] SQL 속 또 다른 SQL, 서브쿼리_1 (0) | 2025.12.01 |