본문 바로가기
My Image
프로그래밍/DataBase

[DataBase] FROM 절에 사용하는 JOIN 의 형태

by Lim-Ky 2018. 1. 27.
반응형




안녕하세요. Limky 입니다. 이번 시간은 JOIN에 대해 알아보겠습니다.

JOIN은 SQL의 꽃이라고 불립니다. 그만큼 중요합니다. JOIN은 쉽게 말해 정규화로 인해 용도와 목적에 맞게 분리된 테이블에서 내가 관심있는 데이터만 줍줍해 내가 원하는 테이블을 구성하는 것입니다. 

자 개념적인 설명은 했고, 구체적으로 어떤 JOIN이 있는지 알아보겠습니다.

특별히 FROM 절에서 JOIN을 어떻게 사용하는지 포커스를 맞춰 설명하겠습니다.

또한 JOIN에 대해 어느 정도 알고 있고, 매번 까먹는 여러 JOIN들의 개념을 빠르게 정리하는 것에 초점을 맞췄기 때문에 빠르게 핵심만 캐치하시면 됩니다.


FROM 절 JOIN 형태


ANSI/ISO SQL에서 표시하는 FROM 절의 JOIN 형태는 다음과 같습니다.


1. INNER JOIN

2. NATURAL JOIN

3. USING 조건절

4. ON 조건절

5. CROSS JOIN

6. OUTER JOIN


자 하나 하나씩 알아봅시다.



1. INNER JOIN 


-JOIN 조건에서 동일한 값이 있는 행만 반환

-만약 INNER JOIN 표시가 있다면 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에 사용하겠다라는 뜻을 가짐

-고전적인 방식인 WHERE 절의 INNER JOIN 방식을 사용한다면, INNER JOIN 키워드 사용 X

-USING, ON 조건절을 필수적으로 사용해야 함(INNER JOIN 키워드를 사용할 경우)

-INNER 키워드 생략 가능, INNER JOIN을 통째로 생략도 가능.

-'*' 와일드카드를 사용하면 개별적인 컬럼으로 출력



--고전적인 WHERE의 INNER JOIN문 


SELECT T.TEAM_NAME, S.STADIUM_ID, S.STADIUM_NAME

FROM TEAM T, STADIUM S

WHERE T.STADIUM_ID = S.STADIUM_ID;


--FROM절에 INNER JOIN 키워드를 사용함으로, ON, USING 조건절을 필수로 써야함. 여기선 ON절을 사용!


SELECT T.TEAM_NAME, S.STADIUM_ID, S.STADIUM_NAME

FROM TEAM T INNER JOIN STADIUM S

                    ON T.STADIUM_ID = S.STADIUM_ID;



2. NATURAL JOIN


-별도의 컬럼을 지정하지 않아도, 두 개의 테이블에서 공통된 컬럼을 자동으로 인식하여 JOIN을 처리

-JOIN에 사용된 컬럼들은 같은 데이터 유형이여야 함

-ALIAS나 테이블명과 같은 접두사를 사용할 수 없음

-'*' 와일드카드를 사용하면 하나의 컬럼으로 처리, 우선적으로 출력됨.


--자연스럽게 두 테이블 다 가지고 있는 DEPTNO 컬럼으로 JOIN함 


SELECT DEPTNO, EMPNO, ENAME, DNAME

FROM EMP NATURAL JOIN DEPT;




3. USING 조건절


-USING 조건절을 이용해 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있음

-'*'' 와일드카드를 사용한 것 처럼 SELECT 순서를 정하지 않으면 USING 조건절의 컬럼이 우선적으로 출력

-ALIAS나 테이블 이름과 같은 접두사를 사용할 수 없음

-USING조건에 사용되지 않으면서, 두 테이블에 동일하게 있는 컬럼은 개별적으로 출력됨

-USING 조건에는 1개 이상의 컬럼을 정의할 수 있음


--USING조건절 안에 있는 컬럼으로 EQUI JOIN을 실행함


SELECT TEAM_NAME, STADIUM_ID, STADIUM_NAME

FROM TEAM JOIN STADIUM USING(STADIUM_ID);




4. ON 조건절


-JOIN 서술부(ON조건절)와 비 JOIN 서술부(WHERE 조건절)를 분리하여 이해하기 쉬움

-컬럼명이 다르더라도 JOIN조건을 사용할 수 있음

-임의의 조건을 지정할 수 있음, ON조건절에 사용된 괄호는 옵션 사항

-USING 조건과 달리 정확한 컬럼 구별을 위해 ALIAS나 테이블 명과 같은 접두사를 지정해줘야 함

-ON조건절은 WHERE절의 JOIN조건과 같은 기능이다 생각하면 됨 (ON조건절은 WHERE조건절의 역할을 함)

-다만, 테이블이 많이 사용될 경우 가독성이 떨어질 수 있음.


--ON 조건절은 JOIN의 조건을 직접 걸 수 있다. 마치 WHERE조건절 처럼!

SELECT T.TEAM_NAME, S.STADIUM_ID, S.STADIUM_NAME

FROM TEAM T JOIN STADIUM S 

              ON(T.STADIUM_ID = S.STADIUM_ID);

              

SELECT T.TEAM_NAME, S.STADIUM_ID, S.STADIUM_NAME

FROM TEAM T JOIN STADIUM S 

              ON(T.STADIUM_ID = S.HOMETEAM_ID); 


STADIUM_ID 와 HOMETEAM_ID는 같은 데이터지만, 컬럼 이름이 다르다. 하지만 JOIN할 수 있음




5. CROSS JOIN


-E.F.CODD박사가 언급한 PRODUCT 개념으로 테이블 간 JOIN조건이 없는 경우, 생길 수 있는 모든 데이터의 조합을 뜻함

-양 쪽 집합의 M*N 건의 데이터 조합이 발생 됨 (A테이블 14건 * B테이블 4건 즉 총 48건의 데이터 조합 건수 발생)

-CARTESIAN PRODUCT 또는 CROSS PRODUCT 라고 함


SELECT P.PLAYER_NAME, T.TEAM_NAME

FROM PLAYER P CROSS JOIN TEAM T;



6. OUTER JOIN


OUTER JOIN은 내용이 길어 다음 포스팅으로 끊어가겠습니다.





반응형

댓글