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이라는 존재에게 심폐소생술을 받았던 기억이 난다 ㅎㅎ;
'Web (웹), Server (서버)' 카테고리의 다른 글
[Server] DataBase ERD / 데이터베이스 ERD (2) | 2024.02.08 |
---|---|
[Server] DataBase Transaction / 데이터베이스 트랜잭션 / 사용법 (0) | 2024.02.07 |
[Web] HTML에 CSS 적용하기 - (2) / CSS 적용 안될 때 / CSS 적용 우선 순위 / 스타일 시트 우선 순위 / 선택자 우선 순위 / 페이지 강력 새로고침 (0) | 2024.01.16 |
[Web] HTML에 CSS 적용하기 - (1) / 스타일 시트 종류 / 선택자 지정하기 (2) | 2024.01.15 |
[Web] HTTP, HTTPS, HTTP2 에 대해 알아보자 (0) | 2023.05.20 |