[DataBase] 조인 , 별칭 설정

 조인


집합 연산자와 조인의 차이점

조인은 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식입니다 .


집합연산자를 사용한 결과 : 두 개 이상 SELECT문의 결과 값을 세로로 연결한 것입니다 . 

조인을 사용한 결과 : 두개 이상의 테이블 데이터를 가로로 연결한 것입니다 .  











여러 테이블을 이용할 때 FROM 절

 
지금 까지 사용한 SELECT문은 다음과 같이 FROM절에 EMP 테이블 하나만을 명시했습니다 . 



그러나  FROM 절에는 여러 개의 테이블을 지정하는 것이 가능합니다 . 

SELECT 
    FROM [table1 ,table2 ,talbe3 ... tableN]


조금 더 정확하게는 꼭 테이블이 아니더라도 테이블의 형태, 즉 열과 행으로 구성된 데이터 집합이면 모두 FROM 절에 지정 가능합니다 . 
View, Subquery등이 이에 해당합니다 . 

FROM 테이블에 여러 테이블 선언 

SELECT *
    FROM EMP, DEPT
 ORDER BY EMPNO ;































이렇게 EMP테이블과 DEPT 테이블을 FROM 절에 함께 명시하여 출력하면 생각보다 많은 양의 데이터가 출력 됩니다 . 
이는 FROM 절에 명시한 각 테이블을 구성하는 행이 모든 경우의 수로 조합되어 출력되게 때문입니다 . 


문제점

이 출력 결과에는 문제가 있습니다 . 
가장 먼저 출력된 EMP 테이블의 SMITH를 살펴보면 , 



DEPTNO 열 값은 20입니다 . 
그리고 SMITH가 근무하는 부서의 데이터는 DEPT 테이블의 DETNO 열 값이 20인 행이 됩니다 . 

즉, DALLAS에 있는 RESEARCH 부서가 SMITH 사원이 근무하는 부서 인 것입니다 . 


조인을 통한 출력은 결과로 나올 수 있는 모든 행을 조합하기 때문에 사원 데이터와 부서 데이터가 정확이 맞아 떨어지지 않는 데이터도 같이 출력 됩니다 .
 
명시한 테이블을 가로로 연결하기 위해 조인을 사용하지만, 어떤 데이터를 가로로 정확히 연결 해야 하는 지의 기준은 데이터 베이스가 아닌 사용자가 직접 정해야 합니다 .

이 때 출력 행을 선정하는 조건식을 명시하는 WHERE 절이 중요한 역할을 합니다 . 
 

DEPTNO 열 기준으로 정확하게 출력 

  • 열 이름을 비교하는 조건식을 이용한 출력 

SELECT *
    FROM EMP,DEPT
  WHERE EMP.DEPTNO = DEPT.DEPTNO
 ORDER BY EMPNO ;








 

 전에 결과와는 다르게 열값이 같은 14개의 행만 출력됩니다 .

각 행별 부서 정보도 정확하게 연결 되어 있습니다 . 

이는 FROM 절에 명시된 테이블의 모든 데이터를 조합한 결과에서 WHERE절을 사용해 출력하는 기준, 즉 두 테이블의 DEPTNO 열이 일치한 데이터만 출력하도록 WHERE절의 조건식을 지정해 주었기 때문입니다 . 




테이블의 별칭 설정 

FROM절에 지정한 테이블에는 SELECT 절의 열에 사용한 것 처럼 별칭을 지정할 수 있습니다.

테이블의 별칭을 지정할 때는 테이블 이름에서 한 칸 띄운 후 지정합니다 . 


FROM 테이블 1 별칭 1, 테이블 2 별칭 2 ....

테이블 이름을 별칭으로 표현 

SELECT *
    FROM EMP E,DEPT D
  WHERE E.DEPTNO = D.DEPTNO
 ORDER BY EMPNO ;