CROSS JOIN(상호조인)
CROSS JOIN은 한쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행들을 조인하는 기능이다. 그래서 결과 개수가 두 테이블 개수를 곱한 개수가된다.
테이블1의 첫행이 테이블2의 모든 행과 조인되고 그다음 테이블1의 두번째행이 테이블2의 모든 행과 조인되는 것을 반복하는 것이다. 만약 테이블1이 10개의 행이고 테이블행이 12개면 120개의 결과가 되는것이다.
그래서 CROSS JOIN 을 '카티션 곱' 이라고도 부른다.
형식
SELECT <열목록>
FROM <첫번째 테이블>
CROSS JOIN <두번째 테이블>;
[WHERE 검색 조건]
CROSS JOIN에는 ON구문을 사용할 수 없지만 WHERE 조건을 달 수 있다.
SELECT COUNT(*) FROM usertbl CROSS JOIN buytbl;
/*
SELECT count(*) FROM buytbl , usertbl; 과 동일한 결과
*/
결과
위 결과로 알 수 있듯이 usertbl은 행이 12개고 buytbl은 행이 10개여서 총 개수가 120개의 행이 나온다.
SELF JOIN (자체조인)
SELF JOIN은 별도의 구문이 존재하는것이 아니라 자기 자신과 자기 자신이 조인하는 의미이다.
SELF JOIN의 용도는 같은 테이블내에서 열에 어떠한 값이 들어갈때 다른 열에도 똑같은 값이 들어가 자기자신의 테이블을 조인하는 경우이다. 예시를 통해 알아보자
emptbl 이라는 조직도 테이블이 존재한다. 여기서 emp는 직원이름이고 manager는 직속상관 emptel은 구내번호이다.
테이블을 보면 '김재무'라는 데이터가 존재하는 동시에 김재무는 김부장,이부장의 직속상관열에 들어가있다.
이 처럼 다른 열에 같은 데이터가 들어갔을때 self조인을 시켜 데이터를 확인하는 것이다.
SELECT *
FROM emptbl a
INNER JOIN emptbl b
ON a.manager = b.emp ;
결과
결과를 보면 왼쪽 manager와 오른쪽 emp가 같은 데이터의 행들만 출력되어있다.
이것을 통해 김재무의 부하직원과 김재무의 직속상관을 동시에 알 수 있다는 것이다.
SELECT b.emp '직원이름',b.manager '직속상관',a.emp '부하직원'
FROM emptbl a
INNER JOIN emptbl b
ON a.manager = b.emp
WHERE b.emp= '김재무';
결과
김재무의 부하직원인 김부장, 이부장이 출력됬다.