Join
두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법으로 두 개의 테이블을 마치 하나의 테이블인 것 처럼 보여주는 것이다.
- inner join
- outer join
- left outer join
- right outer join
- full outer join
기본 사용 방법
inner joinselect * from A inner join B
각 테이블에서 join조건에 일치되는 데이터만 가져오며 교집합이라고 말한다.
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM EMPLOYEES e INNER JOIN DEPARTMENTS d
ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
WHERE d.DEPARTMENT_ID = 80
ORDER BY e.EMPLOYEE_ID
;
outer joinleft outer joinselect * from A left outer join B
왼쪽 테이블이 기준이 된다.
join 조건에 부합하는 데이터가 join 당하는 테이블에 있으면 해당 데이터를, 없으면 null로 select한다.
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM EMPLOYEES e
LEFT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY e.EMPLOYEE_ID
;
right outer joinselect * from A right outer join B
오른쪽 테이블이 기준이 된다.
join 조건에 부합하는 데이터가 join당하는 테이블에 있으면 해당 데이터를, 없으면 null로 select한다.
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM EMPLOYEES e
RIGHT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY e.EMPLOYEE_ID
;
full outer join양쪽 테이블 모두 기준이 된다.
join 조건에 부합하는 데이터가 join 당하는 테이블에 있으면 해당 데이터를 없으면 null을 select한다.
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , d.DEPARTMENT_ID , d.DEPARTMENT_NAME
FROM EMPLOYEES e
full OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY e.EMPLOYEE_ID
;
join 예제문제
1.사원들의 이름, 부서번호, 부서명을 출력하라
SELECT e.LAST_NAME, d.DEPARTMENT_ID ,d.DEPARTMENT_NAME
FROM DEPARTMENTS d
INNER JOIN EMPLOYEES e
ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
;
2.사원이름과 그 사원의 관리자 이름을 출력하라
SELECT e.first_name AS 사원명, e.employee_ID, e2.FIRST_NAME AS 매니저명, e2.EMPLOYEE_ID
FROM EMPLOYEES e INNER JOIN EMPLOYEES e2
ON e.MANAGER_ID = e2.EMPLOYEE_ID
ORDER BY e.EMPLOYEE_ID
;
3.EMPLOYEES 테이블과 DEPARTMENTS 테이블의 부서번호를 조인하고 SA_MAN 사원만의 사원번호,이름,급여,부서명,근무지를 출력하라.
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , e.SALARY , d.DEPARTMENT_NAME , d.LOCATION_ID
FROM EMPLOYEES e
LEFT OUTER JOIN DEPARTMENTS d
ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
WHERE e.JOB_ID = 'SA_MAN'
;
ANSI join ns Oracle join
SQL은 데이터베이스를 관리하기 위해 만들어진 프로그래밍 언어이며 데이터베이스를 관리해주는 대부분의 Management System(dbms : oracle, mysql, ... )들은 SQL을 사용한다. DBMS 자체의 특수성 때문에 SQL 사용법이 조금씩 다르기도 하지만 큰 틀에서 보면 나름대로의 보편성을 가지고 있다.
이를 위해 미국국립표준폅회(Americal National Standards Intitute, ANSI)에서도 SQL에 대한 보편적인 문법을 제시하고 있는데 그것이 바로 ANSI Query이다.
Join도 마찬가지로 ANSI문법을 사용하는 경우가 대부분이긴하지만 편의에 따라 DBMS만의 자체 문법을 사용하기도 한다. 대표적으로 Oracle에서 사용하는 Oracle Join이 있다.