SQL/MySQL

MySQL INNER JOIN(내부 조인) 다양한 문법과 예시

진리뷰 2023. 9. 12. 09:00
반응형

 

 

MySQL-INNER-JOIN-내부-조인-다양한-사용방법-예시-썸네일
INNER JOIN 문법, 예시

 

 

이 글은 MySQL에서 여러 테이블 결합에 사용하는 INNER JOIN의 다양한 문법과 예시를 담고 있습니다.

*관계형 데이터베이스, JOIN 관련 글 MySQL 관계형 데이터베이스(RDB), 테이블 JOIN 기초 설명 예시

*다중 내부 조인 관련 글 MySQL 다중 내부 조인(INNER JOIN 여러 개) 문법, 예시

 

 

MySQL JOIN과 INNER JOIN(내부 조인)

 

JOIN은 공통키를 가진 여러 테이블을 결합하여, 흩어졌던 데이터를 한 테이블에 표현합니다.

이는 내부 조인과 외부 조인으로 나뉘며, 내부조인은 JOIN의 default입니다.

때문에 INNER JOIN = JOIN으로 생각합니다.

 

INNER JOIN은 결합한 테이블들의 교집합을 한 테이블에 표현합니다.

공통키를 기준으로, A와 B가 동시에 갖고 있는 값만 보여줍니다.

*이에 대한 내용은 본 글의 예시에서 확실히 이해할 수 있습니다.

MySQL-INNER-JOIN-내부-조인-교집합
INNER JOIN

 

 

INNER JOIN(내부 조인) 다양한 문법

 

내부 조인은 어떤 테이블의 컬럼인지 구분하고자, '테이블명.컬럼명' 형식으로 입력합니다.

 

INNER JOIN ON

SELECT 테이블명1.컬럼명2, 테이블명2.컬럼명2
FROM 테이블명1
INNER JOIN 테이블명2
ON 테이블명1.공통키=테이블명2.공통키;

 

FROM WHERE

WHERE 조건절에 테이블들의 공통키를 조건으로 걸어, INNER JOIN ON과 같은 산출물을 냅니다.

SELECT 테이블명1.컬럼명1, 테이블명2.컬럼명2
FROM 테이블명1, 테이블명2
WHERE 테이블명1.공통키=테이블명2.공통키;

 

ALIAS(별칭, AS)

여러 테이블 조인 시, 테이블명 오타 방지 및 가독성, 가시성을 위해 별칭을 많이 사용합니다.

이때 별칭은 AS 입력 대신 띄어쓰기도 가능합니다.

*별칭 관련 글 MySQL 별칭 ALIAS 사용 방법, 규칙, 차이점

SELECT 별칭1.컬럼명1, 별칭2.컬럼명2
FROM 테이블명1 AS 별칭1, 테이블명2 AS 별칭2
WHERE 별칭1.공통키=별칭2.공통키;
SELECT 별칭1.컬럼명1, 별칭2.컬럼명2
FROM 테이블명2 별칭1 INNER JOIN 테이블명2 별칭2
ON 별칭1.공통키=별칭2.공통키;

 

INNER 생략

INNER JOIN은 JOIN의 디폴트(default)이기에, INNER를 생략할 수 있습니다.

SELECT 별칭1.컬럼명1, 별칭2. 컬럼명2
FROM 테이블명1 별칭1
JOIN 테이블명2 별칭2
ON 별칭1.공통키=별칭2.공통키; 

 

SELECT문 테이블명 생략

'테이블명.컬럼명'입력이 기본이지만 SELECT문에서는 예외가 있습니다.

만약 테이블들의 컬럼명에 중복이 없으면, SELECT문은 테이블명 생략이 가능합니다.

SELECT 별칭1.컬럼명1, 별칭2.컬럼명2, 컬럼명3
FROM 테이블명1 별칭1
INNER JOIN 테이블명2 별칭2
ON 별칭1.공통키=별칭2.공통키; 

 

 

INNER JOIN(내부 조인) 예시

 

분리된 두 개의 테이블(cust_info, order)은 공통되면서도 상이한 회원 정보를 갖고 있습니다.

모든 회원 데이터를 한 테이블에서 볼 수 없을까요? 공통키가 있다면 가능합니다.

*두 테이블은 공통키(아이디)를 갖고 있기에, 조인이 가능합니다.

 

cust_info
아이디 연락처 성별
72 01011112222 F
10 01033334444 M
204 01055556666 M
526 01077778888 F

 

cust_order
아이디 주문제품번호
10 F12
526 F844

 

SELECT cust_info.아이디, cust_info.연락처, cust_info.성별, cust_order.주문제품번호
FROM cust_info, cust_order
WHERE cust_info.아이디=cust_order.아이디;

 

두 테이블의 INNER JOIN 산출물은 다음과 같습니다.

여기에서 INNER JOIN의 특징인 '동시에 갖고 있는 값 반환'이 나타납니다.

테이블 cust_info는 4행, cust_order는 2행이며, 공통키(아이디)에서 동시에 갖는 값은 아이디10, 526입니다.

따라서 교집합(아이디 10,526) 데이터만 반환값이 됩니다. 

아이디 연락처 성별 주문제품번호
10 01033334444 M F12
526 01077778888 F F844

 

위와 같은 산출물을 내되, 별칭(AS)으로 더 깔끔하게 입력할 수 있습니다.

SELECT ci.아이디, ci.연락처, ci.성별, co.주문제품번호
FROM cust_info ci, cust_order co
WHERE ci.아이디=co.아이디;
SELECT ci.아이디, ci.연락처, ci.성별, co.주문제품번호
FROM cust_info ci
JOIN cust_order co
ON ci.아이디=co.아이디;

 

산출물을 보면 cust_info 테이블은 모든 컬럼, cust_order 테이블은 주문제품번호만 필요합니다.

그러므로 *별표(=모든)를 이용하여, 더 깔끔하게 입력할 수도 있습니다.

SELECT ci.*, co.주문제품번호
FROM cust_info ci, cust_order co
WHERE ci.아이디=co.아이디;

 

테이블 간 중복 없는 컬럼명(연락처 or 성별 or 주문제품번호)을 대상으로,

SELECT문의 테이블명을 생략해도 산출물은 같습니다.

SELECT ci.아이디, 연락처, 성별, 주문제품번호
FROM cust_info ci
JOIN cust_order co
ON ci.아이디=co.아이디;
반응형
top