Study/DB

[SQL 첫걸음] 7장.복수의 테이블 다루기 - 32.테이블 결합

momo02 2018. 9. 27. 21:05
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 

발매 : 2015.11.01



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. 내부결합

- 교차결합의 경우 테이블 수가 많이지면 조합 수가 엄청나게 늘어나 집합이 거대해짐. 실제 결합방법으로는 교차결합보다 내부결합이 자주 사용됨.


ex ) 

출처 : SQL 첫걸음


1) 상품 테이블과 재고수 테이블을 교차결합


2) 상품 테이블의 상품코드와 재고수 테이블의 상품코드가 서로 같은 행을 검색.

===> 이렇게 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것을 '내부결합(Inner Join)'이라 부름. 


3) 상품분류가 '식료품'인 조건 추가. 또한 상품명과 재고수만 반환하도록 SELECT 구에 열을 지정. => 원하는 결과를 얻음! 

- 첫 번째 조건식은 교차굘합으로 계산된 곱집합에서 원하는 조합을 검색 ==> '결합조건'이라 부름.

  두 번째 조건식은 검색 조건. 



3. INNER JOIN으로 내부결합

- 위와 같은 결합방법은 현재는 사용하지 않는 구식 방법. 최근에는 INNER JOIN 키워드를 사용한 결합방법이 일반적으로 통용됨. 

위 사례를 INNER JOIN을 활용해 바꾸면 아래와 같음.

1
2
3
4
  SELECT 상품.상품명, 재고수.재고수 
    FROM 상품 INNER JOIN 재고수  
      ON 상품.상품코드 = 재고수.상품코드 -- 결합 조건(조인 조건) 
   WHERE 상품.상품분류 = '식료품';
cs

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을 사용해 외부결합을 시행 

반응형