Join 종류

이호준·2022년 3월 13일
0

조인의 종류에는 아래와 같이 대표적으로 4가지가 존재합니다.

  • Inner join
  • Left outer join
  • Right outer join
  • Full outer join

fruit 테이블

cliet 테이블

Inner join

Inner join은 교집합 연산과 같습니다. 조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터만 조인해서 결과 데이터 집합으로 추출하게 됩니다.

  • ANSI-SQL
SELECT 컬렴명 [컬럼명],
  		     FROM 테이블A
  	 [INNER] JOIN 테이블B
             ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
;

mysql 코드

SELECT B.CID,
       B.NAME,
       B.FID,
       A.NAME,
       A.PRICE,
       B.COUNT
        FROM FRUIT A
        JOIN CLIENT B ON A.FID=B.FID
;

실행 결과와 같이 fruit테이블에 없는 상품을 주문한 사람인 ALEX와 주문을 받지 못한 상품인 망고 행은 추출이 추출이 안됐다. 즉, fruit 테이블과 client 테이블에서 조인키컬럼인 FID를 두 테이블에서 모두 갖고 있지 않다면 출력이 안된다.

실행 결과

Left outer join

Left outer join은 교집합 연산 결과와 차집합 연산의 결과를 합친 것과 같습니다.
조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 Left outer join 키워드 왼쪽에 명시된 테이블에만 존재하는 데이터 결과를 추출한다.

  • ANSI-SQL
SELECT 컬렴명 [컬럼명]
			   FROM 테이블A
	LEFT OUTER JOIN 테이블B
    ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
;
  • MySQL 코드
SELECT B.CID,
       B.NAME,
       B.FID,
       A.NAME,
       A.PRICE,
       B.COUNT
        FROM FRUIT A
        LEFT OUTER JOIN CLIENT B ON A.FID=B.FID
;

실행 결과

다음과 같이 Left outer join 왼쪽 테이블인 fruit 테이블의 fid값이 client에 없더라도 fruit 테이블의 데이터는 모두 출력된다.

Right outer join

Right outer join도 교집합 연산 결과와 차집합 연산 결과를 합친 것과 같습니다. 차집합의 기준 집합이 Left outer join과 반대일 뿐입니다.

  • ANSI-SQL
SELECT 컬렴명 [컬럼명]
		FROM 테이블A
        RIGHT OUTER JOIN 테이블B
        ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
  • MySQL 코드
SELECT B.CID,
       B.NAME,
       B.FID,
       A.NAME,
       A.PRICE,
       B.COUNT
        FROM FRUIT A
        RIGHT OUTER JOIN CLIENT B ON A.FID=B.FID
;
  • 실행 결과

    다음과 같이 Right outer join의 오른쪽 테이블인 client 테이블의 fid값이 fruit 없더라도 client 테이블의 데이터는 모두 출력된다.

Full outer join

Full outer join은 합집합 연산 결과와 같습니다.
조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 한쪽 테이블에만 존재하는 데이터도 모두 결과 데이터 집합으로 추출됩니다.

-ANSI-SQL

SELECT 컬렴명 [컬럼명]
		FROM 테이블A
        FULL OUTER JOIN 테이블B
        ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼

-Mysql 코드

SELECT B.CID,
       B.NAME,
       B.FID,
       A.NAME,
       A.PRICE,
       B.COUNT
        FROM FRUIT A
        LEFT JOIN CLIENT B ON A.FID=B.FID
UNION
SELECT B.CID,
       B.NAME,
       B.FID,
       A.NAME,
       A.PRICE,
       B.COUNT
        FROM FRUIT A
        RIGHT JOIN CLIENT B ON A.FID=B.FID
;

MySQL은 공식적으로 Full outer join을 지원하지 않는다. 하지만 Left join과 Right join을 Union하여 구현할 수 있다.
실행결과

실행 결과와 같이 모든 테이블의 값들이 다 나오게 되며 조인키컬럼이 겹치지 않은 값들은 Null 값을 갖고 나오게 된다.

profile
함께 성장하는 개발자

0개의 댓글