[SQLite] JOIN 에 대한 이야기 |
-
다음과 같은 JOIN 이 있다.
CROSS JOIN
INNER JOIN
OUTER JOIN
CROSS JOIN
첫번째 table 의 모든 row 와 두번쨰 table 의 모든 row 를 JOIN 한다.
만약 각 table 에 x, y 개의 컬럼이 있다면, 결과 table 은 x+y 개의 컬럼이 된다.
만약 각 table 에 a, b 개의 row 가 있다면, 결과 table 은 a*b 개의 row 가 된다.
CROSS JOIN 은 큰 table 을 만들기 때문에 꼭 필요한 경우에만 써야 한다.
SELECT … FROM table1 CROSS JOIN table2;
INNER JOIN
조건에 의한 JOIN 을 수행한다.
조건을 만족시키는 첫번째 table 의 row 와 두번째 table 의 row 를 찾아 JOIN 한 table 이 나온다.
INNER JOIN 은 가장 많이 쓰이는 형태의 JOIN 이며, INNER 는 optional 하게 사용하면 된다.
SELECT … FROM table1 [INNER] JOIN table2 ON conditional_expression
두 테이블에 동일한 columnName 을 가진 녀석이 있다면, USING 을 사용하여 INNER JOIN condition 을 간단히 할 수 있다.
SELECT … FROM table1 JOIN table2 USING { column1, … } ... // ON table1.column1 == table2.column1 와 같다.
NATURAL JOIN 은 JOIN...USING 과 비슷하다.
2개의 table 모두에 있는 모든 column 의 equality 를 확인하여 return 한다
SELECT … FROM table1 NATURAL JOIN table2 ...
OUTER JOIN
INNER JOIN 의 확장판이다.
OUTER JOIN 은 LEFT, RIGHT 그리고 FULL JOIN 의 3가지 type 이 있다.
그러나 SQLite 는 LEFT OUTER JOIN 만 지원한다.
OUTER JOIN 도 ON, USING, NATURAL 을 통해 조건을 명시할 수 있다.
한번 JOIN 이 수행되면, OUTER JOIN 은 join 이 안 된 row 들을 NULL 로 마킹해서 넣어준다.
SELECT … FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
'프로그래밍 놀이터 > Tips' 카테고리의 다른 글
CardDAV 간단히 알아보장. (0) | 2017.11.14 |
---|---|
[git] 여러 개의 commit message 수정하기 (0) | 2017.09.19 |
OAuth 에 대해 간단히 개념잡기 (0) | 2017.06.09 |
GMT vs. UTC (0) | 2017.06.06 |
Strong / Weak / Dynamic / Static type (0) | 2017.06.05 |
댓글