SQL Cook: 제4 장 삽입/갱신/삭제

0

SQL_COOK

목록 보기
26/35
post-thumbnail

4.1장 새로운 레코드 삽입하기

Q. 테이블에 새 레코드를 삽입한다

A-1. 하나의 행 삽입하기

/* Oracle */
insert into dept (deptno, dname, loc)
values (50, 'PROGRAMMING', 'BALTIMORE')
>>
1 row(s) inserted.
  • 단일 행을 삽입하는 구문은 모든 데이터베이스 서버에서 동일하다.
  • 간단하게는 INSERT문에서 열 목록을 생략할 수 있다
    이 경우, 모든 열에 값을 삽입해야 하며 순서에 유의한다
    - NULL 허용 여부 또한 체크한다

A-2. 여러 개의 행 한 번에 삽입

/* MARIA */
insert into dept (deptno, dname, loc)
values (1, 'A', 'B'),
	   (2, 'B', 'C')
       

4.2장 기본값 삽입하기

Q. 특정열에 대해 기본값을 사용하도록 테이블 정의하기

create table D (id integer default 0)

INSERT문의 값 목록에 0을 적지 않고도 0이 삽입되게 하려고 한다.

A. 모든 데이터베이스는 열에 대한 기본값 지정 키워드 DEFAULT를 지원한다

insert into 테이블명 values (기본값)

위 쿼리에서는 열 목록이 생략되었다. 모든 열에 대해 기본값을 지정하겠다는 뜻이다.
특정 열에 대해서만 기본값을 지정한다면

insert into 테이블명 (열이름) values (기본값)

case: MARIA

모든 열에 기본값이 지정되어 있는 경우라면, INSERT문에 비어 있는 값 목록을 지정할 수 있다.

insert into 테이블명 values ()
  • 기능은 존재하지만, 명확성 측면에서 이렇게 적는 현장이 있을까 싶다

Q. 기본값이 지정된 열과 기본값이 지정되지 않는 열이 혼합된 테이블일 때, 열에 대한 기본값 삽입하기

다음과 같은 테이블이 있다고 가정하겠다.

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'인 행을 생성한다.


4.3장 NULL로 기본값 오버라이딩하기

* 오버라이딩: 기존에 존재하는 객체 내용 수정하지 않은 채, 해당 기능을 변경하여 사용하는 것을 말한다.

Q. 기본값을 사용하는 열에 NULL값을 넣어서 기본값을 오러바이딩 하려고 한다

다음 쿼리의 테이블은 기본값을 사용하는 열을 가진다.

create table D (id integer default 0, foo varchar(10))

'ID' 칼럼에 NULL값을 넣으려 고한다.

A. INSERT문의 값 목록에 명시적으로 NULL을 지정한다

insert into d(id, foo) values(null, 'Brighten')
  • 일반적으로 열에 대한 값을 지정하지 않으려면, 해당 열을 INSERT문의 열 목록 및 값 목록에서 제외해야 한다

4. 4장 한 테이블에서 다른 테이블로 행 복사하기

Q. 말 그대로 쿼리를 사용하여 행을 복사하려 한다

복잡하든 단순하든, 결국은 한 테이블의 결과셋을 다른 테이블에 삽입하는 것이다.

'DEPT' 테이블에서 'DEPT_EAST' 테이블로 행을 복사하려고 한다.
이 때, 'DEPT_EAST' 테이블은 'DEPT' 테이블과 같은 구조(동일한 열 및 동일한 데이터 유형)이어야 한다.

A. 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절을 제외하면 되겠다

정리

초반부는 간단한 기능만 나오고 있다.
여러 값을 한 번에 넣는 건 좀 꿀같이 느껴진다...

0개의 댓글