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';