: ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ๋ฉ์ธ์ฟผ๋ฆฌ๋ก ์ฌ๋ฌ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด ๋ฐํ๋๋ ๊ฒฝ์ฐ
ย ย ๋ฉ์ธ์ฟผ๋ฆฌ์ ์ข๋ณ์๋ ๋ค์ค์ปฌ๋ผ์ ์์ฑํด์ผ ํจ(์ข๋ณ๊ณผ ์ฐ๋ณ์ด ์ง์ด ๋ง์์ผ ํจ!)
โ ์๊ธฐ ์์ ์ด ๋งค๋์ ๊ฐ ์๋ ์ง์ ์ถ๋ ฅํ์์ค.
select last_name
from employees
where employee_id not in (select manager_id
from employees);
โ [๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋ ์์ธ? ] -- ์ค๋ฅ๊ฐ ์๋๋ผ ๊ฒฐ๊ณผ๊ฐ 0๊ฐ
: ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ๋ฐํ๋๋ ๊ฐ๋ฆฌ์คํธ์ null๊ฐ์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ,
ย ย ๋ฉ์ธ์ฟผ๋ฆฌ์ and์ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ ๋น๊ต์ฐ์ฐ์ ์ฌ์ฉ์ ๋ฉ์ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ null์.
โญ [ํด๊ฒฐ] ๋ค์คํ ์๋ธ์ฟผ๋ฆฌ์ธ ๊ฒฝ์ฐ ๋ฉ์ธ์ฟผ๋ฆฌ์ and์ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ ๋น๊ต์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ,
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ๋ฐํ๋๋ null๊ฐ์ ์ ์ธ์์ผ์ค์ผ ํจ.
select last_name
from employees
where employee_id not in (select manager_id
from employees
where manager_id is not null); // 89๊ฐ
: ํ ์ด๋ธ์ ์๋ก์ด ํ์ ์ถ๊ฐํ๋ ๋ช ๋ น์ด
[๋ฌธ๋ฒ] insert into ํ
์ด๋ธ๋ช
[(์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2, ์ปฌ๋ผ๋ช
3, ...)]
ย ย ย ย ย ย ย ย ย values (๊ฐ1, ๊ฐ2, ๊ฐ3, ... );
desc departments;
select *
from departments;
๐น (insert ์์ 1) insert ์์
์ ํ
์ด๋ธ๋ช
๋ค์ ์ปฌ๋ผ๋ฆฌ์คํธ ์๋ต์์๋
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย values์ ์ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ์ปฌ๋ผ ์์๋๋ก ๋ชจ๋ ๊ฐ์ ๋์ดํด์ผ ํจ.
insert into departments
values (280, 'Java', 108, 1700);
๐น (insert ์์ 2) insert ์์
์ ํ
์ด๋ธ๋ช
๋ค์ ์ปฌ๋ผ๋ฆฌ์คํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ์๋
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย values์ ์ ์ปฌ๋ผ ์์, ์ปฌ๋ผ ๊ฐ์๋ฅผ ๋ง์ถฐ์ ๊ฐ ๋์ดํด์ผ ํจ.
insert into departments(DEPARTMENT_NAME, LOCATION_ID, MANAGER_ID, DEPARTMENT_ID)
values ('Java', 1700, 201, 290);
๐น (insert ์์ 3) null๊ฐ์ ์์์ (์๋)์ผ๋ก ์ฝ์ ํ๋ ๋ฐฉ๋ฒ
insert into departments(department_id, department_name)
values (300, 'Mysql');
๐น (insert ์์ 4) null๊ฐ์ ๋ช ์์ (์๋)์ผ๋ก ์ฝ์ ํ๋ ๋ฐฉ๋ฒ
insert into departments
values (310,'Oracle',null,null);
๐น (insert ์์ 5) insert + ์๋ธ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย : ๋ค๋ฅธ ํ
์ด๋ธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ์์
์ด๋ฏ๋ก ํ๋ฒ์ ์ฌ๋ฌ ํ์ ์ฝ์
ํ ์ ์์.
๐ป sales_reps ์์ ํ ์ด๋ธ ์์ฑํ๊ธฐ
create table sales_reps
(id int,
name varchar(20),
salary int,
commission_pct double(20,2));
desc sales_reps;
insert into sales_reps(id, name, salary, commission_pct)
select employee_id, last_name, salary, commission_pct
from employees
where job_id like '%rep%';
select *
from sales_reps;
๐น (insert ์์ 6) insert + ์๋ธ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย : employees ํ
์ด๋ธ๊ณผ ๊ตฌ์กฐ๊ฐ ๋์ผํ copy_emp ํ
์ด๋ธ ์์ฑ ํ,
ย ย ย ย ย ย ย ย employees ํ
์ด๋ธ์ 107๋ช
์ ์ฌ์ ์ ๋ณด๋ฅผ copy_emp ํ
์ด๋ธ์ ๋ณต์ฌํ ์์
๐ป copy_emp ํ ์ด๋ธ ์์ฑ
create table copy_emp
as select*
from employees
where 1 = 2;
desc copy_emp;
select *
from copy_emp;
๐ป copy_emp ํ
์ด๋ธ์ ๋ฐ์ดํฐ ๋ณต์ฌํ๊ธฐ
: copy_emp ํ
์ด๋ธ์ employees ํ
์ด๋ธ์ ์๋ 107๋ช
์ ์ฌ์ ์ ๋ณด ๋์ผํ๊ฒ ์ฝ์
ํ๊ธฐ
insert into copy_emp
select *
from employees;
select*
from copy_emp;
๐น (insert ์์ 7) ๋ค์คํ insert
insert into departments
values (320,'HTML',126,1700),
(330,'CSS',127,null);
select *
from departments;
: ํ ์ด๋ธ์ ํน์ ํ์ ์์ ํ๋ ๋ช ๋ น์ด
[๋ฌธ๋ฒ] update ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย set ์ปฌ๋ผ๋ช
1 = ๊ฐ1[, ์ปฌ๋ผ๋ช
2 = ๊ฐ2, ...]
ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ];
๐ธ (update ์์ 1)
update employees
set department_id = 50
where employee_id = 113;
select employee_id, last_name, department_id
from employees
where employee_id = 113;
-> ๋ณ๊ฒฝ๋๋์ง ํ์ธ (department_id : 100->50)
๐ธ (update ์์ 2)
๐ฅ ์๋์ปค๋ฐ ํด์ ํ๊ธฐ : [Query] - [Auto-Commit Transactions] ์ฒดํฌ ํด์
update copy_emp
set department_id = 110;
select*
from copy_emp;
rollback;
select*
from copy_emp;
๐ฅ ์๋์ปค๋ฐ ์ค์ ํ๊ธฐ : [Query] - [Auto-Commit Transactions] ์ฒดํฌํ๊ธฐ
๐ธ (update ์์ 3) update + ์๋ธ์ฟผ๋ฆฌ(subquery)
: copy_emp ํ
์ด๋ธ์ 113๋ฒ ์ฌ์์ job_id์ salary๋ฅผ employees ํ
์ด๋ธ์ ์๋
ย ย 205๋ฒ ์ฌ์์ job_id, salary์ ๋์ผํ๊ฒ ๋ณ๊ฒฝํ๋ ์์
update copy_emp
set job_id =(select job_id
from employees
where employee_id = 205), -- 205๋ฒ์ job_id ์ฐพ์ ์
salary =(select salary
from employees
where employee_id = 205) -- 205๋ฒ์ salary ์ฐพ์ ์
where employee_id = 113;
select employee_id, last_name, job_id, salary
from copy_emp
where employee_id = 113;
๐ธ (update ์์ 4) update + ์๋ธ์ฟผ๋ฆฌ(subquery)
ย ย ย ย ย location_id๊ฐ 1800์ธ ๋ถ์์ ์์๋ ์ฌ์๋ค์ ๊ธ์ฌ๋ฅผ 10% ์ธ์ํ์์ค.
update copy_emp
set salary = salary * 1.1
where department_id = (select department_id
from departments
where location_id = 1800);
select employee_id, last_name, salary, department_id
from copy_emp
where department_id = (select department_id
from departments
where location_id = 1800);
: ํ ์ด๋ธ์ ํน์ ํ์ ์ญ์ ํ๋ ๋ช ๋ น์ด
[๋ฌธ๋ฒ] delete from ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ];
=> where์ ์๋ต ์! ๋ชจ๋ ํ์ด ์ญ์ ๋๋ ๋ช
๋ น์ด
๐น (delete ์์ 1)
delete from departments
where department_name = 'html';
select*
from departments;
๐น (delete ์์ 2)
๐ฅ ์๋์ปค๋ฐ ํด์ ํ๊ธฐ : [Query] - [Auto Commit] ์ฒดํฌ ํด์
<์ธํธ>
delete from copy_emp; -- where์ ์๋ต ์ ๋ชจ๋ ํ ์ญ์ ๋จ.
select *
from copy_emp; -- ์์
๊ฒฐ๊ณผ ํ์ธ(์ ์ฅ X, ๋ฏธ๋ฆฌ๋ณด๊ธฐ)
rollback; -- ์์
์ทจ์
select *
from copy_emp; -- ์์
์ทจ์ ๊ฒฐ๊ณผ ํ์ธ
<์ธํธ>
delete from copy_emp
where employee_id = 105; -- ํน์ ํ ์ญ์
select *
from copy_emp
where employee_id = 105; -- ์์
๊ฒฐ๊ณผ ํ์ธ(์ ์ฅ X, ๋ฏธ๋ฆฌ๋ณด๊ธฐ)
commit; -- ์์
์ ์ฅ
๐ฅ ์๋์ปค๋ฐ ์ค์ ํ๊ธฐ : [Query] - [Auto Commit] ์ฒดํฌ ์ค์
๐น (delete ์์ 3) delete + ์๋ธ์ฟผ๋ฆฌ(subquery)
: copy_emp ํ ์ด๋ธ๋ก๋ถํฐ location_id๊ฐ 1800์ธ ๋ถ์์ ์์๋ ์ฌ์๋ค์ ์ญ์ .
delete from copy_emp
where department_id = (select department_id
from departments
where location_id = 1800);
๐ป ๊ฒฐ๊ณผ ํ์ธ
select *
from copy_emp
where department_id = (select department_id
from departments
where location_id = 1800);
ํธ๋์ญ์ ์ด๋? ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์๋ก ์ฌ๋ฌ๊ฐ์ DML์ด ๋ชจ์ฌ์ ๊ตฌ์ฑ์ด ๋จ.
-- ํธ๋์ญ์
์์ : ์ฒซ๋ฒ์งธ DML์ด ์คํ๋ ๋
-- ํธ๋์ญ์
์ข
๋ฃ : commit, rollback ๋ช
๋ น์ด๊ฐ ์คํ๋ ๋
โ DML(insert, update, delete) ๋ช ๋ น์ด ํ๋๊ฐ ํ๋์ ํธ๋์ญ์ ์!
[์ํฉ1] Auto-Commit ์ค์ ๋ ์ํ
(ํธ๋์ญ์ ์์) insert -----; (ํธ๋์ญ์ ์ข ๋ฃ) (autocommit ๋ฐ๋ก ๋ฐ์๋จ) (ํธ๋์ญ์ ์์) update -----; (ํธ๋์ญ์ ์ข ๋ฃ) (autocommit ๋ฐ๋ก ๋ฐ์๋จ)
[์ํฉ2] Auto-Commit ํด์ ๋ ์ํ
(ํธ๋์ญ์ ์์) insert -----; update -----; update -----; (ํธ๋์ญ์ ์ข ๋ฃ) commit; (ํธ๋์ญ์ ์์) delete -----; delete -----; (ํธ๋์ญ์ ์ข ๋ฃ) rollback;
[์ํฉ3] Auto-Commit ํด์ ๋ ์ํ
(ํธ๋์ญ์ ์์) insert -----; update -----; savepoint ํฌ์ธํธ๋ช 1; update -----; ==> ์์ ์ ์ค์ํจ! savepoint ํฌ์ธํธ๋ช 2; delete -----; rollback to ํฌ์ธํธ๋ช 1; ์์ ๋ค์ํ๊ธฐ (ํธ๋์ญ์ ์ข ๋ฃ) commit;