: 두 테이블을 연결할 때 가장 많이 사용되는 것이 내부 조인임.
두 테이블의 조인을 위해서는 테이블이 일대다(one to many) 관계로 연결되어야 함.
1) 데이터 베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장하는 것이 효율적임.
2) 분리된 테이블은 서로 관계를 맺고 있음.
3) market_db에서 회원 테이블의 아이디와 구매 테이블의 아이디는 일대다 관계임.
4) 일대다 관계는 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계를 말함.
회원 테이블의 아이디를 기본 키로 지정하고, 구매 테이블의 아이디는 기본 키가 아닌 외래 키로 설정함.
1) 회원 테이블의 블랙핑크 아이디는 하나밖에 없음.
2) 구매 테이블의 아이디에서는 3개의 블랙핑크 아이디를 찾을 수 있었음.
3) 즉, 회원은 1명이지만, 이 회원은 구매를 여러 번 할 수 있으므로 일대다 관계임.
일반적으로 조인이라고 부르는 것은 내부 조인을 말하는 것임.
내부 조인의 형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
구매 테이블에서 GRL이라는 아이디를 가진 사람이 구매한 물건을 발송하기 위해 다음과 같이 조인하여 이름/주소/연락처 등을 검색할 수 있음.
1) 구매 테이블에는 물건을 구매한 회원의 아이디와 물건 등의 정보만 있음.
2) 물건 배송을 위해서는 구매한 회원의 주소 및 연락처를 알아야 함.
3) 이를 알기 위해선, 정보가 있는 회원 테이블과 결합하는 것이 내부 조인임.

4) 두 개의 테이블을 조인하는 경우, 동일한 열 이름이 존재한다면 테이블 이름.열 이름으로 표기해야 함.
두 테이블을 내부 조인하는 SQL이 거치는 과정
1) 구매 테이블의 mem_id(buy.mem_id)인 'GRL'을 추출함.
2) 'GRL'과 동일한 값을 회원 테이블의 mem_id(member.mem_id) 열에서 검색함.
3) 'GRL'이라는 아이디를 찾으면 구매 테이블과 회원 테이블의 두 행을 결합(JOIN)함.
만약, WHERE buy.mem_id='GRL'을 생략한다면, 1번째 BLK부터 12번째 MMU까지 구매 테이블의 모든 행이 회원 테이블과 결합됨.

필요한 아이디/ 이름/ 구매 물품/ 주소/ 연락처만 추출하기
1) buy.mem_id의 경우, mem_id라는 열이 member 테이블과 buy 테이블에 모두 존재하므로, 앞에 테이블 이름을 명시함.

테이블의 이름 뒤에 별칭 적기
1) 각 열마다 속한 테이블을 명확하게 표시할 수 있음.
2) 테이블의 이름을 모두 적으면 코드가 복잡해지므로, 간단한 별칭을 설정함.



내부 조인은 두 테이블에 모두 데이터가 있어야만 나오는 반면, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나옴.
외부 조인의 형식
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건];
전체 회원의 구매 기록(구매 기록이 없는 회원의 정보도 함께 출력)을 외부 조인으로 만들기

1) LEFT OUTER JOIN을 LEFT JOIN이라고만 써도 됨.
2) LEFT OUTER JOIN 문의 의미를 '왼쪽 테이블(member)의 내용은 모두 출력되어야 한다.' 라고 해석하면 됨.
RIGHT OUTER JOIN으로 동일한 결과를 출력하려면 단순히 왼쪽과 오른쪽 테이블의 위치만 바꿔주면 됨.

회원 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록 추출하기

FULL OUTER JOIN은 왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 것으로, 왼쪽이든 오른쪽이든 한쪽에 들어있는 내용이면 출력함.
상호 조인이란 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능임.
1) 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 개수가 됨.

상호 조인이 갖는 특징
1) ON 구문을 사용할 수 없음.
2) 결과의 내용은 의미가 없음. -> 랜덤으로 조인하기 때문에
3) 상호 조인의 주 용도는 테스트하기 위해 대용량의 데이터를 생성할 때임.
상호 조인을 통해 데이터 개수 확인하기
1) sakila의 inventory 테이블에는 4581건, world의 city 테이블에는 4079건이 있음.
2) 두 테이블을 상호 조인시키면, 4581 x 4079 = 18685899건의 데이터가 생성되어야 함.

진짜 대용량의 테이블을 만들고 싶으면, CREATE TABLE ~ SELECT 문을 사용함.
1) 작은 테이블을 사용해 새로운 테이블을 생성하고 5건 조회하기

자체 조인은 자신이 자신과 조인한다는 의미임.
1) 자체 조인은 1개의 테이블을 사용함.
예시 (p.190 참고 -> 사내 전화번호)

자체 조인의 형식
SELECT <열 목록>
FROM <테이블> 별칭 A
INNER JOIN <테이블> 별칭 B
ON <조인될 조건>
[WHERE 검색 조건]
자체 조인 활용
1) 경리부장 직속 상관의 연락처를 알고 싶은 경우
