본문 바로가기
Category/Database

[Oracle] 다양한 Join 구문

by developer__Y 2024. 1. 9.
Join 구문이란?

 

Oracle에서 테이블들은 다양하게 관계를 맺고있다.

예를들어,

 

다음과 같이 EMP 테이블은 DEPTNO 컬럼을 FK로 참조하고있으며,

DEPT 테이블은 DEPTNO 컬럼을 PK로 가지고있다.

즉  EMP 테이블은 DEPT 테이블을 참조하고 있는것이다.

이때, 만약 EMP 테이블에서 사원별 부서명을 조회하고싶다면 = EMP 테이블과 DEPT 테이블을 JOIN 하여 연관된 데이터들을 가져오는 것이다.

즉,

SELECT 테이블1.컬럼명,테이블2.컬럼명 FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼명 = 테이블2.컬럼명이고,

 

SELECT EMP.Ename, DEPT.Dname FROM EMP JOIN DEPT ON EMP.Deptno = DEPT.Deptno;  

 

이를 SQL 구문으로 표현한 것이다.

이처럼 2개의 테이블을 JOIN하여 원하는 조건에 해당하는 컬럼을 가져오는것을 등가조인(Equi Join)이라고 한다.

 

ANSI JOIN 과 ORACLE JOIN

 

ANSI JOIN이란 다양한 데이터베이스에서 활용될수있는 표준 문법으로 위의 JOIN 구문과 같은 문법을 ANSI 문법이라고 한다.

위의 JOIN 구문을 오라클에서 다르게 표현할수있다. 

 

SELECT EMP.Ename,DEPT.Dname FROM EMP,DEPT WHERE EMP.Deptno = DEPT.Deptno

 

해당 SQL 구문은 ORACLE 문법으로 작성된 것으로 ANSI JOIN 구문과 동일한 결과를 얻는다.

2개의 테이블에서 WHERE 조건에 해당하는 컬럼을 가져오겠다는 뜻이다.

 

 

2개이상의 테이블을 JOIN 하는방법

 

1. ANSI 문법

SELECT S.name,D.Dname,P.name "prof_name" 
FROM student "S" 
JOIN Department "D"  ON S.deptno1 = D.deptno 
JOIN professor "P" ON S.profno = P.profno;

 

다음 SQL 구문을 해석하면,

학생테이블의 소속학과번호를 통해서 모든 학생의 이름과 소속 학과명, 담당교수명을 찾는 구문으로,

STUDENT 테이블의 소속 학과 번호를 기준으로 DEPARTMENT 테이블의 소속 학과명, PROFESSOR 테이블의 담당 교수명 3개의 테이블을 JOIN 하는 것이다.

 

2. ORACLE 문법

SELECT S.name,D.dname,p.name
FROM student S,Department D,professor P
WHERE S.deptno1 = d.deptno
AND s.profno = p.profno;

 

 

비등가 조인(Non-Equi Join)

 

위의 JOIN들은 모두 특정 값에 해당하는 컬럼을 가져오는 등가 조인이었다.

비등가 조인이란 테이블을 JOIN할때, 특정 범위에 해당하는 컬럼을 가져오는것이다.

 

고객명과 포인트를 가지고있는 Customer 테이블과

경품명과 포인트 범위를 가지고있는 Gift 테이블이 있다.

여기에서, 고객의 포인트별 해당하는 경품명을 조회하고싶을때

범위를 이용한 비등가 조인을 사용하면된다.

 

 

1. ANSI 문법

 

select customer.gname,to_char(customer.point,'999,999') "POINT",gift.gname "GIFT_NAME"
from customer
join gift on customer.point < gift.G_end and customer.point > gift.g_start order by customer.point;

 

 

 

2. ORACLE 문법

 

select c.gname,to_Char(c.point,'999,999')POINT,g.gname from customer C , gift G
where c.point between g.g_start and g.g_end;

 

조회결과

 

 

OUTER JOIN

 

아우터 조인(OUTER JOIN) 이란,

A 테이블과 B 테이블중 특정 조건에 해당하는 컬럼을 가져오는데

A 테이블은 해당하지않더라도 모두 가져온다면 LEFT OUTER JOIN

B테이블은 해당하지않더라도 모두 가져온다면 RIGHT OUTER JOIN 이다.

또한 양쪽 테이블 모두 조건에 해당하지않는 값을 포함해서 가져오려면 FULL OUTER JOIN 을 사용한다.

 

1. ANSI 문법

 

select s.name,p.name
from student S LEFT OUTER JOIN professor P
on s.profno = p.profno; 

 

2. ORACLE 문법

 

select s.name,p.name
from student S,professor P
where s.profno = p.profno(+);

 

조회 결과