Multi Developer SuHo

Mysql 테이블 조인(JOIN) 이란? INNER JOIN, OUTER JOIN, Left JOIN, Right JOIN 본문

Mysql 기록

Mysql 테이블 조인(JOIN) 이란? INNER JOIN, OUTER JOIN, Left JOIN, Right JOIN

Dreaming Developer Student 2025. 3. 18. 09:57
SMALL

안녕하세요 오늘은 Mysql 에서 중요한 문법인 JOIN에 대해 알아보고 각각 쓰이는 표현 방식에 대해 알아보겠습니다. 

📑목차
1. JOIN (조인)
1-1. JOIN이란?
1-2. JOIN의 특징
2. JOIN의 종류
2-1. INNER JOIN
2-2. INNER JOIN 구조
2-3. INNER JOIN 코드 

2-4. LEFT JOIN 
2-5. LEFT JOIN  구조

2-6. LEFT JOIN  코드 
2-7. RIGHT JOIN 
2-8. RIGHT JOIN 구조
2-9. RIGHT JOIN 코드 

 

서론

먼저 이 글을 보시기 전에 JOIN(조인)이라는 단어를 떠오르시면 무엇이 떠오르시나요? 뭔가 같이하다, 결합하다, 함께하다 등등 합성하는 뜻으로 해석됩니다. Mysql에서 JOIN이 무엇이고, JOIN의 종류와 그에 대한 표현방식을 알아보도록 하겠습니다.

본론

1. JOIN(조인)

 

1-1. JOIN(조인)이란?

여러 테이블을 연결하여 공통된 필드를 기준으로 원하는 데이터를 조회하는 문법

 

1-2. JOIN의 특징

 

1. 여러개의 테이블을 연결하여 필요한 데이터를 조회할 수 있다.

2. 다양한 표현 방식으로 데이터를 결합할 수 있다.

 

2. JOIN의 종류

2-1.  INNER JOIN 

두 개 이상 테이블을 연결해서 두 테이블 모두에서 일치하는 데이터를 찾고, 찾은 데이터를 결합하여 결과를 제공

 

2-2  INNER JOIN 구조 

2-3  INNER JOIN 코드

CREATE TABLE singer (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(20),
    gender VARCHAR(30)
)


CREATE TABLE song (
    songname VARCHAR(100),
    genre VARCHAR(25),
    release_date DATE,
    singer_id INT
)

SHOW TABLES;


## 가수 정보 추가
INSERT INTO singer (name, gender) VALUES("soon", "남자");

## 곡 정보 추가
INSERT INTO song VALUES("술이 문제야", "발라드", '2025-03-19', 2);

SELECT * FROM singer; 
SELECT * FROM song; 

SELECT singer.name, singer.gender, song.songname, song.genre, song.release_date
FROM song
INNER JOIN singer ON song.singer_id = singer.id;

 

다음과 같은 쿼리문을 보시면 singer(가수) 라는 테이블과 song(곡) 이라는 테이블을 생성하고 각각 테이블의 값을 삽입하였습니다. 그리고 INNER JOIN으로 singer 테이블과 song 테이블을 결합하는데 ON 절에서 song 테이블의 singer_id 와 singer 테이블의 id 가 일치하는 행들을 결합하여 조회합니다.

여기서 ON 절은 두 테이블을 연결하는 조건을 지정하는 부분입니다.

 

2-4.  LEFT JOIN

왼쪽테이블 기준으로 오른쪽 테이블과 결합하여 , 오른쪽 테이블에서 일치하는 데이터 값이 있으면 가져오고 없으면 NULL로 반환된다.


2-5.  LEFT JOIN 구조

2-6.  LEFT JOIN 코드

 

## 가수 정보 추가
INSERT INTO singer (name, gender) VALUES("아이유", "여자");

SELECT * FROM singer;

 

이렇게 가수 테이블에 값을 추가하고 조회하면 다음과 같이 나옵니다.


지금 singer 테이블에는 값이 추가된 상황입니다.  LEFT JOIN으로  singer테이블 기준으로 song 테이블에서 필요한 값들을 가져오는 코드입니다.

SELECT singer.name, singer.gender, song.songname, song.genre, song.release_date
FROM singer
LEFT JOIN song ON singer.id = song.singer_id;


보이시나요? LEFT JOIN 으로 song테이블에서 값을 가져오려고 했지만 일치하는 값이 없기 때문에 NULL 로 반환한 실행 화면입니다. 그럼 이것을 해결하기 위해서는 song 테이블에도 값을 추가하고 다시 조회하면 됩니다.


이렇게 하고 다시 조회해보면 밑에 실행 결과처럼 나오게 됩니다. 

## 곡 정보 추가
INSERT INTO song VALUES("좋은날", "발라드", '2025-03-19', 1);


SELECT singer.name, singer.gender, song.songname, song.genre, song.release_date
FROM singer
LEFT JOIN song ON singer.id = song.singer_id;

 




 

2-7. RIGHT JOIN

오른쪽 테이블 기준으로 왼쪽 테이블에서 일치하는 값이 있다면 값을 가져오고 없을시 NULL을 반환합니다.

 

 


2-8. RIGHT JOIN 구조


2-9. RIGHT JOIN 코드

이번에는 반대입니다.  LEFT JOIN 랑은 달리 오른쪽 테이블이 기준이니 song 테이블이 기준이 되겠습니다. 
먼저 곡 정보를 추가하고 조회한 결과입니다.

## 곡 정보 추가
INSERT INTO song VALUES("좋은날", "발라드", '2025-03-19', 1);


SELECT * FROM song;

 


이런 상태에서 다음과 같이 RIGHT JOIN을 하게 된다면 어떻게 될까요?

SELECT singer.name, singer.gender, song.songname, song.genre, song.release_date
FROM singer
RIGHT JOIN song ON singer.id = song.singer_id;

 

바로 NULL값을 반환받습니다. 그 이유는 song 테이블이 기준이니 왼쪽 테이블인 singer에 값을 가져오려고 할때 추가한 내용이 없다보니 값을 가져올 수 없어 NULL 로 반환을 받게 되는 겁니다. 그럼 이상황에서 해결방법은  singer 테이블에 값을 추가하고 다시 조회하면 singer 테이블에 값을 song에서 받을 수 있게 되는 겁니다. 

## 가수 정보 추가
INSERT INTO singer (name, gender) VALUES("아이유", "여자");

SELECT singer.name, singer.gender, song.songname, song.genre, song.release_date
FROM singer
RIGHT JOIN song ON singer.id = song.singer_id;

 


이렇게 singer에서도 값이 있어야 song에서도 받을 수 있는 RIGHT JOIN 이었습니다. 감사합니다~

결론

 

INNER JOIN은 두 테이블에서 공통된 데이터가 있을 때만 해당 데이터를 반환하고, LEFT JOIN은 왼쪽 테이블의 모든 데이터를 기준으로 하고, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환하고, RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 기준으로 하고, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환한다는 것을 알 수 있었습니다 감사합니다~~

 

LIST

'Mysql 기록' 카테고리의 다른 글

MySQL를 이용한 데이터베이스 제어  (0) 2025.03.10