교차 조인은 두 테이블의 Cartesian Product(카티션 곱)연산을 한 결과이다.
특별한 조건없이 테이블 A의 각 행과 테이블 B의 각 행을 다 조합한 결과이다.
조인 SQL 구문은 두가지 표현법으로 만들 수 있다.
SELECT * FROM employees CROSS JOIN dept_emp;
SELECT * FROM employees, dept_emp;
가장 많이 사용되는 조인 구문중에 하나.
2개의 테이블의 컬럼을 합쳐 새로운 테이블을 생성한다.
Cross Join을 실행한 결과에 조인 조건문을 충족시키는 레코드를 반환한다고 생각하면 된다.
SELECT * FROM employees INNER JOIN dept_emp ON employees.emp_no = dept_emp.emp_no;
SELECT * FROM employees, dept_emp WHERE employees, emp_no = dept_emp.emp_no;
공통 컬럼명 기반으로 조인해 결과 집합을 만드는 내부 조인과는 달리,
외부 조인은 조건문에 만족하지 않는 행도 표시해주는 조인이다.
그래서 조인을 했을 때, 한쪽의 테이블에 데이터가 없어도 조인 결과에는 포함이 된다.
왼쪽 외부 조인은 테이블 A의 모든 데이터와 테이블 B와 매칭이 되는 레코드를 포함하는 조인이다.
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.n = table2.n;
오른쪽 외부 조인은 테이블 B의 모든 데이터와 테이블 A와 매칭이 되는 레코드를 포함하는 조인이다.
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.n = table2.n;
완전 외부 조인은 MySQL에서 UNION을 사용해 구현할 수 있다.
# 방법 1 : Join과 Union SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.n = table2.n UNION SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.n = table2.n;
# 방법 2 : Union All과 Exclusive Join SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.n = table2.n UNION ALL SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.n = table2.n WHERE table1.n IS null;
셀프 조인은 자기 자신과 조인하는 조인이다.
SELECT A.first_name AS EmployeeName1, B.first_name AS EmployeeName2, A.dept_no FROM employees AS A, employees AS B WHERE A.emp_no <> B.emp_no AND A.dept_no = B.dept_no;