저자 : 아사이 아츠시
출판 : 한빛미디어
발매 : 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을 사용해 외부결합을 시행
'Study > DB' 카테고리의 다른 글
[SQL 첫걸음] 8장.데이터베이스 설계 - 35.정규화 (0) | 2018.09.30 |
---|---|
[SQL 첫걸음] 8장.데이터베이스 설계 - 34.데이터베이스 설계 (0) | 2018.09.30 |
[SQL 첫걸음] 7장.복수의 테이블 다루기 - 31.집합 연산 (0) | 2018.09.27 |
[SQL 첫걸음] 6장.데이터베이스 객체 작성과 삭제 - 30.뷰 작성과 삭제 (0) | 2018.09.27 |
[SQL 첫걸음] 6장.데이터베이스 객체 작성과 삭제 - 29.인덱스 작성과 삭제 (0) | 2018.09.16 |