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
'Database & Data > MySQL' 카테고리의 다른 글
생각나는 MySQL 명령어 파보기 - 3 (0) | 2023.06.02 |
---|---|
MySQL 프로시저(Procedure) 단계별로 작성해보기 (0) | 2023.06.01 |
생각나는 MySQL 명령어 파보기 - 1 (0) | 2023.05.31 |
MySQL Forward Engineer 기능 (0) | 2023.05.26 |
RDS(MySQL) - 서버 시간을 한국 시간으로 변경하기(권한 에러 추가) (0) | 2023.05.07 |