[MySQL] 3개 이상 테이블 JOIN
2021. 3. 16. 17:54ㆍ개인 공부 공간/SQL
최근 MySQL Workbench 를 이용해 ERD를 작성해보는 토이 프로젝트를 진행 중인데, 진행 과정 중 3개 이상의 테이블을 JOIN 해야 하는 상황을 맞아서 매우 당황 했었습니다. 구글링을 해서 찾아보니 생각보다 단순하게 해결이 가능 했습니다.
예제 테이블 생성
만든 ERD의 일부를 이용해서 3개의 테이블을 합치는 예시로 활용하려고 합니다.
우선 위 ERD에 있는 테이블 3개를 생성합니다.
CREATE TABLE MEMBER_TB
(
mem_id INT NOT NULL,
password VARCHAR(45) NOT NULL,
mem_name VARCHAR(10) NOT NULL,
mem_phone VARCHAR(15) NOT NULL,
mem_type VARCHAR NOT NULL,
start_date DATE NULL,
end_date DATE NULL,
point INT NULL
);
INSERT INTO MEMBER_TB (mem_id, password, mem_name, mem_phone, mem_type, start_date, end_date, point) VALUES ('1', 'qwerty!2', '강훈', '010-1111-1111', '정기권', '2020-12-01', '2021-2-01', 13400);
INSERT INTO MEMBER_TB (mem_id, password, mem_name, mem_phone, mem_type, start_date, end_date, point) VALUES ('2', 'q28sefq', '이슬기', '010-1122-1111', '일일권', Null, Null, 1200);
CREATE TABLE FAVORITES_TB
(
mem_id INT NOT NULL,
favorite_study_cafe_id INT NOT NULL
);
INSERT INTO FAVORITES_TB (mem_id, favorite_study_cafe_id) VALUES (1, 13);
INSERT INTO FAVORITES_TB (mem_id, favorite_study_cafe_id) VALUES (2, 13);
CREATE TABLE STUDY_CAFE_TB
(
study_cafe_id INT NOT NULL,
company_name VARCHAR(45) NOT NULL,
branch_name VARCHAR(10) NOT NULL,
address VARCHAR(15) NOT NULL,
open_time TIME(2) NOT NULL,
close_time TIME(2) NOT NULL,
study_cafe_phone VARCHAR(15) NOT NULL,
total_seats INT NOT NULL,
total_study_rooms INT NOT NULL
);
INSERT INTO STUDY_CAFE_TB (study_cafe_id, company_name, branch_name, address, open_time, close_time, study_cafe_phone, total_seats, total_study_rooms)
VALUES (13, 'A', '잠실점', '서울시 송파구 잠실본동', '05:30:00', '23:50:00', '02-411-1111', 100, 8);
INSERT INTO STUDY_CAFE_TB (study_cafe_id, company_name, branch_name, address, open_time, close_time, study_cafe_phone, total_seats, total_study_rooms)
VALUES (10, 'B', '잠실점', '서울시 송파구 잠실2동', '06:00:00', '23:00:00', '02-421-1111', 120, 6);
테이블 JOIN
3개 이상의 테이블을 JOIN 하는 방법은 생각보다 매우 단순합니다. 물론 제가 모르는 다른 방법들이 있는지는 잘 모르겠습니다.
테이블 두개를 LEFT JOIN 또는 INNER JOIN 한 후에 다시 그 밑에 LEFT JOIN 또는 INNER JOIN 을 해주면 됩니다.
코드는 다음과 같습니다.
SELECT member_tb.mem_name, member_tb.mem_id, favorites_tb.favorite_study_cafe_id, study_cafe_tb.company_name, study_cafe_tb.branch_name, study_cafe_tb.total_seats
FROM member_tb
LEFT JOIN favorites_tb on member_tb.mem_id = favorites_tb.mem_id
LEFT JOIN study_cafe_tb on favorites_tb.favorite_study_cafe_id = study_cafe_tb.study_cafe_id;
필요한 컬럼들만 불러와 JOIN을 하려고 하다 보니 SELECT
부분이 길어 졌습니다. 테이블 명들을 AS
를 이용해 별칭을 정해 주고 코드를 작성했다면 조금 더 간결해 보였을 거라는 생각이 듭니다.
Reference
- LearnSQL: How to Join 3 Tables (or More) in SQL
'개인 공부 공간 > SQL' 카테고리의 다른 글
[MySQL] 데이터베이스 정규화(1차,2차,3차) (0) | 2021.03.16 |
---|---|
[MySQL] Window 함수 (0) | 2021.03.16 |
[MySQL] JOIN(INNER,LEFT,RIGHT,OUTER) (0) | 2021.03.16 |
[MySQL] 서브쿼리(Subquery) (0) | 2021.03.16 |
MySQL 기본문법 정리(2) (0) | 2021.03.16 |