본문 바로가기
SQL/oracle

oracle SQL - Join (ON).1

by jun.s.gi 2022. 12. 8.
728x90
Join을 하는 이유?

제 3 정규화로 중복된 데이터를 따로 테이블로 두어 중복 방지하였지만, 제대로된 정보가 서로 다른 테이블에 있으니 Join을 수행한다..

예시) 한 사원의 부서명이 400이라면 그 의미를 알아내기 힘들 것이다. 사원 테이블과 부서 테이블을 Join하면 400 의미를 보여준다.

왼쪽은 부서번호만 있어 어떤 부서인지 확인할 수 없지만 오른쪽은 On join을 통해 확인하는 모습

 


 

Cross, Natural

1. Cross Join

 - 두 테이블간 Cross Join을 수행하면 두 테이블의 행수를 곱한 수를 반환한다.

두 테이블을 강제로 합체시켜 보여준다

select [table1]column, [table2]colmn
from table1 cross join table2;

 

2. Natural Join

 - 사용자의 의도와 관계없이 두 테이블에 겹치는 칼럼이 있다면 모두 합쳐서 반환한다.

의도와 다르게 합쳐진 칼럼은 잘못된 결과를 낳을 수 있다.

select [table1]column, [table2]colmn
from table1 natural join table2;

칼럼이름이 같지만 자료형이 다르면 오류를 반환한다.

 


USING절을 사용한 Join

Join ~ USING 절을 사용하면 둘 이상의 열이 일치하는 테이블 간의 명시적으로 열을 지정하여 사용할 수 있고, 열 이름이 같지만 데이터 유형이 달라도 오류 없이 조인을 수행할 수 있다.

두 테이블간에 Join할 칼럼명이 똑같아야 한다.(다르면 접두어를 추가해야함)

select emp_id, emp_name, dept_id, dept_name
from y_emp Join y_dept
Using(dept_id);

y_emp테이블과 y_dept테이블의 dept_id칼럼 이름이 동일하기 때문에 Join 가능

 


On Join (Equi Join)

가장 많이 사용되는 Join 방법 중 하나이며 두 테이블에서 연관이 있는 데이터에 대하여 동등비교를 수행하고 기본키와 외래키 관계에 있는 두 테이블간에 자주 사용된다.

select t1.column, t2.column
from table1 t1(표현식) join table2 t2
on(t1.column = t2.column);

 

728x90