티스토리 뷰

1. ON 절을 이용한 JOIN


1
2
3
4
5
6
7
-- 예전 문법 (실행 됨)
SELECT e.employee_id,
       e.last_name,
       e.department_id,
       d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id and e.employee_id > 200;
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 현재 문법
SELECT e.employee_id,
       e.last_name,
       e.department_id,
       d.department_name
FROM employees e JOIN departments d
ON ( e.department_id = d.department_id )
WHERE e.employee_id > 200;
 
-- 예전 문법에서 현재 문법으로 변경된 이유
-- 쿼리문의 실행 속도를 생각해서 테이블명을 적는게 좋다.
-- 안 적으면 FROM 절을 다 찾아본다.
 
--   .  : 보통 테이블의 첫 글자나 두세글자를 많이 한다
 
-- ON 절의 () : ()는 해도 그만 안 해도 그만. 자기 마음.
cs





 

1
2
3
4
5
6
7
-- 현재 문법 ( WHERE 절 빼고 실행해보기 )
SELECT e.employee_id,
       e.last_name,
       e.department_id,
       d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
cs




1
2
3
4
5
6
7
8
SELECT e.employee_id,
       e.last_name,
       e.department_id,
       d.department_id,
       d.location_id
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE e.manager_id = 149;
cs





2. ON 절을 사용한 Self-Join


ON 절을 사용한 Self-Join 또는 자체 join


Table Alias 필수. 안 하면 오라클이 햇갈려함. 햇갈리는데 많이 쓰임.


1
2
3
SELECT worker.lat_name emp, manager.last_name mgr
FROM employees worker JOIN employees manager
ON ( worker.manager_id = manager.employee_id );
cs




연습 문제


1. employees 테이블과 departments 테이블을 조인하여 모든 사원의 정보와 함께 부서 정보를 함께 출력하시오.


출력형식 : employees | last_name | salary | department_id | department_name


1
2
3
4
5
6
7
SELECT e.employee_id employees,
       e.last_name,
       e.salary,
       d.department_id,
       d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
cs




2. employees 테이블로부터 모든 사원의 last_name, employee_id, 매니저 이름, manager_id를 함께 출력하시오.


출력형식 :  Employee   |      Emp#     |    Manger      |       Mgr#


            (last_name)    (employee_id)   (매니저 이름)     (manager_id)


1
2
3
4
5
6
7
8
9
10
SELECT e1.last_name "Employee",
       e1.employee_id "Emp#",
       e2.last_name "Manager",
       e1.manager_id "Mgr#"
FROM employees e1 JOIN employees e2
ON e1.manager_id = e2.employee_id;
 
-- e1.manager_id == e1.employee_id
-- e1.manager_id 자리에 e2.manager_id가 오면 안된다.
-- e2.manager_id는 e1.manager_id의 매니저 e2.manger_id의 manager_id를 출력한다.
cs



공지사항
최근에 올라온 글
Total
Today
Yesterday