DATABASE(oracleDB 11g)/SQL

[SQL]DML(Data Manupulation Language)의 기초

SEUNGSAMI 2019. 1. 31. 17:14

DML(Data Manupulation Language)의 기초





일단 간단한 테이블을 하나 생성하자.

1
2
3
4
5
6
create table test(
no number(3),
name varchar2(10),
tel varchar2(20),
address varchar2(100)
);
cs


INSERT : 테이블에 데이터를 추가

insert into 테이블명 [컬럼명] values [값]


다른 테이블에서 리턴되는 로우 수만큼 데이터를 테이블에 추가할 경우

insert into 테이블명 select [컬럼명] from [가져올 테이블명] {conditions}

1
2
3
4
insert into test (no, name, tel)
select employee_id, last_name, phone_number
from employees
where employee_id between 100 and 110;
cs

이 경우 employees 테이블의 employee_id, last_name, phone_number의 값이 각각 no, name, tel의 데이터 값으로 들어간다. 그리고 address의 값은 null 값으로 들어가진다.

현재 NOTNULL제약조건이 없으므로 들어가는데 문제가 없다.


1
2
insert into test values(200'Rose''1111-1111''Newyork');
insert into test(no, name, tel) values(201'Lebron''LA')

cs


또다른 경우를 보자


INSERT [ALL or FIRST]

WHEN 조건1 THEN INTO 테이블명1

WHEN 조건2 THEN INTO 테이블명2

...

ELSE INTO 테이블명

SELECT 구문;

위의 구문은 데이터를 추가할때 다른 테이블에서 조건에 맞춰 데이터를 추가하는 것이다


다음 예시를 참고하자.

1
2
3
4
5
insert all
when department_id = 80 then into emp80
when department_id = 90 then into emp90
when department_id = 100 then into emp100
select * from employees;
cs

all과 first의 차이는 교집합이 발생할 경우 all은 양쪽 조건 모두에 데이터를 넣고

first는 선행 조건에만 데이터를 넣는다.


컬럼의 속성수와 values 값에 나오는 갯수가 같아야 하며, 테이블의 모든 속성을 전부 입력하는 경우 속성명을 쓰지 않아도 된다.

컬럼의 범위 값에 맞춰서 추가 해야 한다.

속성명과 값을 생략하면 해당 속성에는 NULL값이 입력된다.

NULL값을 직접 지정하거나, '' 를 대신 사용하는 것이 가능하다.



UPDATE : 컬럼의 데이터를 수정

UPDATE 테이블명 SET 컬럼명=변경할 값 WHERE 조건


다음 예시를 참고하자.

1
2
3
4
5
6
7
8
9
10
11
12
update test set tel = '9999-9999';
 
update test set tel = '1111-1111' where no = 203;
 
update test set address = 'LA' where no = 203;
 
update test set no = 202, name = 'Curry' where no is null
 
alter table test add(logtime date);
 
update test set logtime = sysdate where no = 203;
update test set logtime = '01/22/2016' where no = 202;
cs



DELETE : 컬럼의 데이터를 삭제

DELETE FROM 테이블명 WHERE 조건

지워지는 것을 UNDO영역에 저장합니다.

+실수로 DROP TABLE을 하고, COMMIT까지 완료한 경우

1
2
3
4
5
6
7
8
SELECT * FROM USER_RECYCLEBIN ; 
--쓰레기통을 확인
 
SELECT * FROM "BIN$o459F/e9RmOzUa7Yk1pzMw==$0";
--쓰레기 확인
 
FLASHBACK TABLE EMP TO BEFORE DROP;
--드랍되기 이전으로 
cs



SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.