본문 바로가기

Learning/SQL

데이터 조작어(DML) - INSERT 데이터의 입력

<데이터 조작어(DML)-데이터의 입력>

 

  • DML: 데이터베이스에 데이터를 입력, 수정, 삭제하는 명령어

 


 

  • INSERT: 테이블에 새로운 행을 입력하는 명령어

 

  • 실행전 열과 제약조건을 확인 (DESC+테이블. DESC:describe의 약자)
1
 DESC departments;
cs

 

 

 

  • 전체 열을 다 입력하는 방법 1

1
2
3
INSERT INTO departments (department_id,
department_name, manager_id, location_id)
VALUES (71'개발부 1'1001700);
cs

 

 

 

  • 입력되었는지 확인

1
2
SELECT *
FROM departments;
cs

 

 

  • COMMIT으로 저장

1
COMMIT;
cs

 

  


 

  • 열의 이름이 없는 경우 전체 열을 다 입력해야 함

1
2
INSERT INTO departments
VALUES (72'개발부 2'1001700);
cs

 

 


 

  • ROLLBACK;

1
ROLLBACK;
cs

 

 


 

 

  • 열의 순서를 바꿀경우

1
2
3
4
INSERT INTO departments (department_name,
manager_id, location_id, department_id)
VALUES ('개발부 3'100170073);
COMMIT;
cs

 

 

  • 자동으로 널값 입력

1
2
3
4
INSERT INTO departments (department_id, department_name)
VALUES (74'개발부4');
COMMIT;
DESC departments;
cs

 


 

 

  • sysdate 현재날짜 입력

1
2
3
4
5
INSERT INTO employees (employee_id, first_name,
last_name, email,hire_date,job_id)
VALUES (1'홍''길동''hong@naver.com', sysdate,'IT_PROG');
COMMIT;
DESC employees;
cs

 

 

  • 날짜 입력하기

1
2
3
4
5
INSERT INTO employees (employee_id, first_name,
last_name, email,hire_date,job_id)
VALUES (2'강''길동''kang@naver.com',
    TO_DATE('2020-04-05','YYYY-MM-DD'),'IT_PROG');
COMMIT;
cs

 

 

 


 

  • 사용자로부터 입력받기

1
2
3
INSERT INTO departments (department_id, department_name)
VALUES (&id, '&name'); --75, 개발부 5
COMMIT;
cs

 

 

 

 

 


 

  • 테이블 만들기

1
2
3
4
CREATE TABLE XX_EMP (
    EMPNO number,
    ENAME varchar2(100),
    SAL number );
cs

 


 

  • 테이블 전체를 카피해서 입력하는 방법

1
2
3
INSERT INTO XX_EMP (EMPNO, ENAME, SAL)
SELECT employee_id, first_name, salary
FROM employees;
cs

 

 

 

 

 


 

 

  • INSERT 실행중에 에러가 나는 경우

 

1. 기본키에 이미 있는 (중복된) 값을 입력할 경우

1
2
3
INSERT INTO departments (department_id, department_name,
                        manager_id, location_id)
VALUES (10'개발부 10'1001700);
cs

 

 

 


 

 

 

2. FK(외래키)에 참조되지 않은 값을 입력 (departments테이블은 location테이블을 참조하기 때문에 location_id는 1000부터 3200사이에만 들어가야함)

1
2
3
INSERT INTO departments (department_id, department_name,
                        manager_id, location_id)
VALUES (5'개발부 5'1001);
cs

 

 

 


 

 

3. 데이터의 종류가 틀릴때

1
2
3
INSERT INTO departments (department_id, department_name,
                        manager_id, location_id)
VALUES ('10''개발부 5'100'D1');
cs

 

 

 


 

 

4. 데이터의 사이즈가 맞지 않을때

 

INSERT INTO departments (department_id, department_name,

                        manager_id, location_id)

VALUES ('10', '개발부 5 개발부 5 개발부 5 개발부 5 개발부 5 개발부 5',

100, 'D1');

 

1
2
3
4
INSERT INTO departments (department_id, department_name,
                        manager_id, location_id)
VALUES ('10''개발부 5 개발부 5 개발부 5 개발부 5 개발부 5 개발부 5',
100'D1');
cs

 

 


 

 

  • 테이블을 카피하기 

1
2
3
CREATE TABLE COPY_DEPT
AS
SELECT * FROM departments;
cs

 

departments 테이블을 카피한 COPY_DEPT 테이블이 생성됨

 

 

 


 

 

<INSERT 예제>

 

  • departments 테이블에 department_id, department_name, manager_id가 200, location_id가 1700인 행을 3개 입력

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO departments (department_id, department_name,
                         manager_id, location_id)
VALUES (271'Sample Dept 1'2001700);
 
INSERT INTO departments (department_id, department_name,
                         manager_id, location_id)
VALUES (272'Sample Dept 2'2001700);
 
INSERT INTO departments (department_id, department_name,
                         manager_id, location_id)
VALUES (273'Sample Dept 3'2001700);
cs

 

 

 


 

  • copy_departments 테이블을 만든 후 SELECT 문을 이용하여 departments 테이블 내용을 전부 입력

1
2
3
4
5
6
7
CREATE TABLE copy_departments (department_id number(4,0),
                               department_name varchar2 (30 byte),
                               manager_id number (6,0),
                               location_id number (4,0));
 
INSERT INTO copy_departments
SELECT * FROM departments;
cs