기록
database - 결합(JOIN) 본문
앞서 배운 집합연산은 행 지향 연산이다.
이들 집합연산을 사용하면 행이 늘거나 줄어든다.
한편, 이 집합연산들에는 열 수를 변화시킬 수 있는 힘이 없다.
집합 연산 대상의 테이블은 열 수가 일치한다는 것을 전제로 하기 때문이다.
이번 포스팅에서 배울 결합(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테이블 행 = 크로스 결합 테이블 결과 행의 수
'[Study] > Database' 카테고리의 다른 글
database - 윈도우 함수 (OLAP 함수) (0) | 2019.08.03 |
---|---|
database - 관계 나눗셈 (0) | 2019.08.03 |
database - 집합 연산(UNION, INTERSECT, EXCEPT) (0) | 2019.08.02 |
database - CASE 식 (CASE WHEN , ELSE , END) (0) | 2019.08.02 |
database - 술어 (LIKE, BETWEEN, IS NULL, IN, EXISTS) (0) | 2019.07.31 |