SQL 첫걸음 - 7장 테이블 결합(2/2)
1. 곱집합과 교차결합
곱집합
두 개의 집합을 곱하는 연산 방법으로 ‘적집합’ 또는 ‘카티전곱(Cartesian product)’이라고도 불림. 곱집합은 야구팀들의 대전표를 짜는 것과 비슷한 개념. 집합 X가 {A,B,C}라는 요소를 가지고, 집합 Y가 {1,2,3}이라는 요소를 가질 때 집합 X와 Y의 곱집합을 구하면 아래와 같음.
출처 : SQL 첫걸음
교차결합(Cross Join)
SELECT *
FROM 테이블명1, 테이블명2
데이터베이스의 테이블은 집합의 한 종류라 할 수 있음. 만약 SELECT명령의 FROM구에 테이블을 두 개 지정하면 이들은 곱집합으로 계산됨.
FROM 구에 복수의 테이블을 지정하면 교차결합을 함. 교차결합은 두 개의 테이블을 곱집합으로 계산. UNION 으로 합집합을 구했을 경우엔 세로 방향으로 더해졌다면, FROM 구로 테이블을 결합할 경우엔 가로(열) 방향으로 확대됨.
2. 내부결합
교차결합의 경우 테이블 수가 많이지면 조합 수가 엄청나게 늘어나 집합이 거대해짐. 실제 결합방법으로는 교차결합보다 내부결합이 자주 사용됨.
출처 : SQL 첫걸음
1) 상품 테이블과 재고수 테이블을 교차결합
2) 상품 테이블의 상품코드와 재고수 테이블의 상품코드가 서로 같은 행을 검색.
===> 이렇게 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것을 ‘내부결합(Inner Join)’이라 부름.
3) 상품분류가 ‘식료품’인 조건 추가. 또한 상품명과 재고수만 반환하도록 SELECT 구에 열을 지정. => 원하는 결과를 얻음!
첫 번째 조건식은 교차굘합으로 계산된 곱집합에서 원하는 조합을 검색 ==> ‘결합조건’이라 부름. 두 번째 조건식은 검색 조건.
3. INNER JOIN으로 내부결합
위와 같은 결합방법은 현재는 사용하지 않는 구식 방법. 최근에는 INNER JOIN 키워드를 사용한 결합방법이 일반적으로 통용됨. 위 사례를 INNER JOIN을 활용해 바꾸면 아래와 같음.
SELECT 상품.상품명, 재고수.재고수
FROM 상품
INNER JOIN 재고수
ON 상품.상품코드 = 재고수.상품코드
WHERE 상품.상품분류 = '식료품';
SELECT * FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건
INNER JOIN 은 내부결합이라는 의미. 구식방법에서는 WHERE 구에 결합조건을 지정하였지만 INNER JOIN에선 ON을 사용하여 결합조건을 지정. INNER JOIN으로 두 개의 테이블을 가로로 결합할 수 있음.
4. 외부결합 - LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN
결합 방법은 크게 내부결합과 외부결합의 두 가지로 구분됨. 외부결합이라해도 교차결합으로 결합 조건을 지정하여 검색한다는 기본적인 사고 방식은 같음. 외부결합은 ‘어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지’를 변경할 수 있는 결합 방법.
ex) 상품3테이블에 상품코드가 0009인 행을 새로 추가. 재고수 테이블엔 아직 이 상품에 대한 데이터가 없음.
이런상태에서 곱집합을 구해도 0009 = 0009 가 되는 행이 존재하지 않아 내부결합 결과에선 상품코드가 0009인 상품이 제외됨.
===> 이런 경우에 외부결합을 사용. 외부결합은 결합하는 테이블 중에 어느 쪽을 기준으로 할지 결정할 수 있다.
기준 테이블에만 존재하는 데이터행도 모두 표시한다.
상품 테이블(결합의 왼쪽)을 기준으로 INNER JOIN 대신 LEFT JOIN을 사용.
재고수 테이블엔 0009에 대한 데이터가 없어 값이 NULL로 표시됨. 기준이 되는 테이블(상품 테이블)을 JOIN의 왼쪽에 기술했으므로 LEFT JOIN이라 지정. 오른쪽의 테이블을 기준으로 삼고 싶은 경우에는 RIGHT JOIN을 사용해 외부결합을 시행
출처 : https://smilejh.tistory.com/