본문 바로가기

DATABASE/JOIN : 여러 테이블을 하나의 테이블처럼

01.JOIN

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

JOIN은 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식으로, 집합연산자를 사용한 결과와 비슷하다.

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

JOIN을 사용한 결과는 두 개 이상의 테이블 데이터를 가로로 연결한 것.

 

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

지금까지 사용했던 SELECT문은 FROM절에 EMP테이블 하나만을 명시했지만, FROM절에는 여러 개 테이블을 지정하는 것이 가능하다.

테이블이 아니더라도 테이블 형태, 즉 열과 행으로 구성된 데이터 집합이면 모두 FROM절에 지정이 가능하다.

view, subquery 등이 해당하며, 나중에 다시 알아보자.

 

SELECT절의 여러 열을 구분할 때와 마찬가지로 FROM절에 여러 테이블을 명시할 때 쉼표(,)를 구분자로 사용하여 지정한다.

WHERE, GROUP BY, ORDER BY절 등 다른 절도 그대로 사용할 수 있다.

 

WHERE절을 활용한 조인 조건 활용의 중요성

:  WHERE절에 조인 조건이 없을 경우 결과로 나올 수 있는 모든 행을 조합하기 때문에 데카르트 곱 현상이 발생한다.

  ( SELECT * FROM EMP, DEPT ORDER BY EMPNO;  >> 14 x 4 = 56개의 행 출력)

 

:  명시한 테이블의 데이터를 가로로 연결하기위해 JOIN을 사용하지만, 어떤 데이터를 가로로 연결해야하는지는 나의 몫이다.

 

: 조인을 사용한 데이터 출력은 조인 대상 테이블이 많을수록 조합 데이터 중 정확한 데이터만 뽑아내도록 고민을 해야한다.

 

: 그래서 WHERE절이 중요하다! 두 테이블의 데이터를 가로로 연결할때 같은 열이름의 같은데이터만 조회할수있으면 정확한 결과를 불러오게 된다. 구별하는 방법은 열 앞에 테이블 이름을 명시하는 것이다. [ 테이블이름.열이름 ]

 

테이블의 별칭 설정

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

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

지정한 별칭은 테이블의 열을 지칭하는데 사용할 수 있고, 출력 결과에 영향을 주지않는다.

 

주의 : SELECT절의 * 사용

SELECT절에서 출력할 열을 *로 표현하면

- 어떤 열이 어떤 순서로 출력될지 명확히 알 수 없고,

- 특정 열의 생성, 삭제, 수정등의 경우에 그 변화를 감지 및 변화에 따른 프로그램 수정이 쉽지 않다.

따라서 SQL문은 급하게 데이터를 조회하는 경우가 아닌 이상 데이터베이스를 사용하는 프로그램 내부에서는 출력할 각 열을 하나하나 열거하여 표시해준다.