fruit 테이블
cliet 테이블
Inner join은 교집합 연산과 같습니다. 조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터만 조인해서 결과 데이터 집합으로 추출하게 됩니다.
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 키워드 왼쪽에 명시된 테이블에만 존재하는 데이터 결과를 추출한다.
SELECT 컬렴명 [컬럼명]
FROM 테이블A
LEFT OUTER JOIN 테이블B
ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
;
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도 교집합 연산 결과와 차집합 연산 결과를 합친 것과 같습니다. 차집합의 기준 집합이 Left outer join과 반대일 뿐입니다.
SELECT 컬렴명 [컬럼명]
FROM 테이블A
RIGHT OUTER JOIN 테이블B
ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
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
;
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 값을 갖고 나오게 된다.