조인 총정리

dorongpark·2024년 8월 19일
0

해커랭크(sql)

목록 보기
17/20
  • 주요 포인트
    ㄴ 조인 종류 암기하기
    ㄴ 어떤 상황에서 조인 함수가 쓰이는지 이해하기
    ㄴ 내가 어떤 포인트에서 자꾸 JOIN VS INNER JOIN 헷갈리는지 인지하기
    ㄴ 중복값이 존재하는 테이블에서 조인시 주의해야할 점 : 조인시 중복된 테이블이 나와 원하는 결과 값이 안나올 수 있음, 그러므로 중복값이 있는 테이블을 row_number 혹은 distinct로 먼저 구별하여 사용하는 것을 추천!

1. 조인

공통된 컬럼을 조건으로 두개 이상의 테이블을 엮어 결합하는 기능

  • 공통된 컬럼을 조건으로 묶는 법
    - ON절 : 1개 이상의 공통된 컬럼으로 2개 이상의 테이블 결합 가능
    ㄴ 1개 이상의 컬럼으로 데이터를 조합 할 수 있지만, 데이터의 양이 많고, 중간에 데이터가 변경 된 경우에는 on 조건을 여러번 써서, 해당 데이터의 정합성을 최신버전으로 맞출 수 있다.

- 2개의 컬럼 조건으로 데이터 결합 예시
SELECT t1.id, t1.name, t2.age
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.id = t2.id -- on 조건절1: id로 묶음
AND t1.name = t2.name
조건절 2: name으로 묶음

2. 조인 종류와 필요성

1) inner join

: 두 테이블간 공통된 데이터만 필요할 때
ex) 주문 테이블과 고객 테이블을 조인하여, 주문을 1번이라도 한 고객을 가져오는 방법

SELECT *
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id;

2) left join

: 왼쪽 테이블의 모든 데이터를 가져오고, 오른쪽 테이블에 매칭되는 데이터가 있으면 가져온다. (=vlookup 함수와 유사하지만, 공통되는 데이터가 중복 될때, 중복된 데이터를 모조리 다 가져옴)

ex) 주문을 한 고객의 정보를 가져오기

  • 주문 테이블에 여러번 주문을 한 고객 데이터 중복(id =1)
SELECT c.customer_id, c.customer_name, o.order_id, o.order_amount
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id

결과 : left 조인하여 customer_id는 1,2,3으로 유지 되고 중복된 주문건에 대한 정보는 중복되어 나오는 것을 확인 가능

3) full outer join

: 양쪽 테이블의 모든 데이터를 가져오고, 매칭되는 값는 표시되며, 매칭 되지 않은 값은 null로 표시

ex) 주문한 고객의 정보와, 주문은 했으나 고객이 아닌(비로그인) 사람의 주문건 수 확인

SELECT *
FROM customers c
FULL OUTER JOIN orders o
ON c.customer_id = o.customer_id;
  • customer_id 존재시 order 관련 데이터 반영, 비로그인 시 order 정보만 반영

3. 중복값이 있는 테이블을 조인할 때 주의해야 할 점

: 데이터의 모든 컬럼에 중복값이 있을 수 밖에 없다. 테이블들을 엮다 보면 중복 데이터가 있는 테이블끼리 조인시, 중복값을 제거 하지 않으면 중복된 데이터만 나오는 케이스가 있다.

profile
야 너도 분석 할수 있어

0개의 댓글