SQL - JOIN

김규린·2024년 8월 20일
0

Data Base

목록 보기
7/20

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);
	
-- 테이블명도 별칭(alias)을 붙일 수 있다.
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); -- 두 테이블이 동일한 컬럼일 시 별칭 필수(별칭이 없을 경우 ambiguous 오류 나옴)
	

SELECT
		menu_name
		, category_name
		, a.category_code -- select절도 동일한 컬럼은 별칭을 필수로 달아야 한다.
	FROM tbl_menu a
	JOIN tbl_category b ON (a.category_code = b. category_code); 
	
-- 관례상 join시에는 쿼리에 사용되는 모든 컬럼에 별칭을 다는 것을 원칙으로 한다.
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하는 경우
-- 1) inner join: on 또는 using 뒤에 오는 join의 조건을 만족하여 매칭 되는 결과들만 join됨
SELECT
		*
	FROM tbl_menu a
	JOIN tbl_category b ON (a.category_code = b.category_code)
	WHERE b.category_code = 7; -- 조회 결과 없음(7번 카테고리(퓨전)는 존재 하지만 join에는 존재 X)

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); -- 항상 true

SELECT
		*
	FROM tbl_menu a
	cross JOIN tbl_category b; 
	
	
-- cross 조인 나면 대부분 실수한 것

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);
profile
나는 할 수 있다...!

0개의 댓글