Manipulating Large Data Sets
Manipulating Large Data Sets
Objectives
3-2
Unconditional INSERT
Pivoting INSERT
Conditional ALL INSERT
Conditional FIRST INSERT
3-3
3-4
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM
empl3
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
3-5
3-6
WHERE
AND
a.last_name, a.salary,
a.department_id, b.salavg
employees a, (SELECT
department_id,
AVG(salary) salavg
FROM
employees
GROUP BY department_id) b
a.department_id = b.department_id
a.salary > b.salavg;
3-7
empl3
job_id
= (SELECT job_id
FROM
employees
WHERE
employee_id = 205),
salary = (SELECT salary
FROM
employees
WHERE
employee_id = 205)
WHERE
employee_id
= 114;
1 row updated.
3-8
empl3
department_id
WHERE
job_id
= (SELECT department_id
FROM employees
WHERE employee_id = 100)
= (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.
3-9
3-10
3-11
3-12
UPDATE deptm3
SET manager_id = DEFAULT
WHERE department_id = 10;
3-13
INSERT ALL
INTO table_a VALUES(,,)
INTO table_b VALUES(,,)
INTO table_c VALUES(,,)
SELECT
FROM sourcetab
WHERE ;
Table_a
Table_b
Table_c
3-14
3-15
3-16
Syntax
conditional_insert_clause
[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]
3-17
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
8 rows created.
3-19
3-20
INSERT ALL
WHEN SAL > 10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200
THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,
salary SAL, manager_id MGR
FROM
employees
WHERE employee_id > 200;
4 rows created.
3-21
3-22
INSERT FIRST
WHEN SAL > 25000
THEN
INTO special_sal VALUES(DEPTID, SAL)
WHEN HIREDATE like ('%00%') THEN
INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like ('%99%') THEN
INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
ELSE
INTO hiredate_history VALUES(DEPTID, HIREDATE)
SELECT department_id DEPTID, SUM(salary) SAL,
MAX(hire_date) HIREDATE
FROM
employees
GROUP BY department_id;
8 rows created.
3-23
Pivoting INSERT
3-24
Pivoting INSERT
INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
5 rows created.
3-25
3-27
3-28
Merging Rows
Insert or update rows in the EMPL3 table to match the
EMPLOYEES table.
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name
= e.first_name,
c.last_name
= e.last_name,
...
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
3-29
Merging Rows
TRUNCATE TABLE empl3;
SELECT *
FROM empl3;
no rows selected
SELECT
COMMIT;
SELECT salary FROM employees3
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE employee_id = 107;
3-32
3-34
Summary
3-35
Unconditional INSERT
Pivoting INSERT
Conditional ALL INSERT
Conditional FIRST INSERT
Practice 3: Overview
3-36