
조인(join)이란 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것.Ex) 회원 테이블과 구매 테이블조인.조인은 두 테이블을 엮어서 정보를 추출하는 것.
내부 조인.일대다(one to many)관계로 연결되어야 함.데이터베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장하는 것이 효율적.관계(relation)을 맺고 있음.일대다 관계란 한쪽 테이블에는 하나의 값만 존재하지만, 연결된 다른 테이블에는 여러개의 값이 존재할 수 있는 관계를 말함.일대다 관계는 주로 PK(기본 키)와 FK(외래 키, Foreign Key)관계로 맺어져있음.PK(기본 키, Primary Key), 여러 개의 값으로 된 것을 FK(외래 키, Foreign Key)라고 함.조인이라고 부르는 것은 내부 조인(INNER JOIN)을 말하는 것.내부 조인의 형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블> -- INNER JOIN을 JOIN이라고만 써도 됨.
ON <조인될 조건>
[WHERE 검색 조건]
테이블 이름.열 이름 형식으로 표기 해야 됨.별칭(alias)을 주면 됨.내부 조인(INNER JOIN)은 두 테이블에 모두 있는 내용만 조인되는 방식.외부 조인(OUTER JOIN)을 사용해야 됨.외부 조인(OUTER JOIN)은 한쪽에만 데이터가 있어도 결과가 나옴.

외부 조인(OUTER JOIN)은 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출할 수 있임,외부 조인의 형식
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블>
ON <조인될 조건>
[WHERE 검색 조건];
LEFT OUTER JOIN문의 의미는 '왼쪽 테이블의 내용은 모두 출력되어야 한다'로 해석.FROM절에 있는 첫 번째 테이블의 모든 행을 포함 함.RIGHT OUTER JOIN은 왼쪽, 오른쪽 테이블 위치만 바뀐 것.JOIN절에 있는 두 번째 테이블의 모든 행을 포함 함.FULL OUTER JOIN은 LEFT 외부 조인과 RIGHT 외부 조인이 합쳐진 것이라고 생각.
상호 조인(CROSS JOIN)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능.CROSS JOIN 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 개수가 됨.상호 조인(CROSS JOIN)을 가티션 곱(cartesian product)이라고도 부름.ON구문을 사용할 수 없음.테스트 하기 위해 대용량의 데이터를 생성할 때.CREATE TABLE ... SELECT문을 사용.CREATE TABLE cross_table
SELECT *
FROM sakila.actor -- 200개
CROSS JOIN world.country; -- 239개
실행 결과 -> 47,800개의 행이 생성.

자체 조인(SELF JOIN)은 자신이 자신과 조인한다는 의미.Ex) 회사의 조직 관계자체 조인의 형식
SELECT <열 목록>
FROM <테이블> A
INNER JOIN <테이블> B -- FROM절과 INNER JOIN절의 테이블은 같은 테이블.
ON <조인될 조건>
[WHERE 검색 조건]
자체 조인(SELF JOIN)을 할 수 있음.CREATE TABLE emp_table (emp CHAR(4), manager CHAR(4), phone VARCHAR(8));
INSERT INTO emp_table VALUES('대표', NULL, '0000');
INSERT INTO emp_table VALUES('영업이사', '대표', '1111');
INSERT INTO emp_table VALUES('관리이사', '대표', '2222');
INSERT INTO emp_table VALUES('정보이사', '대표', '2222');
INSERT INTO emp_table VALUES('영업과장', '영업이사', '1111-1');
INSERT INTO emp_table VALUES('경리부장', '관리이사', '2222-1');
INSERT INTO emp_table VALUES('인사부장', '관리이사', '2222-2');
INSERT INTO emp_table VALUES('개발팀장', '정보이사', '3333-1');
INSERT INTO emp_table VALUES('개발주임', '정보이사', '3333-1-1');
SELECT A.emp AS "직원", B.emp AS "직속상관", B.phone AS "직속상관연락처"
FROM emp_table A
INNER JOIN emp_table B
ON A.manager = B.emp
WHERE A.emp = '경리부장';
실행결과
직원 직속상관 직속상관연락처
경리부장 관리이사 2222