Edu/03. Language: SQL
DML(1): 삽입
Lacuna028
2021. 6. 3. 05:08
* 학습 내용
- DML 종류: select, insert, update, delete
- INSERT
1. SQL 종류
SQL 언어는 데이터 정의, 조작, 제어 등의 기능을 지원하며 크게 DDL, DML, DCL, TCL로 나뉠 수 있다.
종류 | 설명 | 명령어 종류 |
DDL (Data Definition Language) |
관계형 데이터베이스의 구조를 정의하는 언어 | create, alter, drop, rename |
DML (Data Manipulation Language) |
테이블에서 데이터를 입력, 수정, 삭제, 조회하는 언어. 줄여서 CRUD라고 부름 | insert, update, delete, select |
DCL (Data Control Language) |
데이터베이스 사용자에게 권한을 부여하거나 회수하는 언어 | grant, revoke |
TCL (Transaction Control Language) |
트랜잭션을 제어하는 명령어 | commit, rollback |
그 중 이번 파트에서는 DML에 대해서 알아보며 DML 중 select 명령어는 앞에서 충분히 다루었기 때문에 이후 진행은 insert, update, delete 등에 대해서 주로 다룰 예정이다.
2. 삽입: INSERT
1) 기본 문법
INSERT INTO 테이블명 (필드목록1, .. ) VALUES (값목록1, .. );
ex)
insert into tCity (name, area, popu, metro, region)
values ('서울', 605, 974, 'y', '경기') ;
필드목록을 생략했기 때문에 테이블의 목록 순서를 반드시 맞춰 입력해야 한다.
INSERT INTO 테이블명 VALUES (값목록1, 값목록2, 값목록3, ... );
ex)
insert into tCity
values ('서울', 605, 974, 'y', '경기') ;
여러개의 레코드를 한꺼번에 입력할 때
INSERT INTO 테이블명 VALUES (값목록1, 값목록2, 값목록3, ... ),
(값목록1, 값목록2, 값목록3, ... );
ex)
insert into tCity
values ('서울', 605, 974, 'y', '경기')
('부산', 765, 342, 'y', '경상')
('오산', 42, 21, 'n', '경기');
기존 테이블에 다른 테이블의 일부 행(조건에 맞는 행)을 복사하여 덮어씌우기.
기존 테이블과 원본 테이블의 필드 목록은 순서와 타입이 일치하거나 호환이 되어야 한다.
INSERT INTO 테이블명 (필드목록1, .. )
SELECT 필드목록 FROM 원본테이블 [WHERE 조건식];
ex)
insert into tStaff (name, depart, gender, joindate, grade, salary, score)
select name, 지원부서, gender, 오늘, '수습', 230, score*0.1
from tCandidate
where result = '합격';
insert all
into emp01 values (empno, ename, deptno)
into emp02 values (empno, ename, deptno)
select empno, ename, deptno from emp;
cf) 빈테이블만 존재하는 상태에서 원본 테이블에서 데이터 복사해와서 각각의 테이블에 넣기
insert all
into emp01 (empno, ename, deptno) values (11, '태익', 10)
into emp01 (empno, ename, deptno) values (22, '태영', 20)
select * from dual;
cf) 빈테이블만 존재하는 상태에서 신규 데이터 집어넣기.
select * from dual은 복사해올 테이블이 없으므로 구실을 맞추기 위해 임의 테이블인 dual에서 가져옴
insert all
when deptno=10 then
into emp01 values (empno, ename, deptno)
when deptno=20 or deptno=30 then
into emp02 values (empno, ename, deptno)
select empno, ename, deptno from emp;
cf) 빈테이블만 존재하는 상태에서 원본 테이블에서 조건에 맞는 데이터를 복사해와 원하는 테이블에 각각 넣기
emp테이블에서 empno, ename, deptno를 조회하여
deptno=10일때 emp01 테이블에 insert
deptno=20 또는 30일때 emp02 테이블에 insert하라
새로 생성한 테이블에서 원본 테이블 복사 붙여넣기
CREATE TABLE 테이블명
AS SELECT 필드목록 FROM 원본테이블 [WHERE 조건식];
CREATE TABLE 테이블명
AS SELECT 필드목록 FROM 원본테이블 WHERE 1=0;
cf) 'where 1=0'의 의미는 조건식이 false일 때 테이블 레코드만 복사해온다는 의미이고
'where 1=1'의 의미는 조건식이 True일 때 테이블 레코드 뿐만 아니라 필드 목록까지 복사해온다는 의미이다.
ex)
create table tSaff_8월20일
as select *
from tStaff ;