Web (웹), Server (서버)

[MySQL] Join을 사용해보자

Oscar:) 2024. 1. 17. 16:26

 

 

MySQL에서 테이블 Join 하는 방법에 대해 알아보자.

 

 

 


 

 

Join 이란?

 

 

데이터베이스의 여러 테이블에서 가져온 데이터를 하나의 집합으로 표현해준다.

그렇기에 Join은 Select문과 함께 쓰인다.

 

 

표준 SQL에서는 Join을 다음과 같이 분류한다.

 

- INNER Join

- LEFT Join

- RIGHT Join

 

 

 


 

Database Table 세팅

 

 

Join을 실습할 테이블부터 만들어 주겠다.

 

대충 다음과 같은 2개의 테이블을 만들었다.

 

 

user 테이블과 hobby 테이블로 실습을 진행해 보겠다.

 

 

 


 

Join 사용법

 

 

 INNER Join

 

 

// 문법
SELECT * FROM '테이블 명' INNER JOIN '테이블 명' ON '컬럼 명' = '컬럼 명';

// 예시
SELECT * FROM user INNER JOIN hobby ON name = name;

 

on 절의 조건을 만족하는 데이터를 가져온다.

 

on 절은 where 절과 비슷한 느낌으로 사용하며

where 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

 

 

위 예제를 실행해보자.

 

 

 

ERROR가 발생했다.

Column 'name' in on clause is ambiguous
= 절의 'name' 컬럼이 모호하다

 

 

여러 테이블에서 동일한 이름을 가진 컬럼이 나올 수 있기 때문에,

Join을 사용할 때는 컬럼 앞에 테이블명을 붙여줘야 한다.

 

SELECT * FROM user INNER JOIN hobby ON user.name = hobby.name;

 

 

위와 같이 문법을 수정하고 다시 실행해보자.

 

 

두 개의 테이블이 합쳐져서 출력되었다.

 

 


 

 

INNER Join의 경우, 사용할 수 있는 문법이 다양하다.

 

다음 예시는 모두 위와 같은 결과를 반환한다.

// INNER를 생략해도 무방
SELECT * FROM user JOIN hobby ON user.name = hobby.name;

// MySQL에서 사용할 수 있는 구문
SELECT * FROM user, hobby WHERE user.name = hobby.name;

// AS를 사용하여 테이블 명을 간략하게 사용 가능
SELECT * FROM user AS u, hobby AS h WHERE u.name = h.name;

 

 

 

위에서 실습한 내용을 살짝 응용하여 필요한 부분만 골라내보자.

 

SELECT u.name, u.age, h.hobby FROM user AS u, hobby AS h WHERE u.name = h.name;

 

 

name 컬럼이 2번이나 출력되어서 불편했는데, 1번만 출력되게 하였다.

 

 

 


 

 

LEFT Join

 

 

// 문법
SELECT * FROM '테이블 명' LEFT JOIN '테이블 명' ON '컬럼 명' = '컬럼 명';

// 예시
SELECT * FROM user LEFT JOIN hobby ON name = name;

 

첫 번째 테이블을 기준으로 두 번째 테이블을 조합한다.

 

바로 예제 결과를 보겠다.

 

 

INNER Join과 도드라지는 차이점은 첫 번째 테이블이 기준이 되는 것이다.

 

hobby 테이블에는 Taron 컬럼이 없었지만 함께 출력된 것을 볼 수 있다.

 

 


 

 

RIGHT Join

 

 

// 문법
SELECT * FROM '테이블 명' RIGHT JOIN '테이블 명' ON '컬럼 명' = '컬럼 명';

// 예시
SELECT * FROM user RIGHT JOIN hobby ON user.name = hobby.name;

 

마찬가지로, 문법적으론 위 2개와 크게 다를것이 없다.

 

두 번째 테이블을 기준으로 첫 번째 테이블을 조합한다.

 

 

 

첫 번째 테이블을 두 번째 테이블을 기준으로 조합하였기 때문에

Taron 컬럼은 나타나지 않았고, 정렬 순서는 첫 번째 테이블이 되었다.

 

 

 


 

Join 부가 기능

 

 

INNER Join을 기준으로 간단한 것들만 조금 더 알아보자.

 

 

일단 테이블 구조를 다음과 같이 변경했다.

 

2개의 테이블에 모두 abledNum 컬럼을 추가했다.

 

 

 

✅ ON 절 + WHERE 절

 

ON 절과 WHERE 절을 함께 사용하여 정교한 데이터를 얻을 수 있다.

 

SELECT * FROM user JOIN hobby ON user.name = hobby.name
WHERE user.abledNum = 1;

 

 

user.name = hobby.name

+

user.abledNum = 1

 

위 데이터가 출력된다.

 


 

✅ AND 절

 

 

그리고 여기서 AND 절을 추가하여 더더욱 정교한 데이터를 얻을 수 있다.

 

SELECT * FROM user JOIN hobby ON user.name = hobby.name
AND age = 27
WHERE user.abledNum = 1;

 

 

user.name = hobby.name

+

user.age = 27

+

user.abledNum = 1

 

위 데이터가 출력된다.

 

 


 

 

 

 

오늘은 Database Table의 Join에 대해 알아보았다.

 

 

Join은 여러모로 정말 유용한 친구다.

 

본인은 기초 공부할 때 Table 구조를 엉망으로 짜서

Join이라는 존재에게 심폐소생술을 받았던 기억이 난다 ㅎㅎ;