employees์ manager_id : ์ง์์ ๋งค๋์ id (์ง์์ ์์ฌ์ empid)
departments์ manager_id : ๋ถ์์ ๋งค๋์ id (๋ถ์์ฅ์ empid)
employees์ manager_id์ departments์ manager_id ์ข์ง ์์ ์ปฌ๋ผ์ ๋ฐฐ์น!!
์ฐจ๋ผ๋ฆฌ Employees์์์ manager_id ์ Employee_id ์ฐ๊ด ์๋ค.
ย ย ย ย ย ย ย ย ย Departments์ manager_id์ Employee_id ์ฐ๊ด ์๋ค.
Ex 2) employees ํ
์ด๋ธ๊ณผ departments ํ
์ด๋ธ ์ฌ์ฉ
department_id, department_name, ๋ถ์์ manager_id, ๋ถ์์ ๋งค๋์ ์ด๋ฆ(last_name)์ ํจ๊ป ์ถ๋ ฅํ์์ค.
select departments.department_id, department_name,
departments.manager_id, last_name as "๋งค๋์ ์ด๋ฆ"
from departments join employees
on departments.manager_id = employees.employee_id;
-- (==)
select departments.department_id, department_name,
departments.manager_id, last_name as "๋งค๋์ ์ด๋ฆ"
from departments join employees
on employees.employee_id = departments.manager_id;
-- ์ฃ๋ณ๊ณผ ์ฐ๋ณ์ ๋ฐ๊ฟจ์ง๋ง ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
Ex3) employees ํ
์ด๋ธ๊ณผ departments ํ
์ด๋ธ ์ฌ์ฉ
์ ์ฒด ์ฌ์๋ค์ employee_id, last_name, salary, ์ง์์ manager_id, ์ง์์ด ์์๋ ๋ถ์์ department_id, department_name, ๋ถ์์ manager_id๋ฅผ ํจ๊ป ์ถ๋ ฅํ์์ค.
select employee_id, last_name, salary,
employees.manager_id as "์ง์์ ๋งค๋์ ",
departments.department_id, department_name,
departments.manager_id as "๋ถ์์ ๋งค๋์ "
from employees join departments
on employees.department_id = departments.department_id;
-- (==)
select employees.employee_id,employees.last_name, employees.salary,
employees.manager_id as "์ง์์ ๋งค๋์ ",
departments.department_id, departments.department_name,
departments.manager_id as "๋ถ์์ ๋งค๋์ "
from employees join departments
on employees.department_id = departments.department_id;
select e.employee_id,e.last_name, e.salary,
e.manager_id as "์ง์์ ๋งค๋์ ",
d.department_id, d.department_name,
d.manager_id as "๋ถ์์ ๋งค๋์ "
from employees e join departments d
on e.department_id = d.department_id;
Ex4) departments ํ
์ด๋ธ๊ณผ locations ํ
์ด๋ธ ์ฌ์ฉ
๋ถ์์ department_id, department_name, ๋ถ์๊ฐ ์์นํ city๋ช
์ ํจ๊ป ์ถ๋ ฅํ์์ค.
select d.department_id, d.department_name, l.city
from departments d join locations l
on d.location_id = l.location_id;
Ex5) employees ํ
์ด๋ธ๊ณผ jobs ํ
์ด๋ธ ์ฌ์ฉ
์ ์ฒด ์ฌ์๋ค์ employee_id, last_name, job_id, ์
๋ฌด์ ์ ์ฒด ์ด๋ฆ(job_title)์ ํจ๊ป ์ถ๋ ฅํ๋
employee_id๊ฐ 200๋ฏธ๋ง์ธ ์ฌ์๋ง ์ถ๋ ฅํ๊ณ , employee_id๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ ์ถ๋ ฅํ์์ค.
select e.employee_id, e.last_name, e.job_id, j.job_title
from employees e join jobs j
on e.job_id = j.job_id
where e.employee_id < 200
order by e.employee_id;
Ex6) employees, departments, locations ํ
์ด๋ธ ์ฌ์ฉ
์ง์๋ค์ employee_id, last_name, salary, department_id, department_name,
location_id, city์ ํจ๊ป ์ถ๋ ฅํ์์ค.
select e.employee_id, e.last_name, e.salary, d.department_id,
d.department_name, l.location_id, l.city
from employees e join departments d
on e.department_id = d.department_id
join locations l
on d.location_id = l.location_id;
-- (==)
select e.employee_id, e.last_name, e.salary, d.department_id,
d.department_name, l.location_id, l.city
from employees e join departments d join locations l
on e.department_id = d.department_id
and d.location_id = l.location_id; -- (on/and ๊ฐ๋ฅ)
-- ๋ฌธ๋ฒ ์ค๋ฅ (on / on ์ฐ์์ผ๋ก๋ ๋ถ๊ฐ๋ฅ)
select e.employee_id, e.last_name, e.salary, d.department_id,
d.department_name, l.location_id, l.city
from employees e join departments d join locations l
on e.department_id = d.department_id
on d.location_id = l.location_id; -- (on / on ๋ถ๊ฐ๋ฅ)
: ์๊ธฐ ์์ ํ
์ด๋ธ๊ณผ ์กฐ์ธํ๋ ์ ํ.
ํ๋์ ํ
์ด๋ธ์ ๋ง์น ๋ค๋ฅธ ํ
์ด๋ธ์ธ๋ฏ alias๋ฅผ ๋ค๋ฅด๊ฒ ๋ถ์ฌํด์ ์กฐ์ธ์ ํจ.
โโโโโ ํท๊ฐ๋ฆผ ์ฃผ์ โโโโโ
Ex7) employees ํ
์ด๋ธ๋ก๋ถํฐ ์ฌ์๋ค์ employee_id, last_name, salary, job_id,
์ง์์ ์์ฌID(manager_id)์ ์ง์์ ์์ฌ ์ด๋ฆ(last_name)์ ํจ๊ป ์ถ๋ ฅํ์์ค.
select e1.employee_id, e1.last_name, e1.salary, e1.job_id,
e1.manager_id as "๋งค๋์ ID", e2.last_name as "๋งค๋์ ์ด๋ฆ"
from employees e1 join employees e2
on e1.manager_id = e2.employee_id;
-- (==)
select e1.employee_id, e1.last_name, e1.salary, e1.job_id,
e2.employee_id as "๋งค๋์ ID", e2.last_name as "๋งค๋์ ์ด๋ฆ"
from employees e1 join employees e2
on e1.manager_id = e2.employee_id;
Ex8) employees, departments, jobs ํ
์ด๋ธ ์ฌ์ฉ
์ง์๋ค์ employee_id, last_name, salary, job_title, department_name์ ํจ๊ป ์ถ๋ ฅํ์์ค.
select e.employee_id, e.last_name, e.salary, j.job_title, d.department_name
from employees e join jobs j
on e.job_id = j.job_id
join departments d
on e.department_id = d.department_id;
-- (==)
select e.employee_id, e.last_name, e.salary, j.job_title, d.department_name
from employees e join jobs j join departments d
on e.job_id = j.job_id
and e.department_id = d.department_id;
select e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
from employees e join departments d
on e.department_id = d.department_id;
select e1.last_name as "Employee", e1.employee_id as "Emp#",
e2.last_name as "Manager", e1.manager_id as "Mgr#"
from employees e1 join employees e2
on e1.manager_id = e2.employee_id;
-- (==)
select e1.last_name as "Employee", e1.employee_id as "Emp#",
e2.last_name as "Manager", e2.employee_id as "Mgr#"
from employees e1 join employees e2
on e1.manager_id = e2.employee_id;
-- [์ค๋ต] ์ง์์ ์ด๋ฆ, ์ง์์ ์ฌ๋ฒ, ์ง์์ ๋งค๋์ ์ด๋ฆ(์ฌ๊ธฐ๊น์ง O)
ย ย ย ย ย ย ย ย ย ย ย ย ์ง์์ ๋งค๋์ ์ ๋งค๋์ ๋ฒํธ(X)
select e1.last_name as "Employee", e1.employee_id as "Emp#",
e2.last_name as "Manager", e2.manager_id as "Mgr#"
from employees e1 join employees e2
on e1.manager_id = e2.employee_id;
select employee_id, last_name, department_id
from employees
where department_id is null; -- ์์๋ ๋ถ์๊ฐ ์๋ ์ฌ์ 1๋ช
์์.
select count(distinct department_id)
from employees; -- 107๋ช
์ ์ง์๋ค์ด ์์๋ ๋ถ์์ ๊ฐ์๋ 11๊ฐ์.
select*
from departments; -- ์ฐ๋ฆฌ ํ์ฌ์ ์กด์ฌํ๋ ๋ถ์๋ 27๊ฐ์.
-- 16๊ฐ์ ๋ถ์๋ ๋น์ด์์.
โ inner join๊ณผ outer join ์์
employees ํ
์ด๋ธ๊ณผ departments ํ
์ด๋ธ์ department_id๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ์ ํด์
์ง์์ ๋ณด์ ๋ถ์์ ๋ณด ํจ๊ป ์ถ๋ ฅํ์์ค.
select e.employee_id, e.last_name, e.salary,
e.department_id, d.department_name
from employees e join departments d
on e.department_id = d.department_id;
select e.employee_id, e.last_name, e.salary,
e.department_id, d.department_name
from employees e left outer join departments d
on e.department_id = d.department_id;
select e.employee_id, e.last_name, e.salary,
d.department_id, d.department_name
from employees e right outer join departments d
on e.department_id = d.department_id;