JOIN
은 필요한 데이터가 여러 테이블에 분산되어 있는경우 테이블과 테이블간의 관계를 이용하기 위한 것입니다.
만약 사원의 정보와 함께 사원의 근무부서의 위치를 함께 조회하고 싶다면, 사원테이블과 부서테이블을 둘 다 조회해야합니다.
이러한 경우에 사용되는 것이 JOIN
입니다.
여러 테이블을 JOIN
하기 위해서는 JOIN 조건
이라는 것이 필요합니다.
JOIN 조건에 대해서는 뒤에서 자세히 설명하고 여기서는 JOIN 조건을 기술하지 않으면 생기는 문제점을 알아보려고 합니다.
우선 JOIN 조건을 기술하지 않더라도 여러개의 테이블을 동시에 조회할 수 있습니다.
하지만 JOIN 조건을 기술하지 않으면 데카르트 곱(Cartesian Product)
이 발생하게 됩니다.
데카르트 곱은 각 집합을 이루는 모든 원소의 순서쌍을 의미합니다.
이것은 FROM절에 기술된 테이블을 함께 조회했을 때 출력결과가 될 수 있는 모든 행을 출력한다는 의미입니다.
테이블의 크기가 작다면 문제가 생기지 않겠지만, 테이블의 크기가 클수록 출력되는 결과는 기하급수적으로 늘어나기때문에 성능에 큰 영향을 미치며, 우리가 원하는 정보를 정확하게 조회할 수 없습니다.
JOIN을 하기 위해서는 FROM절에 여러개의 테이블이 명시된다고 설명했습니다.
그렇다면 두 개의 테이블을 FROM절에 기술하는데 두 테이블이 동일한 이름의 컬럼을 가지고 있다면 어떻게 구분해야 할까요?
이럴때 사용되는것이 바로 테이블 별칭입니다.
우선 예시부터 보겠습니다.
[테이블 별칭을 사용하지 않는 경우]
SELECT DEPTNO
FROM EMP E, DEPT D
EMP 테이블과 DEPT 테이블에 서로 별칭을 지정해주고 두 테이블이 공통으로 가지고 있는 컬럼인 DEPTNO컬럼을 조회하는 쿼리입니다.
실행결과는 ORA-00918: column ambiguously defined
라는 오류가 발생하게 됩니다.
오류의 의미는 컬럼이 모호하게 정의되었다
라는 것입니다.
별칭은 지정해주었지만, 어떤 테이블의 DEPTNO컬럼을 조회해야할지 모르는 것입니다.
따라서 JOIN을 한 경우는 테이블 별칭을 사용하여 쿼리를 작성해야 합니다.
[테이블 별칭을 사용하는 경우]
SELECT DISTINCT D.DEPTNO
FROM EMP E, DEPT D
위에 DISTINCT
는 중복을 제거해주는 기능을 가진 키워드입니다.
JOIN이 무엇인지, JOIN을 왜 사용하는지, JOIN조건을 왜 기술해야 하는지에 대해 알아보았습니다.
다음 포스팅에서는 JOIN의 종류와 간단한 예시를 살펴보겠습니다.