[2025.10.31] 오늘의 학습 키워드 - Union 복습 및 Join 예습

허진원·2025년 10월 31일

내일배움캠프 TIL

목록 보기
10/41

오늘은 union의 복습과 join의 예습을 진행했다. 특별히 오늘은 실습을 함께 진행하지는 않았다. 다른 내용들과는 달리 join은 한 번 봤다고 이해되는 수준이 아니었다. 물론 다른 내용들도 처음 접하는 개념이라서 상당히 까다로웠지만, join은 그 수준이 격이 다르다고 해야겠다.
아무튼 join이라는 것이 정확히 어떤 개념이고, 어떻게 작동하는지 최대한 이해한 후에 실습에 들어가는 것이 맞다고 판단했다. 섣부르게 혼자서 실습을 했다가 잘못 이해하게 되면 추후 이를 되돌리기 위해서 곤욕을 치를 것 같았다.

  1. 오늘 학습 키워드
    SQL에서 union과 join을 활용하여 두 개의 테이블을 하나로 합쳐보기(개념 위주로 학습)

  2. 오늘 학습한 내용을 나만의 언어로 정리하기
    SQL에서 union은 두 테이블을 수직으로 이어줄 때 활용한다. 이 때, 이어줄 두 테이블의 컬럼 수, 순서, 데이터 형식은 서로 동일해야 한다. 컬럼의 이름이 다른 경우에도 union이 가능하다. 이 경우는 먼저 적힌 테이블의 컬럼명으로 표기되므로, 컬럼 내의 데이터 형식이 같으면 OK다.

  3. 학습 내용
    union을 통해서 중복되는 데이터를 표시할 수도, 원한다면 표시하지 않을 수도 있다. 두 테이블에서 공통되는 모든 데이터를 표시하고 싶을 경우에는 "union all"로 표기, 중복을 제외한 값을 표시하고 싶을 경우에는 "union"으로 표기하면 된다.

    중복 데이터 표시를 원한다
    -> UINON ALL
    중복 데이터를 제외하고 싶다
    -> UNION

join은 두 테이블을 수평으로 이어줄 때 활용한다. 이 때, 이어주고자 하는 두 테이블에 같은 내용을 포함하고 있는 컬럼이 1개 이상 존재하면 join이 가능하다. union과 마찬가지로 공통되는 컬럼의 이름이 달라도 join으로 이어줄 수 있다.

join 함수는 여러 가지 형태를 가지고 있다. inner join, left join, right join, full outer join 등이 있고, 이 중 가장 자주 쓰이는 것이 inner join과 left join이다.

inner join은 결합하고자 하는 두 테이블에서 일치하는 값을 가진 행을 출력한다. 두 테이블의 교집합을 보여주는 셈이다.

left join은 두 테이블 중 왼쪽 테이블의 모든 행에 대해서 오른쪽 테이블에서 일치하는 데이터 값을 가져와 합친다. 이 때 오른쪽 테이블에 일치하는 값이 없을 경우에는 값을 null로 표시하게 된다.
right join은 left join과 동일하게 작동하는데, 기준이 되는 테이블이 오른쪽 테이블이라는 점이 다르다. 사실상 두 join은 같은 함수이기 때문에, 많은 분석가들이 더욱 직관적으로 데이터를 관찰할 수 있는 left join을 주로 사용하고 있다.

full outer join은 LEFT JOIN과 RIGHT JOIN의 조합으로, 두 테이블의 일치하지 않는 데이터까지 모두 포함한다. 즉, 결합하고자 하는 두 테이블의 합집합을 전부 보여주는 역할을 한다.

FULL OUTER JOIN = LEFT JOIN + (union) + RIGHT JOIN 으로 표현 가능한데, 앞서 서술했듯이 각 테이블의 null값을 전부 출력하는 셈이다. 따라서 쿼리의 출력에 더욱 많은 리소스를 할애하게 된다. 즉 쿼리의 처리 비용이 늘어나 기기와 프로그래밍 툴에 적지 않은 부담을 주게 된다고 할 수 있다.

full outer join은 MySQL에서는 지원하지 않는 함수이다. 따라서 이를 MySQL에서 구현하고 싶다면, join과 union을 함께 사용해서 쿼리를 작성해야 한다.

두 테이블에서 일치하는 값을 가진 행을 볼 때(교집합 확인 시)
-> a.테이블 inner join b.테이블 on a.컬럼명=b.컬럼명
어느 한 쪽 테이블의 모든 행과 반대쪽 테이블의 일치하는 행을 모두 보고싶을 때(없는 값은 null로 표기, left를 주로 사용)
->a.테이블 left(right) join b.테이블 on a.컬럼명=b.컬럼명
두 테이블을 합친 결과물 전부를 보고 싶을 때(두 테이블의 합집합 전체)
->a.테이블 full outer join b.테이블 on a.컬럼명=b.컬럼명
==select
from a.테이블 left join b.테이블 on a.컬럼명=b.컬럼명
union
select

from a.테이블 right join b.테이블 on a.컬럼명=b.컬럼명

  1. 학습하며 느낀 점
    'SQL의 가장 높은 벽'이라는 이명에 걸맞는 난이도였다. 어느 정도는 이해했다고 생각하긴 하지만, 여전히 난해하다. 다음 주에 진행되는 라이브 세션으로 완벽하게 이해해서 반드시 습득하고야 말겠다.

마치며 : 날이 많이 추워졌지만, 어제 봤던 하늘은 과히 맑고 상쾌했다. 아쉽게도 이번 주는 비가 예보되어 있다. 온도가 더욱 떨어져 추위가 강해질 것이다. 때맞춰 감기와 독감이 유행하고 있다고 하니, 모두들 건강에 유의하길 바란다.

profile
국문과 전공 데이터 입문자

0개의 댓글