개발로 자기계발
728x90

INNER JOIN

테이블의 교집합

두 테이블 간에 공통된 값을 가진 행만 반환

SELECT Orders.order_id, Customers.customer_name
FROM Orders
INNER JOIN Customers ON Orders.customer_id = Customers.customer_id;

 

OUTER JOIN

한 테이블의 행이 다른 테이블의 행과 일치하면 그 행을 반환 단, 어떤 행과도 일치하지 않으면 해당 행을 NULL과 함께 반환한다.

"LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN"이 있다.

 

1) LEFT JOIN(=LEFT OUTER JOIN)

 첫 번째 테이블의 모든 행과 두 번째 테이블에서 일치하는 행을 반환하며, 일치하는 행이 없는 경우에는 NULL 값을 반환

SELECT Orders.order_id, Customers.customer_name
FROM Orders
LEFT JOIN Customers ON Orders.customer_id = Customers.customer_id;

 

2) RIGTH JOIN(=RIGHT OUTER JOIN)

두 번째 테이블의 모든 행과 첫 번째 테이블에서 일치하는 행을 반환하며, 일치하는 행이 없는 경우에는 NULL 값을 반환

SELECT Orders.order_id, Customers.customer_name
FROM Orders
RIGHT JOIN Customers ON Orders.customer_id = Customers.customer_id;

 

3) FULL JOIN(=FULL OUTER JOIN)

두 테이블의 모든 행을 반환하며, 일치하는 행이 없는 경우에는 해당 위치에 NULL 값을 반환

하지만 MySQL에서는 FULL JOIN을 직접 지원하지 않아 LEFT/RIGHT JOIN과 UNION을 이용한다.

SELECT Orders.order_id, Customers.customer_name
FROM Orders
LEFT JOIN Customers ON Orders.customer_id = Customers.customer_id
UNION
SELECT Orders.order_id, Customers.customer_name
FROM Orders
RIGHT JOIN Customers ON Orders.customer_id = Customers.customer_id;

 

SELF JOIN

두 개 이상의 테이블에서 관련된 데이터를 찾아내는 방법

 

ex) employees 테이블

employee_id employee_name manager_id
1 John null
2 Mike 1
3 Sally 1
4 Jane 2
5 Bob 2

각 직원과 그들의 매니저의 이름을 함께 출력하고 싶다면?

이때 SELF JOIN을 이용한다.

 

SELECT e1.employee_name AS employee, e2.employee_name AS manager
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.employee_id;

이때 반드시 테이블 별로 별칭을 지정해줘야 한다.

 

ex) 쿼리 결과

employee manager
Mike John
Sally John
Jane Mike
Bob Mike

 

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)