SQL - scott(개념 + 실습) DML- insert
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(롤백) : 지금 반영된걸 취소