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;