본문 바로가기

IT 기초/SQL

[SQL 문법] 테이블 결합(JOIN)

▶ 테이블 결합(JOIN)

두 테이블 관계를 활용하여 테이블을 결합하는 명령어. 이를 통해 여러 테이블을 활용하여 분석 가능

테이블 간 1:1, 1:N, N:N 형태로 연결이 가능함

종류: INNER JOIN, LEFT JOIN, RIGHT JOIN

 

▶ ERM (Entity-Relationship Modeling)

개체-관계 모델링으로, 관계형 데이터베이스에 테이블을 모델링할 때 사용됨

* 개체(Entity) : 하나 이상의 속성(Attribute)으로 구성된 객체

* 관계(Relationship) : 속성(Entity)들 간 관계

 

▶ ERD (Entity-Relationship Diagram)

ERM 모델링을 통해 만들어진 개체 간의 관계를 도표로 표현함

한 테이블에서 공통값이 PK면 다른 테이블은 FK

* FK(FOREIGN KEY): 다른테이블에서 PK(PRIMARY KEY)와 연결되는 키

 


INNER JOIN

두 테이블의 공통값이 매칭되는 데이터만 결합

 

SELECT *

   FROM 회원테이블 AS A

  INNER

     JOIN 주문테이블 AS B

        ON A.MEM_NO = B.MEM_NO;

 

→ 두 가지 테이블이 매칭되어 하나로 결합되어 조회됨

 

여기서 WHERE A.MEM_NO = '회원번호'  이어서 작성시 A에서 특정 데이터 조회 가능

(회원테이블과 주문테이블이 회원번호 기준으로 1:N 관계인지 확인)

 

회원 가입 후, 주문이력이 있는 회원


LEFT JOIN

두 테이블의 공통값이 매칭되는 데이터만 결합 + 왼쪽 테이블의 매칭되지 않는 데이터는 NULL

위에 INNER을 LEFT로 변경

(회원테이블이 왼쪽 주문테이블이 오른쪽)

NULL 값 → 회원가입만 하고 주문하지 않은 상태

 

회원가입 후, 주문이력이 있는 회원 + 회원가입 후 주문이력이 없는 회원


RIGHT JOIN

두 테이블의 공통값이 매칭되는 데이터만 결합 + 오른쪽 테이블의 매칭되지 않는 데이터는 NULL

 

WHERE A.MEM_NO IS NULL 하면 NULL 값만 필터링 됨

* IS NULL: 비교 연산자

NULL 값 → 비회원

 

회원 가입 후, 주문이력이 있는 회원 + 비회원


▶ 테이블 결합(JOIN) 및 데이터 조회(SELECT)를 활용해 여러 테이블 결합해 조회 및 분석 가능

 

1) 회원 테이블 주문 테이블 결합 (위와 같은 방식)

2) 임시테이블 생성 

  CREATE TEMPORARY TABLE 임시테이블명

  SELECT A.* (그냥 *하면 임시테이블도 하나의 테이블이기 때문에 열 생성 X)

                 B.ORDER_NO

  임시테이블은 서버 연결 종료시 자동 삭제

 

3) 성별 남성 조건 필터링(WHERE) + 거주지별 구매횟수 집계(GROUP BY) + 구매횟수 100회 미만 (HAVING) + 구매횟수 낮은순 (ORDER BY)

 

  SELECT ADDR

                 COUNT(ORDER_NO) AS 구매횟수

     FROM 임시테이블명

  WHERE GENDER =’MAN’;

  GROUP

          BY ADDR;

  HAVING COUNT(ORDER_NO) < 100

  ORDER

          BY COUNT(ORDER_NO) ASC;


▶ 3개 이상 테이블 결합

회원 - 주문 - 상품

회원 및 주문 테이블은 회원번호 기준으로 1:N 관계 (1명 회원이 여러번(N) 주문 가능)

주문 및 상품 테이블은 상품코드 기준으로 N:1 관계 (1개 상품을 여러 번(N) 주문 가능)

 

* 주문 테이블 기준으로 회원 및 상품 테이블 LEFT JOIN으로 결합

1) 회원 테이블 LEFT JOIN

SELECT  *

   FROM  주문테이블 AS A (기준 테이블로)

     LEFT

     JOIN 회원테이블 AS B

        ON A.MEM_NO = B.MEM_NO (회원번호 기준)

 

2) 상품 테이블 LEFT JOIN (이어서 코드 작성)

LEFT

JOIN 상품테이블 AS C

   ON A.PRODUCT_CODE = C.PRODUCT_CODE; (상품코드 기준)