Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags more
Archives
Today
Total
관리 메뉴

나만의 개발 로그 | 고민 로그

SQL -3 본문

DB

SQL -3

ultramancode 2023. 1. 13. 01:23

조인이란💡

: 두개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것

회원 테이블(이름, 주소, 전화번호… ), 구매 테이블(물건, 가격…)
두 테이블을 엮어서 하나의 배송을 위한 정보(이름, 주소, 물건)를 추출하는 것이 대표적인 조인
  • 내부 조인 (Inner join) 두 테이블을 연결할 때 내부 조인이 가장 많이 사용됨.
    • 내부 조인의 형식

      SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인될 조건> [WHERE 검색 조건]
      참고) INNER 키워드는 생략 가능(MySQL·MariaDB·PostgreSQL 등 대부분의 RDBMS 동일)

      SQL 블랙핑크(BLK)가 구매한 물건의 목록에 회원정보까지 합쳐서 보려면?
      SELECT * FROM buy JOIN member ON buy.mem_id = member.mem_id WHERE buy.mem_id = 'BLK';

    • 각 회원은 구매를 여러번 할 수 있음
      - 블랙핑크(BLK)는 회원테이블에는 1개, 구매테이블에는 여러개가 있음 (일대다 관계)
      - 회원 테이블의 PK가 구매테이블에 FK로 들어가 있음

    • 내부 조인의 간결한 표현

      SELECT buy.mem_id, member.mem_name, buy.prod_name, member.addr FROM buy JOIN member ON buy.mem_id = member.mem_id; 

    • 내부조인은 구매한 기록이 있는 회원들만 출력됨
    • 구매 테이블에 없는 전체 회원들까지 출력하고 싶으면 외부 조인을 사용해야 함

 

 

 

  • 외부 조인 (outer join)
    • 외부 조인은 조인 조건에 일치하지 않는 행도 한쪽(LEFT‧RIGHT) 테이블의 모든 행을 결과에 포함하고, 상대 테이블 컬럼은 NULL로 채움
    • 외부 조인의 형식
    • outer 생략 가능
A LEFT OUTER JOIN B

=> A,B 테이블 간 조인 조건이 맞지 않는 A, B의 테이블의 데이터 중 A 테이블의 데이터는 무조건 결과값에 포함되어 나옴

=> A를 다 가져왔을 때, B 테이블에서 가져온 컬럼에 해당하는 값이 없으면 NULL 값으로 채움



A RIGHT OUTER JOIN B

=> A,B 테이블 간 조인 조건이 맞지 않는 A, B의 테이블의 데이터 중 B 테이블의 데이터는 무조건 결과값에 포함되어 나옴

=> B를 다 가져왔을 때, A 테이블에서 가져온 컬럼에 해당하는 값이 없으면 NULL 값으로 채움

 

  • 외부 조인의 활용
  • prod_name 이 NULL인 회원은 아직 구매한 이력이 한번도 없는 회원

 

실제 상황이라고 생각하면 이러한 회원을 추출해 구매 촉진 이메일 등을 보낼수가 있음

 

  • 회원 가입만 하고 한번도 구매한적이 없는 회원의 목록을 추출 하려면
        SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
        	FROM member M
        		LEFT OUTER JOIN buy B
        		ON M.mem_id = B.mem_id
        	WHERE B.prod_name IS NULL
        	ORDER BY M.mem_id

 

즉, 정리하자면

 

📌LEFT OUTER JOIN

왼쪽에 있는 테이블의 데이터는 조건에 맞지 않더라도 모두 가져온다!

조건에 맞지 않아 오른쪽 테이블의 컬럼에 대한 값이 없지만 NULL로 채워진다

만약 왼쪽테이블이 회원 오른쪽 테이블이 구매자라면

  • 이렇게 나온 JOIN의 결과로 NULL값이 들어있는 회원만 추출해서 카톡 알림으로 첫 구매 이벤트 메시지를 보내는 등으로 활용할 수 있다.

📌RIGHT OUTER JOIN

LEFT JOIN과 반대로 오른쪽에 있는 테이블의 데이터는 조건이 맞지 않더라도 모두 가져온다!

마찬가지로 조건이 맞지 않아 왼쪽 테이블의 컬럼에 대한 값이 없지만 NULL로 채워진다.

만약 왼쪽테이블이 회원 오른쪽 테이블이 구매자라면

  • 구매는 했으나 회원 정보가 없는 비정상 데이터를 찾을 때 쓰인다

참고) 실무에서는 RIGHT JOIN 은 상대적으로 드물다고 한다. 가독성 + 유지보수 측면에서 가능한 LEFT JOIN 으로 방향을 맞추고, 테이블 순서를 바꾸는 편이 일반적이다.

Comments