페이지

2012년 3월 26일 월요일

DML 정리(TCL제외)

DML-insert, update, delete
-sql의 CORE
TCL-commit, rollback

* INSERT
1. INSERT 형식: INSERT INTO VALUE
- INSERT INTO table (column1, column2, ...)
VALUES (value1, value2 ...);

- INSERT INTO table
VALUES (value1, value2 ...);
=value 값을 순서에 맞게 다 적어야함

예제)
insert into dep(dep_id, dep_name, man_id, loc_id)
values(75, 'dba',100, 1700);
- Null값을 넣는 방법
1) Implicit method: dep_id, dep_name, man_id, loc_id 가 있으나 생략됐기에 null이 들어감
INSERT INTO dep (dep_id, dep_name)
VALUES (30, 'Purchasing')

2) Explicit method: 직접 null을 명시해서 null값이 들어가게 함
INSERT INTO dep
VALUES (30, 'Purchasing', NULL, NULL);

2. INSERT를 이용한 테이블 복사
- 특정 부분만
 INSERT INTO sales_reps(id, name, sal, commission_pct)
 SELECT emp_id, l_name, sal, commission_pct
 FROM emp
 WHERE job_id LIKE '%REP%';

- 전부 복사: 백업이나 마이그레이션을 하는 방법의 주가 될 수 있음
다른 테이블의 내용을 복사해서 내 테이블에 넣는 방법 or 그 반대=데이터를 복사하는 방법
서브쿼리를 사용. 'CTAS'라고도 함

CREATE TABLE copy_emp
AS SELECT *
 FROM employees   = 여기까지 하면 구조와 data 전부를 복사함
 WHERE 1=2        = 이 조건을 주면 맞는 데이터가 전혀 없기 때문에 구조만 복사됨

- Insert에 테이블 대신 서브쿼리 이용 예제
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM   employees
WHERE  department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);


* UPDATE
1. UPDATE 형식: UPDATE SET WHERE
- UPDATE table
SET column = value
WHERE condition;

WHERE 절을 안쓰면 전부를 바꿀수 있음 조심

- 여러 값을 서브쿼리를 이용해 바꾸고자 할때.
update emp
set job_id=(select job_id from emp where emp_id=205),
    sal=(select sal from emp where emp_id=205)
where emp_id=114;

* DELETE
1. DELETE 형식: DELETE WHERE
- DELETE table
WHERE condition;

예제1) 1개만 지워진다
DELETE FROM departments
WHERE  department_name = 'Finance';

예제2) 모두 지워진다- 조심
DELETE FROM  copy_emp;

- 다른 테이블을 이용한 열 삭제 예제
DELETE FROM employees
WHERE  department_id =
(SELECT department_id
FROM   departments
WHERE  department_name
LIKE '%Public%');
그러나 아마 연관된 레코드가 있다며 무결성 제약 오류가 날 가능성이 크다.(외래키)

댓글 없음:

댓글 쓰기