IT_developers

SQL - scott(개념 + 실습) DML- insert 본문

SQL

SQL - scott(개념 + 실습) DML- insert

developers developing 2022. 8. 16. 12:00

DML(데이터 조작어 : 삽입, 삭제, 수정) =>최종 반영을 할껀지 안할껀지 여부 

 

1) DEPT 테이블의 데이터를 복사하여 dept_temp 테이블 생성. 실습용 테이블 생성

CREATE TABLE dept_temp
    AS
        SELECT
            *
        FROM
            dept;

Ctrl + C => Ctrl + V 느낌

dept 조회를 해서 dept_temp 테이블을 생성하겠다.

 

※ insert(삽입) : insert into 테이블 명(열이름...) values(데이터...);

2) dept_temp에 deptno, dname, loc 값 넣기

INSERT INTO dept_temp (
    deptno,
    dname,
    loc
) VALUES (
    50,
    'DATABASE',
    'SEOUL'
);

문자, 날짜 데이터는 ' 홑따옴표 ' 사용

잘 들어갔는지 확인

SELECT
    *
FROM
    dept_temp;

 

2-1) 열 이름 생략하고 데이터 값 넣기

INSERT INTO dept_temp VALUES (
    60,
    'NETWORK',
    'BUSAN'
);

생략 가능 할 조건 : 칼럼의 개수와 순서에 맞춰서 넣어줘야함.

 

2-2)  열이름 없이 loc 제외하고 입력 (오류)

INSERT INTO dept_temp VALUES (
    60,
    'NETWORK'
    );

 

2-3) 열 이름 맞추고 loc 제외하고 입력시

INSERT INTO dept_temp (
    deptno,
    dname
) VALUES (
    70,
    'NETWORK'
);

열 이름 맞추고 값 생략시 null 로 자동입력됨

 

3) 오류 : value larger than specified precision allowed for this column

insert into dept_temp
values(800, 'NETWORK','BUSAN');

테이블을 만들 때 데이터를 어떻게 받을꺼야라고 명시하게 되어있음
2자리로 했는데 3자리를 넣을꺼야 라고 하면 오류, 형식과 규칙에 맞춰서 입력

 

4) null 값을 직접 명시

INSERT INTO dept_temp VALUES (
    80,
    'NETWORK',
    NULL
);

 

5) emp 테이블의 구조만 복사해서 새로운 테이블 생성. 데이터는 가지고 오지 않음.

CREATE TABLE emp_temp
    AS
        SELECT
            *
        FROM
            emp
        WHERE
            1 <> 1;

테이블 생성 완료
데이터 타입 확인

 

6) emp_temp 테이블에 값 넣어주기(홍길동)

INSERT INTO emp_temp (
    empno,
    ename,
    job,
    mgr,
    hiredate,
    sal,
    comm,
    deptno
) VALUES (
    9999,
    '홍길동',
    'MANAGER',
    NULL,
    '2021-01-05',
    5000,
    1000,
    10
);

칼럼명을 순서대로 써줄 필요는 없지만 칼럼명 순서와 값의 순서는 동일시 해줘야함.

 

7-1) emp_temp 테이블에 값 넣어주기(성춘향)

INSERT INTO emp_temp (
    empno,
    ename,
    job,
    mgr,
    hiredate,
    sal,
    comm,
    deptno
) VALUES (
    8888,
    '성춘향',
    'MANAGER',
    9999,
    sysdate,
    4000,
    500,
    20
);

날짜데이터에 sysdatd를 사용하면 오늘 날짜가 입력됨.

 

8) emp테이블의 내용을 사원 중 부서번호가 20번인 사원들만 emp_temp 사입

INSERT INTO emp_temp (
    empno,
    ename,
    job,
    mgr,
    hiredate,
    sal,
    comm,
    deptno
)
    SELECT
        empno,
        ename,
        job,
        mgr,
        hiredate,
        sal,
        comm,
        deptno
    FROM
        emp
    WHERE
        deptno = 20;

서브쿼리를 사용 할 수 있음.

 

9) emp 테이블에서 salgrade 테이블을 참조하여 등급이 1인 사원을 emp_temp 추가

INSERT INTO emp_temp (
    empno,
    ename,
    job,
    mgr,
    hiredate,
    sal,
    comm,
    deptno
)
    SELECT
        empno,
        ename,
        job,
        mgr,
        hiredate,
        sal,
        comm,
        deptno
    FROM
             emp e
        JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
    WHERE
        s.grade = 1;

 

 

 

프로그램 종료시 뜨는 최종 반영 여부 확인

commit(커밋) : 데이터베이스에 최종 반영

rollback(롤백) : 지금 반영된걸 취소

'SQL' 카테고리의 다른 글

SQL - scott(DML 실습)  (0) 2022.08.18
SQL - scott(개념 + 실습) DML- update, delete  (0) 2022.08.17
SQL - scott(개념 + 실습) 서브쿼리  (0) 2022.08.15
SQL - scott(개념 + 실습) JOIN  (0) 2022.08.14
SQL - scott(개념 + 실습)11  (0) 2022.08.13
Comments