데이터베이스

[DATABASE] SELECT JOIN 연산자

program-yam 2024. 9. 5. 22:57

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;

 

SELECT JOIN 결과

 

JOIN ... ON 의 역할

JOIN ... ON 은 두 개 이상의 테이블을 결합할 때, 어떤 조건으로 테이블을 결합할 것인지를 정의할 때 사용한다.

  • ON 뒤에는 결합 조건이 위치하며, 이는 두 테이블 간의 관계를 정의한다.

이번 예시는 사용자( Users ) 테이블에 있는 userId가 게시글 ( Posts ) 테이블에 있는 userId로 외래 키가 설정되어 있었고, 해당 컬럼을 기준으로 게시글의 작성자를 확인할 수 있었다.