[DATABASE] SELECT JOIN 연산자
JOIN 연산자는 두 테이블 사이의 공통된 데이터를 기준으로 테이블을 연결해 하나의 테이블처럼 조회 할 수 있게 해주는 연산자다.
여러 테이블 간의 외래 키 ( Foreign Key )로 설정된 컬럼들을 연결해 조회하는 SELECT 연산자의 활용법 중 하나다.
JOIN 연산자는 데이터를 조회할 때, 여러 테이블들의 연관 관계를 포함해 데이터를 조회한다.

위와 같은 ERD는 사용자 ( Users ) 테이블과 게시글 ( Posts ) 테이블에서 1명의 사용자가 여러개의 게시글을 작성 할 수 있으므로 1:N 관계를 갖게 된다.
여기서 게시글 목록을 조회할 때 작성한 사용자의 이메일을 표시하고 싶어도 게시글 테이블에 email 컬럼이 존재하지 않아 이메일을 표시해줄 수 없게 된다.
이때, 게시글 테이블에서는 userId 컬럼을 이용해 어떤 사용자가 게시글을 작성했는지 확인 할 수 있으므로, JOIN을 이용해 외래키가 설정된 userId를 기준으로 해당 사용자의 이메일을 함께 출력해 줄 수 있다.
예시를 통해 확인해보자.
사용자, 게시글 생성 및 삽입 SQL
CREATE TABLE Users
(
userId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL
);
CREATE TABLE Posts
(
postId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
userId int(11) NOT NULL,
title varchar(255) NOT NULL,
content varchar(255) NOT NULL,
FOREIGN KEY (userId) REFERENCES Users (userId)
);
INSERT INTO Users (userId, email, password)
VALUES (1, 'AAAA', '1234'),
(2, 'BBBB', '1234');
INSERT INTO Posts (userId, title, content)
VALUES (1, 'AAAA Title1', 'content'),
(1, 'AAAA Title2', 'content'),
(2, 'BBBB Title1', 'content'),
(2, 'BBBB Title2', 'content');
사용자, 게시글 테이블 JOIN SQL
SELECT p.postId, p.title, p.content, u.email
FROM Posts as p
JOIN Users as u
ON p.userId = u.userId;

JOIN ... ON 의 역할
JOIN ... ON 은 두 개 이상의 테이블을 결합할 때, 어떤 조건으로 테이블을 결합할 것인지를 정의할 때 사용한다.
- ON 뒤에는 결합 조건이 위치하며, 이는 두 테이블 간의 관계를 정의한다.
이번 예시는 사용자( Users ) 테이블에 있는 userId가 게시글 ( Posts ) 테이블에 있는 userId로 외래 키가 설정되어 있었고, 해당 컬럼을 기준으로 게시글의 작성자를 확인할 수 있었다.