ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLite 8. JOIN: LEFT JOIN
    SQL/Sqlite 2021. 12. 31. 11:28
    반응형

    잊을만하면 한 번씩 DB를 만지게 된다. 그림이 꽤 도움이 된다.

     

    교차 조인은 두 테이블의 모든 조합을 만들고,
    동등(이너) 조인은 두 테이블에 공통 값이 있는 조합만 만들었다.

    A 테이블에는 id 11이 있고, B 테이블에는 id 11이 없다. 
    하지만 JOIN된 테이블에 id 11이 남아 있어야 할 때는 어떻할까?

    B테이블에 id11을 만들고 NULL 을 입력해도 된다. 

    체중 측정값이 NULL인 선수(641번)를
    INNER JOIN에서 볼 수 있었다.
    (INNER JOIN 게시물 참고)

    하지만 이 NULL이란 DB를 복잡하게 만드는 요소이다. 
    NULL과 문자열 ''이 혼재한다면...
    벌써 가슴 한구석이 답답해지지 않는가?

    굳이 없는 NULL을 넣는 것은 특별한 상황이 아니라면 추천하지 않는다.

     

    LEFT JOIN을 쓰면 된다. 

    먼저 'DB Browser'에서 NULL인 선수(641번)를 찾아 지워보자.

    weight 컬럼의 필터에 우클릭한 뒤 
    필터 표현식 설정에서
    NULL을 골라주면 된다. 

    '=NULL'을 직접 입력해도 된다. 

    1번에 우클릭한 뒤, 
    레코드 삭제를 해보자. 

    마지막으로 변경 사항 저장.

     

    INNER JOIN

    SELECT players.id, name, count(weight)
    FROM players 
    	INNER JOIN weights 
    		ON weights.id = players.id
    WHERE players.id IN (120, 641)
    GROUP BY players.id

    이너 조인에선 614번을 볼 수 없지만

     

    LEFT JOIN

    SELECT players.id, name, count(weight)
    FROM players 
    	LEFT JOIN weights 
    		ON weights.id = players.id
    WHERE players.id IN (120, 641)
    GROUP BY players.id

    레프트 조인에서는 641번을 볼 수 있다. 

     

    SQLite에서는
    라이트(RIGHT) 조인과
    풀 아우터(FULL OUTER) 조인은 지원하지 않는다. 

    라이트 조인은 레프트 조인의 순서만 바꾼 것이라 큰 의미가 없다.

    풀 아우터 조인은 잘 사용되지 않는 편이다. 
    꼭 필요하다면 레프트 조인을 2번하면 된다. 

    그림을 참고하자. 

    반응형
Designed by Tistory.