All Articles

[Database] Mysql - JOIN 종류와 특징

안녕하세요!

이번 포스팅 에서는 Database 종류인 Mysql 에서 자주 사용 되는 JOIN에 대한 종류와 특징, 간단한 예제에 대해 알아 보도록 하겠습니다!📕
면접을 볼 때마다 단골 질문 중 하나 였던 조인에 대해 정리해 보겠습니다.🤔


1. 조인(JOIN)이란?

  • 조인 이란 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블 처럼 만들어서 결과를 보여주는 것
  • 사용자가 원하는 2개의 테이블을 조합 하여 하나의 열로 표현 하는 것 입니다.

2. 조인(JOIN)의 종류

JOIN 종류

  • SQL 여러 종류의 조인을 하나의 벤다이어그램 으로 나타 내면 위와 같습니다.
  • INNER JOIN
  • A와 B에 대해 수행하는 것은, A와 B의 교집합을 나타냅니다.
  • 서로 연관된 내용만 검색하는 조인 방법 입니다.
  • 벤다이어그램으로 그렸을 때 교차되는 부분 입니다.

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2 ON table1.column_name = table2.column_name;
  • LEFT JOIN
  • A의 모든 레코드와 B의 일치하는 레코드를 반환 합니다.
  • B에 일치하는 레코드가 없으면 B에서는 결과가 NULL이 됩니다.
  • 벤다이어그램으로 그렸을 때 왼쪽 A의 부분 입니다.

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2 ON table1.column_name = table2.column_name;
  • RIGHT JOIN
  • B의 모든 레코드와 A의 일치하는 레코드를 반환 합니다.
  • A에 일치하는 레코드가 없으면 A에서는 결과가 NULL이 됩니다.
  • 벤다이어그램으로 그렸을 때 오른쪽 B의 부분 입니다.

    SELECT column_name(s)
    FROM table1
    RIGHT JOIN table2 ON table1.column_name = table2.column_name;
  • OUTER JOIN
  • A와 B에 대해 수행하는 것은, A와 B의 합집합을 나타냅니다.
  • A와 B의 레코드에 일치하는 모든 레코드를 반환 합니다.
  • 벤다이어그램으로 그렸을 때 합집합 부분 입니다.

    SELECT column_name(s)
    FROM table1
    FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
  • CROSS JOIN
  • 모든 경우의 수, 즉 A의 row 개수X B 테이블 row 개수 만큼의 row를 가진 테이블이 출력 됩니다.
  • 이 방식은 Cartesian Product, 곱집합 이라는 용어로 정의 되어 있습니다.
  • 아래의 3가지 예제는 모두 같은 결과를 나타냅니다.

    SELECT * FROM table1 CROSS JOIN table2;
    SELECT * FROM table1 JOIN table2;
    SELECT * FROM table1, table2;
  • SELF JOIN
  • 자기 자신과의 CROSS JOIN을 의미하고 보통 자기 자신과의 조합은 제거 합니다.
  • 한 테이블 내의 row끼리 어떤 계산을 할 때 유용하게 쓰입니다.
  • 동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 동일하기 때문에 식별을 위해 반드시 별칭(ALIAS)을 사용해야 합니다.

    SELECT ALIAS_1.column_name, ALIAS_2.column_name, ...
    FROM table1 ALIAS_1, table2 ALIAS_2
    WHERE ALIAS1.column_name = ALIAS_2.column_name;

3. 마치며

  • 조인에 대한 내용을 다시 한번 정리 하며 대학교 때 배웠던 기억이 나네요..😋
  • 여러 가지 종류의 조인이 있어서 외우기 힘들지만, 벤다이어 그램으로 기억 하는 방법도 좋은 것 같아요!👍🏻

오늘 준비한 내용은 여기까지 입니다.
이번 포스팅이 도움이 되셨거나 궁금한 점이 있으시다면 언제든지 댓글을 달아주세요!🙋🏻‍♀️✨