Don't forget to smile
[혼자 공부하는 SQL] Chapter 4-2. 두 테이블을 묶는 조인 본문
조인(Join) : 두 개의 테이블을 묶어 하나의 결과를 만드는 것
내부 조인 : 두 테이블을 연결할 때 가장 많이 사용되는 조인
외부 조인 : 두 테이블에 모두 데이터가 있어야 하는 내부 조인과 다르게 한쪽에만 데이터가 있어도 결과가 나오는 조인
상호 조인 : 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인
자체 조인 : 다른 조인과 달리 자기 자신 1개의 테이블만 조인하는 것
일대다(one to many) 관계 : 한쪽 테이블에는 하나의 값만 존재해야하지만 반대쪽에는 여러 개 값이 존재할 수 있는 경우
주로 기본 키와 외래 키 관계로 맺어지기 때문에 PK-FK 관계라고도 함
<내부 조인 기본>
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 조건>
[WHERE 검색 조건]

1) buy 테이블의 mem_id 중 GRL을 추출하는 명령

2) 그 결과, GRL과 동일한 mem_id를 member 테이블에서 검색하여 두 행의 자료를 결합

3) 만약 WHERE 조건문을 사용하지 않을 경우 위와 같이 buy 테이블의 모든 행이 member 테이블과 결합
<내부 조인의 간결한 표현>


1) 만약 위와 같이 필요한 정보인 아이디, 이름, 물품, 주소, 연락처만 추출하기 위해 SQL 문을 작성할 경우 오류가 발생
이유는 열 이름인 mem_id가 불확실, 다시 말해 member 테이블과 buy 테이블 중 어느 곳의 열인지 알 수 없기 때문

2) 이 경우 mem_id 앞에 테이블 명인 buy를 붙여 주면 정상적으로 작동 가능
하지만, 이런 식으로 모든 열마다 테이블명을 붙여준다면 소속은 명확해지지만 코드가 길어져 가독성이 떨어지는 단점이 있음

3) 이 경우 테이블의 이름 뒤에 별칭(alias)을 사용하면 보다 쉽게 코드 양을 줄일 수 있음
위 코드는 각각 buy는 B, member는 M이라는 별칭을 사용하였음
<외부 조인 기본>
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 조건>
[WHERE 검색 조건]

1) 왼쪽 테이블인 member의 기준으로 해당 테이블은 모두 출력되어야 하는 LEFT OUTER JOIN 명령

2) 그 결과, 위 그림처럼 member 테이블에 존재하는 mem_id, mem_name, addr은 전부 출력되었음

3) 만약 RIGHT OUTER JOIN으로 같은 값을 출력할 경우 왼쪽과 오른쪽 테이블의 위치만 변경
<외부 조인의 활용>

1) 외부 조인은 한쪽 테이블에만 데이터가 있는 경우에도 출력이 가능하기 때문에 유용하게 사용이 가능
위 그림은 구매 경력(prod_name)이 한 번도 없는 회원의 목록만 추출하는 명령
2) FULL OUTER JOIN의 경우 LEFT와 RIGHT JOIN이 모두 합쳐진 개념이지만 일반적으로 잘 사용되지는 않음
<상호 조인>
SELECT <열 목록>
FROM <첫 번째 테이블>
CROSS JOIN <두 번째 테이블>

1) 상호 조인은 카티션 곱(cartesian product)라고도 부르며, 일반적으로 테스트를 위한 대용량 데이터 생성을 위해 사용
2) 상호 조인은 ON 구문 사용이 불가능하고 조인도 랜덤으로 되기 때문에 결과값으로의 의미가 존재하지 않음
<자체 조인>
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON <조인 조건>
[WHERE 검색 조건]

1) 위 명령을 통해 조직도 테이블을 생성

2) 위 명령과 같이 하나의 emp_table을 서로 다른 별칭을 주어 별개의 테이블인 것처럼 사용하는 것이 자체 조인
'SQL' 카테고리의 다른 글
| [혼자 공부하는 SQL] Chapter 5-1. 테이블 만들기 (1) | 2022.11.30 |
|---|---|
| [혼자 공부하는 SQL] Chapter 4-3. SQL 프로그래밍 (0) | 2022.11.29 |
| [혼자 공부하는 SQL] Chapter 4-1. MySQL의 데이터 형식 (0) | 2022.11.28 |
| [혼자 공부하는 SQL] Chapter 3-3. 데이터 변경을 위한 SQL 문 (0) | 2022.11.28 |
| [혼자 공부하는 SQL] Chapter 3-2. 좀 더 깊게 알아보는 SELECT 문 (0) | 2022.11.28 |