본문으로 바로가기

ORACLE JOIN함수(조인)에 대해서

category IT 프로그래밍 2017. 12. 26. 18:21

ORACLE JOIN함수(조인)에 대해서


JOIN: 한개 이상ㅇ의 테이블에서 데이터를 조회하기 위해서

사용되는 join





JOIN의 필요성과 종류


필요성

특정 부서 번호에 대한 부서이름은 무엇인지는 부서(DEPT) 테이블에 있습니다. 특정 사원에 대한 부서명을 알아내기 위해서는 부서 테이블에서 정보를 얻어 와야 합니다.

vSCOTT인 사원이 소속되어 있는 부서의 이름이 무엇인지 알아보려고 합니다.

vSCOTT이란 사원의 부서명을 알아내는 일 역시 사원 테이블에서 SCOTT이 소속된 부서 번호를 알아낸 후에 부서 테이블에서 해당 부서 번호에 대한 부서명을 얻어 와야 합니다.
vSQL에서는 두 개 이상의 테이블을 결합해야만 원하는 결과를 얻을 수 있을 때 한 번의 질의로 원하는 결과를 얻을 수 있는 조인 기능을 제공합니다.








종류
CROSS JOIN
EQUI JOIN
NON-EQUI JOIN
SELF JOIN
OUTER JOIN
ANSI JOIN






CROS JOIN
vCross Join으로 특별한 키워드 없이 SELECT 문의 FROM 절에 사원(EMP) 테이블과 부서(DEPT) 테이블을 콤마로 연결하여 연속하여 기술하는 것입니다.
v조인 조건에 따라 조인의 종류가 결정되는데 다음은 조인의 종류를 정리한 표입니다.

Equi Join

동일 칼럼을 기준으로 조인합니다.

Non-Equi Join

동일 칼럼이 없이 다른 조건을 사용하여 조인합니다.

Outer Join

조인 조건에 만족하지 않는 행도 나타낸다.

Self Join

한 테이블 내에서 조인합니다.










EQUI JOIN
vEQUI JOIN가장 많이 사용하는 조인 방법으로서 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 방법입니다.
v
v테이블을 조인하려면 일치되는 공통 컬럼을 사용해야 한다고 하였습니다. 컬럼의 이름이 같게 되면 혼동이 오기 때문에 컬럼 이름 앞에 테이블 이름을 기술합니다.


NON-EQUI JOIN
vNon-Equi Join은 조인 조건에 특정 범위 내에 있는지를 조사하기 위해서 WHERE 절에 조인 조건을 = 연산자 이외의 비교 연산자를 사용합니다

SELF JOIN

v조인은 두 개 이상의 서로 다른 테이블을 서로 연결하는 것뿐만 아니라, 하나의 테이블 내에서 조인을 해야만 원하는 자료를 얻는 경우가 생깁니다.
Seif Join이란 말 그대로 자기 자신과 조인을 맺는 것을 말합니다

OUTER JOIN

v조인 조건에 만족하지 못하였더라도 해당 로우를 나타내고 싶을 때에 사용하는 것이 외부 조인(Outer Join)입니다.
v외부 조인은 NULL 값이기에 배제된 행을 결과에 포함시킬 수 있으며 다음과 같이 “(+)기호를 조인 조건에서 정보가 부족한 칼럼 이름 뒤에 덧붙입니다.










ANSI JOIN


ANSI JOIN
SQL SERVER뿐만 아니라 현재 대부분의 상용 데이터베이스 시스템에서 표준 언어로 ANSI(미국표준연구소) SQL에서 제시한 표준 기능을 대부분 준수하고 있습니다 ANSI 표준 SQL 조인 구문은 몇 가지 새로운 키워드와 절을 제공하여, SELECT 문의 FROM 절에서 조인을 완벽하게 지정할 수 있습니다


v새로운 ANSI 조인은 FROM 다음에 INNER JOIN 이란 단어를 사용하여 조인할 테이블 이름을 명시하고 ON 절을 사용하여 조인 조건을 명시하여 다음과 같이 작성합니다.

SELECT * FROM table1 INNER JOIN table2

ON table1.column1 = table2.column2


vANSI 조인에서는 조인 정보를 ON절에 기술하여 조인 조건을 명확하게 지정하고 다른 조건에 대해서는 WHERE 구문에서 지정하면 됩니다

SELECT ENAME, DNAME

FROM EMP INNER JOIN DEPT

ON EMP.DEPTNO=DEPT.DEPTNO

WHERE ENAME='SCOTT';


USING을 이용한 조인 조건 지정하기

§두 테이블에 각각 조인을 정의한 컬럼의 이름이 동일하다면 USING 절에서 조인할 컬럼을 지정하여 구문을 더 간단하게 표현할 수 있습니다

SELECT * FROM table1 JOIN table2

USING (공통컬럼)

§EMPDEPTDEPTNO 라는 같은 이름의 컬럼이 있기 때문에 다음과 같이 간단하게 조인문을 기술할 수 있습니다

SELECT EMP.ENAME, DEPT.DNAME

FROM EMP INNER JOIN DEPT

USING (DEPTNO);


NATURAL Join

§두 테이블에 각각 조인을 정의한 컬럼의 이름이 동일하다면 USING 절에서 조인할 컬럼을 지정하여 구문을 더 간단하게 표현할 수 있습니다.

SELECT * FROM table1 NATURAL JOIN table2

§EMPDEPTDEPTNO 라는 같은 이름의 컬럼이 있기 때문에 다음과 같이 간단하게 조인문을 기술할 수 있습니다.

 



SELECT EMP.ENAME, DEPT.DNAME

FROM EMP NATURAL JOIN DEPT;

ANSI OUTER JOIN

v새로운 ANSI 구문에서 Outer Join     LEFT Outer Join, RIGHT Outer Join, FULL Outer Join    세 가지 타입의 조인을 제공합니다.


SELECT * FROM table1

[LEFT | RIGHT | FULL] Outer Join table2

vOuter Join은 이미 설명했듯이 어느 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 출력되지 않는 문제점을 해결하기 위해 사용하는 조인 기법입니다.


data-matched-content-rows-num="3" data-matched-content-columns-num="4" data-matched-content-ui-type="image_card_stacked"

--