데이터베이스/Oracle SQL

오라클 SQL과 PL/SQL ( INNER JOIN - 등가 조인 )

동띠기 2021. 8. 10. 21:37

EQUI JOIN(등가 조인)

가장 많이 사용되는 조인으로 선행 테이블에서 데이터를 가져온 후 조인 조건절을 검사해서 동일한 조건을 가진 데이터를 후행 테이블에서 꺼내오는 방법입니다.
조건절에서 =(EQUAL)을 사용해서 EQUI JOIN이라고 합니다.

예를 통해 알아보겠습니다.
EMP 테이블과 DEPT 테이블을 조인해서 조회하겠습니다.

 

ORACLE 

SELECT EMPNO, ENAME, DNAME 
FROM EMP E , DEPT D 
WHERE E.DEPTNO = D.DEPTNO;

ANSI JOIN

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

위에서 살펴본 바와 같이 SELECT 절에 테이블이름.컬럼이름 같은 형태로 적어주면 되는데 만약 컬럼 이림이 하나의 테이블에만 있을 경우에는 테이블 이름을 생략해도 자동으로 이름을 찾아서 실행합니다.
하지만 양쪽 테이블에 모두 있는 컬럼일 경우는 반드시 테이블이름을 적어야 하며 안적어줄 경우 에러가 발생합니다.
그래서 JOIN을 사용할 경우 반드시 테이블이름.컬럼이름으로 사용하는 습관을 들여야 합니다.

 

예 1. 학생테이블과 교수테이블을 JOIN하여 학생의 이름과 지도교수 이름을 출력하세요.

ORACLE 

SELECT S.NAME STU_NAME, P.NAME PROF_NAME
FROM STUDENT S, PROFESSOR P
WHERE S.PROFNO = P.PROFNO;


ANSI

SELECT S.NAME "STU_NAME", P.NAME "PROF_NAME"
FROM STUDENT S JOIN PROFESSOR P 
ON S.PROFNO = P.PROFNO;

앞의 결과를 보면 총 15건의 데이터가 출력된 것을 알수 있습니다.
그러나 학생 테이블의 데이터는 총 20건입니다. 즉 5명의 학생이 안나왔다는 것입니다.
이것은 EQUI JOIN의 특성으로 양쪽 테이블에 모두 데이터가 존재해야 결과가 나오는데 5명의 학생은 지도 교수가 결정이 안된 상태라서 결과에서 빠지게 된것입니다.
만약 이렇게 한쪽에 없는 데이터를 가진 값까지 다 보고 싶다면 차후 기술할 OUTER JOIN을 활용하면 됩니다.

 

예 2. 학생테이블과 학과테이블, 교수테이블을 조인하여 학생의 이름과 학생의 학과이름, 학생의 지도교수 이름을 출력하세요.

ORACLE 

SELECT S.NAME STU_NAME, P.NAME PROF_NAME, D.DNAME DEPT_NAME
FROM STUDENT S, PROFESSOR P, DEPARTMENT D
WHERE S.DEPTNO1 = D.DEPTNO 
AND S.PROFNO = P.PROFNO;


ANSI

SELECT S.NAME "STU_NAME", P.NAME "PROF_NAME", D.DNAME "DEPT_NAME"
FROM STUDENT S JOIN DEPARTMENT D
ON S.DEPTNO1 = D.DEPTNO
JOIN PROFESSOR P
ON S.PROFNO = P.PROFNO;

위 예제는 3개의 테이블을 JOIN 하여 결과를 나타냅니다. 이 경우는 ORACLE JOIN 과 ANSI의 JOIN 문법이 많이 차이가 나는데 ANSI의 경우 쿼리의 2번과 3번 행의 조건으로 먼저 조인을 수행한 후 나온 결과값을 가지고 4번과 5번행의 조건으로 조인을 수행합니다.
조인 테이블이 더 늘어날 경우 계속 JOIN ~ ON 조건을 추가하면 됩니다.

 

 

예 3. 학생 테이블을 조회하여 1전공(DEPTNO1) 이 101번인 학생들의 이름과 각 학생들의 지도교수 이름을 출력하세요

ORACLE 

SELECT S.NAME STU_NAME, P.NAME PROF_NAME
FROM STUDENT S, PROFESSOR P
WHERE S.PROFNO = P.PROFNO 
AND S.DEPTNO1 = 101;

ANSI

SELECT S.NAME "STU_NAME", P.NAME "PROF_NAME"
FROM STUDENT S JOIN PROFESSOR P
ON S.PROFNO = P.PROFNO 
AND S.DEPTNO1 = 101;

 

위의 예제의 경우 3번 줄은 JOIN을 수행하기 위한 조건이라 조인조건이라 부르고 4번 줄은 검색을 하는 용도로 사용되기 때문에 검색 조건이라 부릅니다.
위와 같이 조인 조건과 검색 조건이 동시에 있을 경우 검색 조건을 먼저 검색해서 데이터의 검색범위를 줄여놓고 조인을 수행합니다. 그렇기 조인의 속도가 빨라집니다.

728x90