내일배움캠프/SQL

[SQL] 다른 테이블 합치기 JOIN

dydatablog 2024. 11. 15. 18:02
728x90

JOIN이 필요한 경우

필요한 데이터가 서로 다른 테이블에 있을 때

예) 주문 가격은 주문테이블에 있지만, 어떤 수단으로 결제를 했는지는 결제테이블에 있어요

 

JOIN의 기본 원리와 종류

기본적으로 엑셀의 Vlookup과 유사하다.

두 테이블이 공통으로 갖고 있는 컬럼을 찾는 것이 중요.

합치는 방식에 따른 종류는 두가지가 있다.

  • LEFT JOIN

공통 컬럼을 기준으로 하나의 테이블에 값이 없더라도 모두 조회.

예) A테이블 : {1,2,3} / B테이블 : {2,3,4} 의 데이터가 있을 때

LEFT JOIN을 사용하면 A + (B와A의 공통된 값) 인 {1,2,3}이 나온다.

  • INNER JOIN

공통 컬럼을 기준으로, 두 테이블 모두에 있는 값만 조회한다. A와 B의 교집합.

예) A테이블 : {1,2,3} / B테이블 : {2,3,4} 의 데이터가 있을 때

INNER JOIN을 사용하면 (A + B) 의 공통된 값인 {2,3}이 나온다.

-- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

-- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

팁! - 공통컬럼은 묶어주기 위한 ‘공통 값’ 이기 때문에 두 테이블의 컬럼명은 달라도 괜찮습니다. 예를 들어 주문정보에는 ‘고객ID’, 고객정보에는 ‘고객아이디’ 라고 컬럼명이 되어있다면, 테이블1.고객ID=테이블2.고객아이디 와 같이 묶어줄 수 있습니다.

 

 

 

[실습] JOIN 을 이용하여 두 개의 테이블에서 데이터를 조회해보기

주문 테이블과 고객 테이블을 cusomer_id 를 기준으로 left join 으로 묶어보기 (조회 컬럼 : order_id, customer_id, restaurant_name, price, name, age, gender)

select a.order_id,
       a.customer_id,
       a.restaurant_name,
       a.price,
       b.name,
       b.age,
       b.gender
from food_orders a left join customers b on a.customer_id=b.customer_id
728x90