Self join 은 두 동일한 테이블의 복사본의 조인으로 보일 수 있다.
테이블은 실제로 카피된 건 아니지만 SQL 이 마치 그런것처럼 명령을 수행하게 된다.
셀프 조인의 특별한 키워드는 없고 간단히 JOIN 문법을 두 부분 모두에서 같은 테이블로 쓰면 된다.
주의할 점은 셀프 조인을 사용하는 경우는 별칭을 사용해야 모호함을 피할 수 있다.
문법을 아래 예시와 같다.
SELECT tableA.col, tableB.col
FROM table AS tableA
JOIN table AS tableB on
tableA.some_col = tableB.other_col
실습해보자.
다음과 같은 film 테이블을 사용할 것이다.
영화 테이블에서 두 세트의 타이틀과 길이가 일치하는 행들을 찾고 싶다.이때 두 테이블의 카피가 필요해진다.
이때 셀프조인을 사용하면 같은 테이블내에서 비교가 가능하다.
film 테이블하나를 f1 으로 지칭하고 inner join 한 film 테이블 다른 하나를 f2 로 지칭하여 서로 다른 film_id 를 가지는 행들 중에(같은 건 제외) 길이가 같은 애들을 같은 테이블로 묶을 수 있다.
SELECT f1.title, f2.title, f1.length
FROM film AS f1
INNER JOIN film AS f2
ON f1.film_id != f2.film_id
AND f1.length = f2.length