기록

database - 결합(JOIN) 본문

[Study]/Database

database - 결합(JOIN)

Dannnnnn 2019. 8. 3. 15:41
반응형

앞서 배운 집합연산은 행 지향 연산이다.

이들 집합연산을 사용하면 행이 늘거나 줄어든다.

한편, 이 집합연산들에는 열 수를 변화시킬 수 있는 힘이 없다.

집합 연산 대상의 테이블은 열 수가 일치한다는 것을 전제로 하기 때문이다.

 

이번 포스팅에서 배울 결합(JOIN)이라는 연산은, 다른 테이블에서 열을 가지고와 열을 늘리는 처리다.

 

내부 결합 ㅡ INNER JOIN (내부의 정보만 가지고 결합)

가장 자주 쓰이는 결합이다.

 

SELECT a.store_id, a.store_name, a.goods_id, b.goods_name, b.sell_price
FROM StoreGoods AS a INNER JOIN Goods AS b
ON a.goods_id = b.goods_id
WHERE a.store_name = '서울';

 

ON : 결합 조건, 결합 전용 WHERE구라고 할 수 있다. 반드시 기술해야 함. 작성 부분은 FROM과 WHERE 사이.

 

이렇게 새롭게 생성된 테이블은 SELECT문이 실행되고 있는 동안에만 존재하기에 실행 후에는 사라진다.

이 테이블을 계속 유지하고 싶다면 '뷰'로 만들면 된다.

 

외부 결합 ㅡ OUTER JOIN (외부의 정보도 가져오는 결합)

SELECT b.store_id, b.store_name, b.goods_id, a.goods_name, a.sell_price
FROM Goods AS a LEFT OUTER JOIN StoreGoods AS b
ON a.goods_id = b.goods_id;

 

OUTER JOIN이 실무에서 사용되는 경우는, 행 수가 정해진 장표를 출력해야 하는 경우다.

이를 사용하면 항상 행 수가 고정된 결과를 얻을 수 있다.

 

ㅡ 세 개 이상의 테이블을 사용한 결합

SELECT a.store_id, a.store_name, a.goods_id, b.goods_name, b.sell_price, c.stock_num
FROM StoreGoods AS a 
INNER JOIN Goods AS b 
ON a.goods_id = b.goods_id
INNER JOIN StockGoods AS c
ON a.goods_id = c.goods_id
WHERE c.storage_id = 'S001';

 

앞의 쿼리에서 창고 재고 수열에 관한 정보를 추가했다.

 

크로스 결합 ㅡ CROSS JOIN

SELECT a.store_id, a.store_name, a.goods_id, b.goods_name
FROM StoreGoods AS a CROSS JOIN Goods AS b;

 

크로스 결합은 두 개의 테이블에 있는 모든 레코드의 가능한 모든 조합을 만들어낸다.

때문에 ON 구를 사용할 수 없다.

a테이블 행 x b테이블 행 = 크로스 결합 테이블 결과 행의 수

 

 

반응형