JOIN
join 조인
여러 테이블에 있는 데이터를 합쳐서 출력.
join은 FROM절에 작성된다.
join은 정말 많이 사용된다.
join(조인) 유형
- Natural Join
- Using
- On : self-join, Nonequijoin
- Outer join : left, right, full
- Cartesian Product : cross join
Natural Join
오라클이 다중 테이블을 뒤져봐서 컬럼명이 같고 데이터타입이 같은 컬럼을 기준으로 join을 하여 데이터를 보여준다.
- 예시 :
test1테이블과 test2테이블을 natural join해서 오라클이 직접 두 테이블을 찾아보고 컬럼명과 데이터타입리 같은 컬럼을 기준으로 모든 컬럼을 출력한다.
이때 오라클이 자동으로 찾은 기준 컬럼은 양쪽 테이블에서 컬럼명이 같고 데이터타입이 같다
1 | $ select * |
- 만약 컬럼명이 같도 데이터타입이 같은 컬럼이 한 개이상이면 어떻게 될까?
해당 컬럼들의 조합값으로 기준으로 조인을 시켜준다.
Using
- 여러 컬럼의 이름은 동일하지만 데이터 유형이 다른 경우 using 절을 사용한다.
- 꼭 괄호를 작성하고 그 괄호안에 컬럼명을 넣어줘야한다
- 예시 :
test1테이블과 test2테이블을 ex이라는 컬럼을 기준으로 join해서 모든 컬럼을 출력한다.
test1과 test2테이블의 name컬럼명이 같지만 데이터 유형이 다를때 using사용한다.
1 | $ select * |
- 테이블의 엘리아스를 사용하여 컬럼들이 어느 소속인지 엘리아스 접두어를 컬럼앞에 붙여주면 명령문 구문 분석 속도를 향상시킨다.
- 하지만 using절에서 참조하고 있는 컬럼은 절대 엘리야스 붙이면 안된다.
On
- 가장 기본이 되는 join유형이고 가장 많이 사용한다.
- 컬럼명이 달르고 데이터타입이 달라도 상관없이 사용가능하다.
- 예시 :
test1테이블과 test2테이블을 ex이라는 컬럼을 기준으로 join해서 모든 컬럼을 출력한다.
test1과 test2테이블의 name컬럼명도 다르고 데이터 유형이 달라도 사용할 수 있는 것이 on이다.
1 | $ select * |
self-join
self-join : 하나의 테이블을 엘리아스를 달리 주면 한 개의 테이블로 join이 가능하다
많이 사용된다.
예를 들면 회사의 매니저들이 어떤 사원들을 관리하고 있는지 출력하고 싶다.
이때 회사의 매니저들도 사원이기에 employee_id가 있기에 결국 내 테이블을 2번 참조해야하는 self-join이 된다
1 | $ select manager.name, worker.name |
Natural Join, Useing, On 비교
| 절종류 | 컬럼명 | 데이터타입 | 엘리아스 |
|---|---|---|---|
| Natural Join | 일치 | 일치 | join할 테이블의 컬럼명들 중 같은 컬럼명 있다면 필수 |
| useing | 일치 | 상관없음 | 컬럼의 엘리아스 쓰면안됨 |
| on | 상관없음 | 상관없음 | 필수 |
- 비교 : 아래 세개는 결과값이 똑같다.
- from departments natural join location
- from departments d join location l using(location_id)
- from departments d join location l on d.location_id = l.loc_id)
non-equi join과 equi join 비교
equi(이퀴)조건과 non-equi(넌 이퀴)조건을 비교해보자
| 절종류 | 특징 | 종류 |
|---|---|---|
| non-equi join | 조인조건에 동등연산자가 사용된 조인 유형 | Natural join, Using join, On(=) join |
| equi join | 조인조건에 동등연산자가 아닌 그 외 다른 비교연산자가 사용된 조인 유형 | On(=이 아닌 비교연산자) join |
inner join과 outer join 비교
| 절종류 | 특징 | 종류 |
|---|---|---|
| inner join | 조인조건을 만족하는 행만 반환하는 조인 유형 | Natural join, Using join, On join |
| outer join | 조인조건을 만족하는 행과 조인조건을 만족하지않는 행을 모두 반환하는 조인 유형 | left outer join, right outer join, full outer join |

Cartesian Product (카테시안 곱 = 곱집합)
- 한 테이블의 모든 행을 다른 테이블의 모든 행과 조인한다.
- 모든 경우의 수를 나열.
- 다수의 행을 생성하므로 결과는 그다지 유용하지 않다.
cross join
- 두 테이블의 Cartesian Product 를 생성하는 join작업이다.
1 | $ select last_name, department_name |
join 예시
employees 테이블로부터 모든 사원의 last_name, employee_id, 매니저이름, manager_id를 함께 출력하는 쿼리를 작성하시오
join에 있어 자주 틀리는 오답도 확인해둬야한다.
1 | //첫번째 방법 |
![[OS/WINDOW]배포후 서버재시작에 batch와 윈도우 스케줄러 활용하기](https://cdn.pixabay.com/photo/2012/03/04/00/50/board-22098_960_720.jpg)
![[블로그]헥소테마에서 댓글기능 facebook에서 utterances로 변경하기](https://miro.medium.com/max/1600/1*aOv6h3h_v9PQWa03zGACnw.png)