
카티션프로덕트(교차곱 A X B)
( JOIN 조건을 잘못 기술한 경우, JOIN 조건을 정의하지 않았을 때, JOIN에 참여하는 릴레이션의 모든 튜플이 조인되는 경우)
T= R⋈(AΘB) S
R의 속성 A와 S의 속성 B가 세타관계가 성립하는 새로운 T 릴레이션을 생성
조인 조건에 관계 연산자(=, <, > 등) 사용을 일반화하여 표현
조인에 관련된 모든 속성을 포함(중복 허용)

⋈(A=B)
교집합(A∩B)
세타조인에서 비교연산자가 =인 경우
조인에 관련된 모든 속성을 포함(중복 허용)
⋈N
자연 조인은 동일 조인의 결과에서 중복되는 속성을 제거한 릴레이션
A,B가 조인될 경우 A와 조인될 가능성이 있는 B의 튜플만을 골라 전송하는 연산
자연조인 후 어느 한쪽 릴레이션의 애트리뷰트만으로 프로젝트
세미조인도 방향이 있음


합집합(A∪B) or 합집합 연산 결과에서 교집합 연산 결과를 뺀것((A∪B) - (A∩B))
* OUTER JOIN 속성 : 공통된 속성을 매개로 하는 정보가 아니더라도 버리지 않고
연산의 결과 릴레이션에 정보를 남겨둠
(공통 속성 아닌 경우 NULL)


교집합 연산 결과와 차집합 연산 결과를 합친것( (A∩B) ∪ (A-B) ) or 차집합 연산(A-B)
오라클 SQL은 WHERE 테이블A.조인키컬럼 = 테이블B.조인키컬럼(+) 표시


교집합 연산 결과와 차집합 연산 결과를 합친것( (A∩B) ∪ (B-A) ) or 차집합 연산(B-A)
오라클 SQL은 WHERE 테이블A.조인키컬럼(+) = 테이블B.조인키컬럼 표시

같은 두 릴레이션을 활용하여 데이터를 추출하는 기법
-- employees 테이블 생성 CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT );-- departments 테이블 생성 CREATE TABLE departments ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) );-- 데이터 삽입 INSERT INTO employees (emp_id, emp_name, dept_id) VALUES (1, 'Alice', 1), (2, 'Bob', 2), (3, 'Charlie', 3), (4, 'David', NULL);INSERT INTO departments (dept_id, dept_name) VALUES (1, 'HR'), (2, 'Engineering'), (3, 'Marketing'), (4, 'Sales');
1. 크로스 조인
SELECT e.emp_id, e.emp_name, d.dept_name FROM employees e CROSS JOIN departments d;
2. 세타 조인
SELECT e.emp_id, e.emp_name, d.dept_name FROM employees e, departments d WHERE e.dept_id = d.dept_id;
3. 내부 조인 = 동등(동일) 조인
SELECT * FROM employees INNER JOIN departments ON employees.dept_id = departments.dept_id;
4. 자연 조인
SELECT * FROM employees NATURAL JOIN departments;
5. 세미 조인
SELECT e.emp_id, e.emp_name FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.dept_id = d.dept_id);
6. 왼쪽 외부 조인
SELECT e.emp_id, e.emp_name, d.dept_name FROM employees e LEFT OUTER JOIN departments d ON e.dept_id = d.dept_id;
7. 오른쪽 외부 조인
SELECT e.emp_id, e.emp_name, d.dept_name FROM employees e RIGHT OUTER JOIN departments d ON e.dept_id = d.dept_id;
8. 완전 외부 조인
SELECT e.emp_id, e.emp_name, d.dept_name FROM employees e FULL OUTER JOIN departments d ON e.dept_id = d.dept_id;
9. 셀프 조인
CREATE TABLE book ( BookNumber INT, BookName VARCHAR(10), FSubjectBookNumber INT ); INSERT INTO book VALUES (111, 'OS', 222), (222, 'DataStructure', 555), (555, 'ComputerStructure', NULL);
SELECT A.BookNumber, A.BookName, B.BookNumber, B.BookName FROM book A JOIN book B ON A.FSubjectBookNumber = B.BookNumber;
크로스 조인에 <, >, = 추가한게 세타 조인
세타 조인에 = 만 사용한게 내부(동등) 조인
내부(동등 )조인에 동일한 이름의 컬럼을 자동으로 매칭한게 자연조인
자연조인에 한쪽 테이블의 결과만 반환한게 세미조인
외부 조인에서 조건을 만족하는 행만 반환한 게 내부 조인
세타 조인은 조건을 만족하는 행만 반환하는 조인
외부 조인은 조건을 만족하지 않는 행도 포함하여 반환하는 조인
테이블 하나를 2개처럼 두고 조인
다른 조인들과 서로 포함관계가 성립하지 않음