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
http://www.gurubee.net/lecture/1879
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=621
'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 |
댓글