티스토리 뷰

DBMS/Oracle 11g

5. JOIN in SQL

뚜비콩 2017. 9. 28. 10:10

JOIN 의 종류

1) 등가 조인(p234) 두 개 이상의 테이블에서 동일한 값으로 조인 --> AND 느낌

2) 비등가 조인(p240) 두 개 테이블에서 값이 같지 않은 경우에 조인하는 경우 --> OR 느낌

3) outer join(p244)

left outer join: 기준이 되는 테이블이 왼쪽에 있는 경우

right outer join: 기준이 되는 테이블이 오른쪽에 있는 경우

full outer join(호환성 없음) : 좌우 다 참조

4) self join(p254): 자기가 자기 자신을 조인하는 경우


-- 부서 코드가 101번인 부서의 주소와 우편번호 조회
SELECT street_address as "주소", postal_code as "우편번호"
FROM DEPARTMENTS d JOIN LOCATIONS c
ON d.location_id = c.location_id
WHERE DEPARTMENT_ID = 100;


--부서 코드 50번의 매니저 이름을 조회(departments, employees)
SELECT e.first_name as "매니저 이름", d.DEPARTMENT_ID as "부서 코드"
FROM DEPARTMENTS d JOIN EMPLOYEES e
ON d.manager_id = e.employee_id
WHERE d.DEPARTMENT_ID = 50;


-- 부서 명이 it인 직원들의 이름과 연락처를 조회하시오(departments, employees)
SELECT first_name as "이름", phone_number as "연락처"
FROM DEPARTMENTS d JOIN EMPLOYEES e 
ON d.department_id = e.department_id
WHERE d.DEPARTMENT_NAME = 'IT';




SELF JOIN 연습

-- 직원명이 'Lex'인 직원의 매니저 이름을 조회
SELECT e1.FIRST_NAME as "매니저 이름"
FROM EMPLOYEES e1 JOIN EMPLOYEES e2
ON e1.employee_id = e2.manager_id
WHERE e2.FIRST_NAME = 'Lex';


--매니저 이름이 'John'인 직원들의 이름과 연락처, 급여 조회
SELECT e.FIRST_NAME as "직원 이름", e.PHONE_NUMBER as "연락처", TO_CHAR(e.SALARY, '999,999.99') as "급여"
FROM EMPLOYEES m JOIN EMPLOYEES e
ON m.employee_id = e.manager_id
WHERE m.FIRST_NAME = 'John';


-- 2002년에 입사한 매니저들이 관리하고 있는 사원들의 이름과 연락처를 조회
SELECT e1.FIRST_NAME as "이름", REPLACE(e1.PHONE_NUMBER, '.', '-') as "연락처"
FROM EMPLOYEES e1 JOIN EMPLOYEES e2
ON e1.manager_id = e2.employee_id
WHERE TO_CHAR(e2.hire_date, 'yyyy') = '2002';




댓글