1. JOIN
- JOIN은 두 개 이상의 테이블을 관련있는 컬럼을 통해 결합하는데 사용된다.
- 두 개 이상의 테이블은 반드시 연관있는 컬럼이 존재해야 하며 이를 통해 JOIN된 테이블들의 컬럼을 모두 활용할 수 있다.
- join은 사실 from절에 있음
- join은 관계를 맺은 다른 테이블의 컬럼을 조회할 수 있는 것
- 컬럼을 늘리는 것
1. JOIN 쉽게 이용하는 방법과 주의할 점
- join이 헷갈릴 때, join할 두 테이블을 모두 조회하기
- 두 테이블에 겹치는 컬럼 찾아보고, 어떻게 매칭될 지 파악해보기
- 아래의 쿼리에서는 메뉴가 기준
1-1. 조인 할 두 테이블 각각 전체 조회
SELECT
*
FROM tbl_menu;
SELECT
*
FROM tbl_category;
1-2. 메뉴명과 카테고리명만 조회
SELECT
menu_name
, category_name
FROM tbl_menu
JOIN tbl_category ON (tbl_menu.category_code = tbl_category.category_code);
SELECT
menu_name
, category_name
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b. category_code);
1-3. 두 테이블에 같은 컬럼명이 있는 상태에서 조인 시 주의할 점
SELECT
menu_name
, category_name
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b. category_code);
SELECT
menu_name
, category_name
, a.category_code
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b. category_code);
SELECT
a.menu_name
, b.category_name
, a.category_code
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b. category_code);
2. JOIN의 종류
1. INNER JOIN
- 두 테이블의 교집합을 반환하는 SQL JOIN 유형
- INNER JOIN에서 INNER 키워드는 생략이 가능하다.
- ON을 활용한 JOIN
- 컬럼명이 같거나 다를 경우 ON으로 서로 연관있는 컬럼에 대한 조건을 작성하여 JOIN하는 경우
SELECT
*
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b.category_code)
WHERE b.category_code = 7;
2. LEFT JOIN
- 첫 번째(왼쪽) 테이블의 모든 레코드와 두 번째(오른쪽) 테이블에서 일치하는 레코드를 반환하는 SQL JOIN 유형
SELECT
a.menu_name
, b.category_name
FROM tbl_menu a
LEFT JOIN tbl_category b ON a.category_code = b.category_code;
3. RIGHT JOIN
- 두 번째(오른쪽) 테이블의 모든 레코드와 첫 번째(왼쪽) 테이블에서 일치하는 레코드를 반환하는 SQL JOIN 유형
SELECT
*
FROM tbl_menu a
JOIN tbl_category b USING (category_code);
SELECT
*
FROM tbl_menu a
RIGHT JOIN tbl_category b USING (category_code);
4. CROSS JOIN
- 두 테이블의 모든 가능한 조합을 반환하는 SQL JOIN 유형
SELECT
*
FROM tbl_menu a
JOIN tbl_category b ON (1=1);
SELECT
*
FROM tbl_menu a
cross JOIN tbl_category b;
5. SELF JOIN
- 같은 테이블 내에서 행과 행 사이의 관계를 찾기 위해 사용되는 SQL JOIN 유형
- 카테고리별 대분류 확인을 위한 SELF JOIN 조회
- self join은 하나의 테이블에 상위 개념과 하위 개념이 모두 들어있을 때 자기 자신 테이블을 join 하게 되는 경우에 사용한다.
- (ex: 신입사원 VS 사수(선배사원) / 하위 카테고리 VS 상위 카테고리 / 댓글 VS 대댓글 등)
SELECT
*
FROM tbl_category;
SELECT
*
FROM tbl_category a
JOIN tbl_category b ON (a.ref_category_code = b.ref_category_code);