Building value

Oracle SQL 기본 문법[JOIN] 본문

RDBMS/Oracle DB

Oracle SQL 기본 문법[JOIN]

developer_Michael 2023. 3. 13. 19:32
반응형

JOIN은 둘 이상의 테이블에서 데이터를 가져와 연결하는 것을 의미합니다. 

JOIN은 일반적으로 테이블 간 관계를 생성하거나 데이터를 논리적으로 결합하는 데 사용됩니다.
 
오라클에서는 다음과 같은 JOIN 문의 종류가 있습니다.

 

 

1 . INNER JOIN

 

EMP 테이블과 DEPT 테이블은 각각 EMPNO와 DEPTNO로 관계가 있습니다. 

이 관계를 이용하여 두 테이블을 INNER JOIN 할 수 있습니다. 

INNER JOIN을 사용하여 EMP 테이블과 DEPT 테이블을 조인하면 EMP 테이블과 DEPT 테이블에서 공통적으로 

 

존재하는 DEPTNO 값을 기준으로 조인됩니다.

 

SELECT E.ENAME, D.DNAME
FROM EMP E -- E 는 별칭
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO; -- D 는 별칭

위 쿼리는 EMP 테이블과 DEPT 테이블을 INNER JOIN 하여 EMP 테이블의 ENAME과 DEPT 테이블의 DNAME을 

 

가져오는 쿼리입니다.

 

SELECT E.ENAME, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO; // 출력 결과

2. LEFT JOIN
 
EMP 테이블의 모든 직원 정보를 가져오면서, 해당 직원이 소속된 DEPT 테이블의 정보도 함께 가져오고 

 

싶다면 LEFT JOIN을 사용할 수 있습니다. 

LEFT JOIN을 사용하여 EMP 테이블과 DEPT 테이블을 조인하면 EMP 테이블의 모든 행이 선택되며,

 

DEPT 테이블과 일치하는 행이 있는 경우에는 DEPT 테이블의 값을 반환하고,

 

일치하지 않는 경우에는 NULL 값을 반환합니다.

 

SELECT E.ENAME, D.DNAME
FROM EMP E
LEFT JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

위의 코드는 LEFT JOIN을 사용한 예시입니다.

EMP 테이블과 DEPT 테이블을 DEPTNO 컬럼을 기준으로 조인하고 있습니다. 

SELECT 문에서는 EMP 테이블의 ENAME 컬럼과 DEPT 테이블의 DNAME 컬럼을 출력하고 있습니다.

 

SELECT E.ENAME, D.DNAME FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO = D.DEPTNO; // 출력 결과

 

3. RIGHT JOIN

 

RIGHT JOIN은 오른쪽 테이블을 기준으로 JOIN을 수행하는 방식입니다. 

LEFT JOIN과 반대로, 오른쪽 테이블에 있는 모든 행은 결과 집합에 포함되고, 

 

왼쪽 테이블과 조인이 가능한 행이 없는 경우 NULL 값으로 채워집니다.

 

RIGHT JOIN은 LEFT JOIN과 마찬가지로 OUTER JOIN의 일종입니다. 

이를 사용하여 두 개의 테이블 사이의 관계를 이해하고, 적절한 결과를 생성할 수 있습니다.

 

SELECT E.ENAME, S.GRADE
FROM EMP E
RIGHT JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL;

SALGRADE 테이블 등급의 LOSAL & HISAL

 

이 쿼리에서는 EMP 테이블과 SALGRADE 테이블을 RIGHT JOIN을 이용하여 연결하였습니다.

EMP 테이블의 사원들의 급여(SAL)가 SALGRADE 테이블의 LOSAL과 HISAL 사이에 속하는 등급(GRADE)을 조회하였습니다. 

LEFT JOIN 예시와 마찬가지로, SALGRADE 테이블의 모든 데이터를 포함하고 EMP 테이블의 일부 데이터만 연결하였습니다. 

따라서 EMP 테이블에는 없지만 SALGRADE 테이블에는 있는 등급 정보도 함께 조회됩니다.

 

SELECT E.ENAME, S.GRADE FROM EMP E RIGHT JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL; // 출력 결과

 

4. FULL JOIN

 

FULL JOIN은 두 개의 테이블에서 모든 레코드를 선택하고 조인을 수행하는 연산자입니다. 

 

즉, INNER JOIN과 LEFT JOIN, RIGHT JOIN의 결과를 합집합으로 반환합니다.

 

EMP 테이블을 기준으로 예시를 들어보겠습니다. 

EMP 테이블과 DEPT 테이블을 FULL JOIN 하여 모든 사원과 부서 정보를 조회해보겠습니다.

 

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E
FULL JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

위 쿼리는 EMP 테이블과 DEPT 테이블을 DEPTNO 컬럼을 기준으로 FULL JOIN 하여 

 

모든 사원과 부서 정보를 조회합니다. 

 

만약 EMP 테이블이나 DEPT 테이블에는 존재하지만 다른 쪽 테이블에는 존재하지 않는 데이터가 있을 경우에도 

 

결과에 포함됩니다.

만약 EMP 테이블과 DEPT 테이블의 DEPTNO 컬럼에 공통된 값이 없다면, NULL 값이 반환됩니다.

 

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME FROM EMP E FULL JOIN DEPT D ON E.DEPTNO = D.DEPTNO; // 출력 결과

 

5. SELF JOIN

 

SELF JOIN은 하나의 테이블에서 서로 다른 레코드를 조인하는 것을 의미합니다. 

 

즉, 자기 자신과 조인하는 것입니다.

 

EMP 테이블에서 SELF JOIN을 통해 EMPLOYEE들 중에서 서로 다른 직무를 가진 EMPLOYEE끼리 조인할 수 있습니다.

예를 들어, EMP 테이블에서 직무가 같은 EMPLOYEE들끼리 그룹을 지어서 

 

각 그룹의 평균 급여를 구하고 싶다면, SELF JOIN을 사용하여 아래와 같이 쿼리를 작성할 수 있습니다.

 

SELECT e1.JOB, AVG(e1.SAL)
FROM EMP e1
JOIN EMP e2
ON e1.JOB = e2.JOB
GROUP BY e1.JOB;

 

위 쿼리에서는 EMP 테이블을 두 번 사용하여 e1과 e2라는 별칭을 사용하였습니다. 

e1과 e2를 조인할 때, e1.JOB = e2.JOB의 조건을 사용하여 직무가 같은 EMPLOYEE들을 조인하였습니다. 

이렇게 SELF JOIN을 사용하여 직무가 같은 EMPLOYEE들끼리 그룹을 지어 평균 급여를 구할 수 있습니다.

 

SELECT e1.JOB, AVG(e1.SAL) FROM EMP e1 JOIN EMP e2 ON e1.JOB = e2.JOB GROUP BY e1.JOB; // 출력 결과

반응형