Sqlite3 JOIN

앱 개발자는 DB를 사용할 일이 그렇게 많지 않다.
이참에 대강 알고 있던 JOIN을 정리하려고 한다.

SQLite3는 세 가지 조인 방식을 지원하고 있는데, INNER JOIN, LEFT JOIN, CROSS JOIN 이 있다.
문법은 다음과 같다.

SELECT {col1, alias1.col2...} FROM {tab1} AS {alias1}
{INNER/LEFT/CROSS} JOIN {tab2} as {alias2} ON {결합조건}
-- ON 대신 USING을 쓸 수 있다.
{INNER/LEFT/CROSS} JOIN USING {결합칼럼}

JOIN 샘플코드

select * from TB_BK_ST as BS join TB_BK as BK ON BK.id = BS.id ;
select * from TB_BK_ST as BS INNER JOIN TB_BK as BK ON BK.id = BS.id;
select * from TB_BK_ST as BS LEFT JOIN TB_BK as BK ON BK.id = BS.id;
select * from TB_BK_ST as BS CROSS JOIN TB_BK as BK ON BK.id = BS.id;
select * from TB_BK_ST as BS INNER JOIN TB_BK as BK ON BK.id = BS.id INNER JOIN TB_BK_MM AS MM ON BS.id = MM.id;
select * from TB_BK_ST as BS INNER JOIN TB_BK as BK ON BK.id = BS.id LEFT JOIN TB_BK_MM AS MM ON BS.id = MM.id;
select * from TB_BK_ST as BS INNER JOIN TB_BK as BK ON BK.id = BS.id CROSS JOIN TB_BK_MM AS MM ON BS.id = MM.id;

INNER JOIN

가장 많이 사용되는 JOIN
조건에 맞는 행이 없는 경우는 모두 제욍시킨다.
교집합과 같다. 해당 값이 없는 테이블이 있다면, 이런 데이터들은 결과에서 제외된다.

LEFT JOIN

왼쪽 테이블을 기준으로 알수 없는 값들을 NULL로 채워서 만든다.

CROSS JOIN

양쪽 테이블로 JOIN을 실행한다.
용도는 아직 잘 모르겠다.