공통점이 없는 두 테이블의 모든 데이터를 생성하기 위하여 사용한다 이는 Cartesian Product(카테시안 곱, 데카르트 곱)이라고도 칭함
공통된 필드가 없으므로 등호(=)연산자를 사용하지 않는다
SELECT * FROM A CROSS JOIN B; 혹은 SELECT * FROM A, B; (CROSS JOIN을 생략하고 ','로 연결)
3_Equi JOIN
두 테이블을 결합할 수 있는 조건식을 작성하여 JOIN하는 방법(통상 Foreign key를 조건으로 사용함)
(1). 조건식을 만족하는 데이터가 존재하는 행만을 출력하는INNER JOIN과 (2). 조건식을 만족하는 데이터가 존재하지 않는 행도 항상 출력하는 OUTER JOIN이 있다
공통된 값을 배교할 때, WHERE절을 이용하지 않는 방법을ANSI JOIN이라 부른다. => ANSI JOIN은 DB 공통 문법이라 모든 DBMS에서 사용 가능함
SELECT * FROM 1. A a INNER JOIN B b ON a.field = b.field 2. A a ,B b ON a.key = b.key 2. A JOIN B USING (공통 field명) 3. A NATURAL JOIN B (어떤 key로 합치는지 명시성이 떨어져서 잘 사용하지 않음)
3-1_INNER JOIN
JOIN된 테이블들 사이에서 조건을 만족하는 데이터가 있는 행만을 출력하는 방식 가장 흔하고 일반적인 JOIN 결합 형태
INNER를 생략하고 JOIN만 쓰고 조건 ON을 붙여줘도 된다 (ON이 없으면 CROSS JOIN과 같음)
조건에서 비교하고자 하는 field가 같다면 USING(공통된 field명)
그 외에는 ON절에 조건을 작성한다
NATURAL JOIN은 조건절 없이도 같은 이름을 가지는 field를 찾아서 자동으로 JOIN하나, 어떤 field를 기준하여 JOIN되는지 직관성이 떨어져서 잘 사용하지 않는다
3-2_OUTTER JOIN
JOIN된 테이블들 사이에서 조건을 만족하지 않는 행도 출력하는 방식
(1). LEFT JOIN : 조건과 무관하게 왼쪽 테이블의 모든 행을 출력하는 방식 (2). RIGHT JOIN : 조건과 무관하게 오른쪽 테이블의 모든 행을 출력하는 방식 (3). FULL OUTER JOIN : mySQL에서는 사용되지 않으며 UNION으로 합집합 출력 가능
2_SELF JOIN
기능은Equi JOIN과 같지만 하나의 테이블에서JOIN이 일어난다는 점이 다르다
같은 테이블에 대해 두 개의 as(alias)를 사용하여FROM절에서 두 개의 테이블을 사용하는 것 처럼 기능하게한다
SELECT * FROM Aas a, Aas b // 하나의 테이블을 as로 구분하여 두 개의 테이블처럼 사용 WHERE a.field = b.field ;