슬기로운 개발생활

[MySQL] 조인(JOIN) - (INNER, LEFT, RIGHT)

by coco3o
반응형

1. JOIN

JOIN 연산은 두 테이블을 결합하는 연산입니다.
데이터의 규모가 커지면서 하나의 테이블로 정보를 수용하기 어려워지면 테이블을 분할하고 테이블 간의 관계성을 부여합니다.

아래의 사람(people), 대학교(university) 두 테이블을 이용해 JOIN 연산을 해보겠습니다.


2. JOIN의 종류

  • INNER JOIN : 두 테이블에서 같은 값만 
  • OUTER JOIN
    • LEFT JOIN 
      • 왼쪽 테이블을 기준으로 오른쪽의 테이블을 매치
      • 왼쪽 테이블의 한개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우, 해당 왼쪽 레코드를 여러번 표시
      • 왼쪽은 무조건 표시하고, 매치되는 레코드가 없으면 NULL을 표시
    • RIGHT JOIN
      • 오른쪽 테이블을 기준으로 왼쪽 테이블을 매치
      • LEFT JOIN에서 방향을 오른쪽으로만 바꾼 것이므로, 해당 레코드가 여러번 표시되거나 NULL이 표시
  • CROSS JOIN : 조건에 부합하지 않는 행까지 포함시켜 결합하는 것 (모든 경우의 수를 포함)


1. Cross JOIN
두 테이블의 교집합을 수행하는 교차 결합( Cross JOIN ) 입니다.

SELECT * FROM people, university;

SELECT * FROM people CROSS JOIN university;

JOIN을 하면 두 테이블을 결합한 데이터가 조회됩니다. 이처럼 두 테이블에서 모든 경우의 수를 볼 수 있는데,
모든 경우의 수를 볼 일이 딱히 없기 때문에 실제로 거의 사용되지 않습니다.


2. INNER JOIN
서로 중복되는 값만 나타냅니다.

SELECT * FROM people AS p INNER JOIN university AS u ON p.ID = u.UID;
# INNER 생략 가능
SELECT * FROM people AS p JOIN university AS u ON p.ID = u.UID;

INNER JOIN 좌우에 결합할 테이블 명을 작성하고 AS로 별명을 붙여주고 ON 뒤에는 결합 조건을 명시합니다.

위와 같이 특정 컬럼이 같은 데이터를 조회하도록 조건을 추가시킨 결합을 동등 결합 ( EQUI JOIN )이라고 하는데,
JOIN에서 가장 많이 쓰이는 것이 EQUI JOIN 입니다.
EQUI JOIN을 수행해서 people 테이블의 ID가 6인 데이터와 university 테이블의 UID가 5인 데이터는 결과에서 제외된 것을 볼 수 있습니다.
결론 : 조인하는 두 개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져옵니다.


3. LEFT JOIN
매칭되는 행이 없어도 결과에 포함시키고, 없는 경우 NULL로 표시해줍니다.
위의 예제를 LEFT JOIN으로 적용시켜 보겠습니다.

SELECT * FROM people AS p LEFT JOIN university AS u ON p.ID = u.UID;

people 테이블의 ID가 6인 데이터도 university와 매칭되는게 없지만, 결과에 포함 되었습니다.
그 이유는 LEFT JOIN 즉, 왼쪽의 테이블(people)을 기준으로 하였기 때문입니다.
반면, university 테이블의 UID가 5인 데이터는 people의 ID가 5인 데이터가 없기 때문에 NULL로 처리되면서 조회됨을 볼 수 있습니다.


4. RIGHT JOIN
매칭되는 행이 없어도 결과에 포함시키고, 없는 경우 NULL로 표시해줍니다.

SELECT * FROM people AS p RIGHT JOIN university AS u ON p.ID = u.UID;

LEFT JOIN과 반대 형태 입니다.

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기