뷰와 비슷한 효과를 낼 수 있다.
선언
CREATE TABLE 테이블명 AS
SELECT *
FROM 테이블명
-- 뷰의 선언 (차이점)
CREATE [OR REPLACE] VIEW 뷰 이름 AS 쿼리
또는 이렇게 사용한다
SELECT name, department, salary
INTO high_salary_employees
FROM employees
WHERE salary >= 5000;
employees 테이블에서 조건에 맞는 데이터를 선택하여
high_salary_employees 라는 새로운 테이블을 생성하고
선택한 데이터를 새로운 테이블에 삽입한다.
선언
INSERT INTO 테이블명1
SELECT *
FROM 테이블명2
WHERE 조건~~
아래는 예시이다.
INSERT INTO high_salary_employees
SELECT name, department, salary
FROM employees
WHERE salary >= 5000;
employees 테이블에서 조건에 맞는 데이터를 선택하여
high_salary_employees 테이블에 삽입한다.
선언
MERGE INTO 테이블명
USING DUAL
ON 조건
WHEN MATCHED THEN
UPDATE SET 업데이트 내용
DELETE 삭제할 내용
WHEN NOT MATCHED THEN
INSERT 컬럼명1, 컬럼명2 ..
VALUES 값1, 값2...
예제
employees 테이블과 salary_changes 테이블을 병합하는 예시를 만들어보자.
"employees" 테이블은 직원들의 정보를
"salary_changes" 테이블은 직원들의 급여 변화를 가지고 있다.
먼저 테스트 데이터를 생성해준다.
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
department VARCHAR2(50) NOT NULL,
salary NUMBER NOT NULL
);
CREATE TABLE salary_changes (
employee_id NUMBER PRIMARY KEY,
salary NUMBER NOT NULL
);
INSERT INTO employees (employee_id, name, department, salary)
VALUES (1, 'John Smith', 'Sales', 5000);
INSERT INTO employees (employee_id, name, department, salary)
VALUES (2, 'Jane Doe', 'Marketing', 6000);
INSERT INTO salary_changes (employee_id, salary)
VALUES (1, 5500);
INSERT INTO salary_changes (employee_id, salary)
VALUES (3, 7000);
employee_id | name | department | salary |
---|---|---|---|
1 | John Smith | Sales | 5000 |
2 | Jane Doe | Marketing | 6000 |
이제 employees 테이블과 salary_changes 테이블을 병합하여 employees 테이블의 급여를 업데이트하거나,
salary_changes 테이블에만 있는 새로운 직원 데이터를 employees 테이블에 추가하는 다음과 같은 SQL 쿼리를 작성해 보자
MERGE INTO employees e
USING salary_changes s
ON (e.employee_id = s.employee_id)
WHEN MATCHED THEN
UPDATE SET e.salary = s.salary
WHEN NOT MATCHED THEN
INSERT (e.employee_id, e.name, e.department, e.salary)
VALUES (s.employee_id, 'New Employee', 'New Department', s.salary);
위의 쿼리는
1. employees 테이블과 salary_changes 테이블을 조인하여 두 테이블에서 일치하는 데이터를 찾는다.
2. employees 테이블에서 일치하는 데이터가 있는 경우, 해당 직원의 급여를 salary_changes 테이블의 급여로 업데이트 한다.
3. employees 테이블에서 일치하는 데이터가 없는 경우, salary_changes 테이블의 새로운 직원 데이터를 employees 테이블에 추가 한다.
결과적으로 이 테이블이 출력된다.
employee_id | name | department | salary |
---|---|---|---|
1 | John Smith | Sales | 5500 |
2 | Jane Doe | Marketing | 6000 |
3 | New Employee | New Department | 7000 |