본문 바로가기
CS/DB

(MySQL) INNER JOIN

by 넬준 2022. 8. 12.

 

INNER JOIN

//두 query의 결과는 같다.

//INNER JOIN 사용
SELECT *
FROM product 
INNER JOIN ordering 
ON product.product_id = ordering.product_id;

//INNER JOIN 사용x
SELECT *
FROM product, ordering
WHERE product.product_id = ordering.product_id;

 

EQUI JOIN, NON-EQUI JOIN, NATURAL JOIN

 

1. EQUI JOIN

일반적인 INNER JOIN 형태로 두 테이블에서 기준 컬럼의 로우값이 같은 로우 반환

JOIN 조건 절에 EQUAL 연산자(=)로 연결

주로, Primary key와 Foreign key 컬럼이 조인할 때 사용

 

SELECT * 
FROM product p 
INNER JOIN ordering o 
ON p.id = o.product_id;

 

2. NON-EQUI JOIN

JOIN 조건 절에 EQUAL 연산자 아닌 >,>=,<,<=, BETWEEN..AND, 등 연산자를 사용

기준 컬럼의 로우값이 직접적으로 일치하지 않는 경우 사용

 

3. NATURAL JOIN

EQUI JOIN과 동일

두 테이블에서 이름, 데이터타입이 같은 컬럼들 기준으로 EQUI JOIN이 된다.

동일 컬럼이 2개 이상일 경우는 USING 키워드로 컬럼을 제어할 수 있다.

 

SELECT * 
FROM product 
NATURAL JOIN ordering;

 

ex) product 테이블과 ordering 테이블에 동일 컬럼이 여러 개이지만, 그 중 product_id 컬럼을 기준으로 join하고 싶으면 다음과 같이 작성

 

SELECT * 
FROM product 
INNER JOIN ordering 
USING (product_id);

 

물론 ON 키워드를 사용해도 된다

 

SELECT * 
FROM product p 
INNER JOIN ordering o 
ON p.product_id = o.product_id;

 

USING을 사용한 query는 product_id 컬럼을 한 번 부르고,

ON을 사용한 query는 product_id 컬럼을 각 테이블에서  한 번씩 부르기 때문에

반환 테이블에 product_id 컬럼이 1개, 2개인 차이가 있다.

 

 


참고

https://www.neilwithdata.com/join-using

https://seeds.tistory.com/581

http://www.gurubee.net/lecture/1879

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=621 

https://dev.mysql.com/doc/refman/8.0/en/join.html

https://coding-factory.tistory.com/87

'CS > DB' 카테고리의 다른 글

제약 (Constraint)  (0) 2022.08.14
인덱스  (0) 2021.12.06
DELETE / TRUNCATE / DROP 비교  (0) 2021.12.04
테이블 생성 / 삭제 / 변경  (0) 2021.12.04
데이터베이스 계층 구조  (0) 2021.12.04

댓글