DB에서 SQL 을 통해값을 가져올 때 테이블을 연결시켜 가져올 필요가 있습니다.
이 때 사용하는 것이 조인 구문이며 테이블과 테이블을 연결하는 역할을 하고 있습니다.
데이터를 활용하는데 큰 활용 포인트가 됩니다.
LEFT JOIN
과 유사하나, 두 번째 테이블을 기준으로 첫 번째 테이블의 정보를 가져올 때 사용합니다.(INNER) JOIN
: 두 테이블에서 일치하는 값을 가진 레코드를 반환합니다.LEFT (OUTER) JOIN
: A 테이블 전체 레코드와 A 테이블에 연결된 B 테이블의 레코드를 반환합니다.RIGHT (OUTER) JOIN
: B 테이블 전체 레코드와 B 테이블에 연결된 A 테이블의 레코드를 반환합니다.FULL (OUTER) JOIN
: 양쪽에 일치 항목이 있을 때 모든 레코드를 반환합니다.모든 JOIN 을 사용할 때 INNER 혹은 OUTER 글자를 생략할 수 있습니다.
사용할 때 이를 주의하여 활용할 필요가 있습니다.
테이블 전체를 활용할 수 있는 CROSS JOIN 이 존재합니다.
필
SELECT *
FROM tableA a
JOIN tableB b ON a.id = b.id
조인은 A 테이블과 B 테이블을 연결하는 과정을 이야기 합니다.
조금 더 활용해보자면 C 테이블을 연결하는 방법도 존재합니다.
SELECT *
FROM tableA a
JOIN tableB b ON b.id = a.id
JOIN tableC c ON c.lv = b.lv
지금 A 테이블 – B 테이블 – C 테이블 을 연결했습니다.
SELECT 조회를 하면 모든 테이블 열을 가져오게 됩니다. 이는 원하는 결과를 가져오는 방법이 아닙니다.
SELECT a.id, b.lv, c.key
FROM tableA a
JOIN tableB b ON b.id = a.id
JOIN tableC c ON c.lv = b.lv
이렇게 원하는 값만 출력할 수 있습니다.
SELECT DISTINCT a.id, b.lv, c.key
FROM tableA a
LEFT JOIN tableB b ON b.id = a.id
LEFT JOIN tableC c ON c.lv = b.lv
레코드에서 JOIN 하는 법에 따라 복수의 값으로 가져올 경우가 존재합니다.
이는 LEFT JOIN 을 했을 때 생기는데요, 중복된 값을 제거하려면
DISTINCT 를 활용하여 해결 할 수 있습니다.
이 연산은 리소스를 많이 사용할 수 있기 때문에 주의가 필요합니다.
LEFT JOIN 을 사용할 때 조인 되지 않는 레코드에 대한 NULL 처리를 신경써야 합니다.
예로 IS NULL 혹은 IS NOT NULL 을 사용하여 이러한 값을 필터링할 수 있습니다.
테이블 별로 ,(콤마)를 이용한 조인도 있으니 참고하시면 좋을 것 같아요~