Programming/SQL

[SQL] 데이터 삽입과 변경 - insert / update / delete

reeme 2020. 12. 17. 11:16

 

insert

테이블에 데이터를 추가하기위한 데이터 조작어

 

단일행 입력

INSERT INTO 테이블명 [( 속성명,…, 속성명 )] VALUES ( 값,…, 값 )

테이블명에 명시한 속성에 VALUES 절에 지정한 값을 입력함

테이블명에 속성을 명시하지 않으면 테이블 생성시 정의한 컬럼 순서와 동일한 순서로 입력

예) EMPTEST 테이블에 사원 정보( 50, “홍길동”, “staff”, NULL, 2012 -10-01, 500, 30, 10 ) 삽입

테이블 만들기

create table emptest(
eno int,
ename varchar(20),
job varchar(20),
manager int,
hiredate datetime,
salary int,
commission int,
dno int
);

튜플 삽입

insert into emptest values(50,'홍길동','staff',null,'2012-10-01',500,30,10);

 

null 입력

-- 데이터를 입력하는 시점에서 해당 속성값을 모르거나 , 미확정일 때 사용 
-- NOT NULL 조건이 지정된 경우 입력이 불가능

입력하는 방법에는 두가지가 있음

1. 속성명을 입력하지 않고 null값도 입력하지않는 방법 (묵시적 방법)

예) emptest라는 테이블에 manager속성에 null값을 줄것

create table emptest(
eno int,
ename varchar(20),
job varchar(20),
manager int,
hiredate datetime,
salary int,
commission int,
dno int
);

튜플 삽입 (속성값에 manager를 넣지않고 값에 'null'도 빼줌)  

insert into emptest(eno,ename,job,hiredate,salary,commission,dno) 
values(50,'홍길동','staff','2012-10-01',500,30,10);

2. 속성명을 입력하고 null값도 입력하는 방법 (명시적 방법)

예) 위 테이블(emptest)에 manager속성값을 null을 줄것

튜플 삽입 

insert into emptest(eno,ename,job,manager,hiredate,salary,commission,dno) 
values(50,'홍길동','staff',null,'2012-10-01',500,30,10);

 

서브쿼리를 이용한 데이터 삽입

서브 쿼리의 결과를 테이블에 삽입함
한번에 여러 튜플을 넣을 수 있음
INSERT INTO 테이블명 [서브쿼리] 

서브쿼리의 결과 집합은 INSERT 명령문에 지정된 칼럼 개수와 데이터 타입이 일치해야 함

예) 사원 테이블에서 부서번호 30 인 사원 들을 EMPTEST 에 삽입

insert into emptest select * from employee where eno=30;

 


update

: 테이블에 저장된 데이터를 수정하기 위한 데이터 조작어

UPDATE 테이블명 SET column = 값 , ... [WHERE 조건 ]

예) EMPTEST 에 있는 모든 사원의 봉급 10% 인상

update emptest set salary = salary*1.1;

point) WHERE 절이 생략되면 테이블의 모든 행이 수정됨

 

예) EMPTEST 에 있는 사원들 중 30 번 부서에 속한 사원들의 직급 모두 staff 로 변경

update emptest set job='staff' where dno=30;

 

서브 쿼리를 이용한 데이터 수정

-- UPDATE 문의 SET 절에서 서브 쿼리를 이용함

-- 다른 테이블에 저장된 데이터를 검색하여 한번에 여러 속성값을 수정할 수 있음

-- SET 절의 속성명은 서브 쿼리의 속성명과 달라도 됨

UPDATE table SET 속성 1 = (SELECT ~ FROM ~ WHERE~) [WHERE 조건 ]

예) EMPTEST 테이블에서 사원번호 50 번인 사원의 관리자번호
      사원테이블의 사원번호 101 번의 값으로 변경

update emptest set manager = (select manager from employee where eno=101) where eno=50;

 

복수 속성값 변경

하나 이상의 속성값 한번에 변경하기

SET 절에 ( 속성명 = 값 ), ( 속성명 = 값), … 으로 작성함

UPDATE table SET 속성 1 = 값 , 속성 2 = 값, … [WHERE 조건 ]

예) EMPTEST 에서 eno 가 51 인 튜플의 SALARY 를 300 으로 변경하고 COMMISSION 은 50 으로 변경

update emptest 
set salary=300, commission=50
where eno=50;

 


delete

테이블에 저장된 데이터를 삭제하기 위한 데이터 조작어

DELETE [FROM] 테이블 [WHERE 조건 ]

point ) WHERE절이 생략되면 테이블의 모든행을 삭제함

예) deptest 테이블에 있는 모든 정보를 삭제 

delete from deptest ;

예) 데이터 삭제 
emptest에서 급여가 400미만인 사원만 삭제

delete emptest where salary < 400;

 

서브쿼리를 이용한 데이터 삭제

-- WHERE 절에서 서브 쿼리를 이용함

-- 다른 테이블에 저장된 데이터를 검색하여 한번에 여러 행을 삭제함

-- WHERE 절의 속성명은 서브 쿼리의 속성명과 달라도 됨

예) 부서명이 Accounting 인 부서에 속한 사원 들을 EMPTEST 테이블에서 삭제 하기

delete emptest where dno=(select dno from department where dname='Accounting');