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%');
그러나 아마 연관된 레코드가 있다며 무결성 제약 오류가 날 가능성이 크다.(외래키)
댓글 없음:
댓글 쓰기