maeng0830 2024. 1. 9. 21:53

SQL-JOIN

  • JOIN은 두 개 이상의 테이블을 공통된 속성을 통해 연결하여 보다 의미있는 데이터를 사용하기 위한 기능이다.
  • JOIN의 종류는 INNER JOIN(내부 조인)과 OUTER JOIN(외부 조인)이 있다.

 

INNER JOIN

  • INNER JOIN은 두 테이블의 조인 조건에 해당하는 속성 값이 일치하는 데이터들만 연결하여 조회하는 키워드이다.
  • SELECT 컬럼명 FROM 기준테이블명 INNER JOIN 타겟테이블명 ON 기준테이블명.기준컬럼명 = 타겟테이블명.타겟컬럼명;

 

INNER JOIN 예시 쿼리

SELECT *
FROM Users
	INNER JOIN Orders ON Users.id = Orders.userid;

-- orders, customers, shippers 테이블을 연결하여 모든 컬럼의 데이터를 조회한다.
-- 단 조회될 데이터는 orders의 customerid 컬럼과 customers의 customerid 컬럼의 값이 동일한 데이터
-- orders의 shippersid 컬럼과 shippers의 shippersid 컬럼의 값이 동일한 데이터이다. 
SELECT *
FROM orders
	INNER JOIN customers ON orders.customerid = customers.customerid
    INNER JOIN shippers ON orders.shipperid = shippers.shipperid;

 

OUTER JOIN

  • OUTER JOIN에는 LEFT JOIN, RIGHT JOIN이 있다.
  • LEFT JOIN은 두 테이블의 조인 조건에 해당하는 속성 값이 일치하는 데이터들을 연결하여 조회하고, 속성 값이 일치하지 않는 경우에도 기준 테이블의 데이터는 모두 조회하는 연산이다.
    • SELECT 컬럼명 FROM 기준테이블명 LEFT JOIN 타겟테이블명 ON 기준테이블명.기준컬럼명 = 타겟테이블명.타겟컬럼명;
  • RIGHT JOIN은 두 테이블의 조인 조건에 해당하는 속성 값이 일치하는 데이터들을 연결하여 조회하고, 속성 값이 일치하지 않는 경우에도 타겟 테이블의 데이터는 모두 조회하는 연산이다.
    • SELECT 컬럼명 FROM 기준테이블명 RIGHT JOIN 타겟테이블명 ON 기준테이블명.기준컬럼명 = 타겟테이블명.타겟컬럼명;

 

OUTER JOIN 예시 쿼리

-- INNER JOIN을 사용할 경우, 한번이라도 주문을 한 고객의 데이터만 조회된다(orders에 데이터로 존재하는 고객).
SELECT *
FROM customers
	INNER JOIN orders ON customers.customerid = orders.customerid;
    
-- LEFT JOIN을 사용할 경우, 주문했던 경험이 없는 고객의 데이터도 조회가 된다(customers에 데이터로 존재하는 고객).
SELECT *
FROM customers
	LEFT JOIN orders ON customers.customerid = orders.customerid;
    
-- 사실 RIGHT JOIN은 LEFT JOIN에서 기준테이블과 타겟테이블의 역할만 바뀐 것이다.
-- 그래서 보통 LEFT JOIN으로 해결한다.
-- 아래의 두 쿼리는 동일한 결과를 나타낸다.
SELECT *
FROM customers
	LEFT JOIN orders ON customers.customerid = orders.customerid;

SELECT *
FROM orders
	RIGHT JOIN customers ON customers.customerid = orders.customerid;