/* Oracle */
insert into dept (deptno, dname, loc)
values (50, 'PROGRAMMING', 'BALTIMORE')
>>
1 row(s) inserted.
INSERT
문에서 열 목록을 생략할 수 있다NULL
허용 여부 또한 체크한다/* MARIA */
insert into dept (deptno, dname, loc)
values (1, 'A', 'B'),
(2, 'B', 'C')
create table D (id integer default 0)
INSERT
문의 값 목록에 0을 적지 않고도 0이 삽입되게 하려고 한다.
DEFAULT
를 지원한다insert into 테이블명 values (기본값)
위 쿼리에서는 열 목록이 생략되었다. 모든 열에 대해 기본값을 지정하겠다는 뜻이다.
특정 열에 대해서만 기본값을 지정한다면
insert into 테이블명 (열이름) values (기본값)
모든 열에 기본값이 지정되어 있는 경우라면, INSERT
문에 비어 있는 값 목록을 지정할 수 있다.
insert into 테이블명 values ()
다음과 같은 테이블이 있다고 가정하겠다.
create table D (id integer default 0, foo varchar(10))
INSERT
문에 'id'에 대한 값은 제외하고, 'foo'에 대한 값만 넣어주면 'id'는 기본값으로 설정된다. 'foo'는 지정한 값으로 설정된다.
insert into D (name) values ('Bar')
위 쿼리는 'ID'가 0이고 'FOO'가 'BAR'인 행을 생성한다.
NULL
로 기본값 오버라이딩하기* 오버라이딩: 기존에 존재하는 객체 내용 수정하지 않은 채, 해당 기능을 변경하여 사용하는 것을 말한다.
NULL
값을 넣어서 기본값을 오러바이딩 하려고 한다다음 쿼리의 테이블은 기본값을 사용하는 열을 가진다.
create table D (id integer default 0, foo varchar(10))
'ID' 칼럼에 NULL
값을 넣으려 고한다.
INSERT
문의 값 목록에 명시적으로 NULL
을 지정한다insert into d(id, foo) values(null, 'Brighten')
INSERT
문의 열 목록 및 값 목록에서 제외해야 한다복잡하든 단순하든, 결국은 한 테이블의 결과셋을 다른 테이블에 삽입하는 것이다.
'DEPT' 테이블에서 'DEPT_EAST' 테이블로 행을 복사하려고 한다.
이 때, 'DEPT_EAST' 테이블은 'DEPT' 테이블과 같은 구조(동일한 열 및 동일한 데이터 유형)이어야 한다.
INSERT
문의 값 목록에 서브쿼리를 사용하여 원하는 데이터셋을 생성한다/* Oracle */
/* 직접 테이블을 생성해보았다 */
create table dept_east(
deptno number(2,0),
dname varchar2(14),
loc varchar2(13),
constraint fk_dept_east foreign key (deptno) references dept(deptno)
)
insert into dept_east (deptno, dname, loc)
/* 모든 열이 선택 되었으므로 values를 생략할 수 있다 */
select deptno, dname, loc
from dept
where loc in ('NEW YORK', 'BOSTON');
>>
2 row(s) inserted.
select * from dept_east;
>>
EPTNO DNAME LOC
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
2 rows selected.
WHERE
절을 제외하면 되겠다초반부는 간단한 기능만 나오고 있다.
여러 값을 한 번에 넣는 건 좀 꿀같이 느껴진다...