[MySQL] SQL 문법 정리 (8) : Join 표현식
2024. 1. 29. 01:21
반응형
사용 데이터
NATURAL JOIN
- 두 테이블 간에 동일한 이름을 가진 열을 기준으로 조인하는 방식
- NATURAL JOIN은 특별한 조인 조건이 필요하지 않으며, 동일한 이름을 가진 모든 열을 기준으로 조인한다.
- 동일한 이름의 모든 열에 대해 Join하기 때문에 의도치 않은 결과가 나올 수 있다. 이 때에는 Natural Join보다 JOIN ON을 통해 조건을 명시적으로 지정하는 것이 좋다.
select *
from TABLE1
natural join TABLE2;
Join Expression
- Inner Join, Left Join 등의 Join Expression은 Natural Join과 달리 자동으로 같은 행 이름을 기반으로 조인하지 않는다.
- ON문을 통해서 명시적인 조인 조건을 제공해야 한다.
select *
from TABLE1
join TABLE2 on TABLE1.id = TABLE2.id;
INNER JOIN (내부 조인)
- 두 테이블 간의 교집합을 반환한다.
고객과 고객의 주문에 관한 데이터를 모두 보이시오.
select * from customer
inner join orders
on orders.custid = customer.custid;
고객의 이름과 고객이 주문한 도서의 가격을 검색하시오.
select c.name, o.saleprice from customer c
inner join orders o
on o.custid = c.custid;
LEFT (OUTER) JOIN & RIGHT (OUTER) JOIN
LEFT JOIN은 왼쪽 테이블의 모든 행을 포함하고, 조인 조건을 만족하는 오른쪽 테이블의 행을 포함한다. 만약 오른쪽 테이블에 매칭되는 행이 없다면 NULL 값을 지정한다.
select * from customer
left join orders
on orders.custid = customer.custid
왼쪽 테이블 Customer에 대한 모든 데이터를 포함하고, Join 조건에 맞는 오른쪽 테이블 Orders를 여기에 포함시켜 반환한다.
오른쪽 테이블인 Order가 Join 조건을 만족하지 않아 매칭되는 행이 없으므로 5번 회원의 오른쪽 테이블의 데이터가 NULL이 되었다.
RIGHT JOIN은 오른쪽 테이블의 모든 행을 포함하고, 조인 조건을 만족하는 왼쪽 테이블의 행을 포함한다. 마찬가지로 왼쪽 테이블에 매칭되는 행이 없다면 NULL 값으로 반환한다.
select * from customer
right join orders
on orders.custid = customer.custid;
마찬가지로 오른쪽 테이블 Order에 대한 모든 데이터가 반드시 포함되어 있다.
FULL (OUTER) JOIN
FULL JOIN은 양쪽 테이블 중 어느 한쪽에라도 매칭되는 행을 포함한다. 조인 조건을 만족하는 행이 없을 경우에도, NULL 값이 반환된다.
MySQL에서는 FULL JOIN 키워드를 지원하지 않지만, Left Join과 Right Join의 UNION 연산을 통해 해당 연산을 수행할 수 있다.
select * from customer
left join orders
on orders.custid = customer.custid
union
select * from customer
right join orders
on orders.custid = customer.custid;
CROSS JOIN
- 두 테이블 간의 모든 가능한 조합을 생성한다.
- 조인 조건이 필요하지 않고 결과는 첫 번째 테이블의 각 행과 두 번째 테이블의 각 행의 조합이다.
- 이는 카테시안 곱(Cartesian Product) 연산의 결과와 같다.
# Cross Join
select * from customer
cross join orders;
# Cartesian Product
select *
from customer, orders;
References
https://wikiwebpedia.com/join-in-microsoft-sql
반응형
'Database > SQL' 카테고리의 다른 글
[MySQL] SQL 문법 정리 (9) : Subquery (서브쿼리) (0) | 2024.01.29 |
---|---|
[MySQL] SQL 문법 정리 (7) : Natural JOIN과 Cartesian Product (0) | 2024.01.17 |
[MySQL] SQL 문법 정리 (6) : SET Operation (집합 연산) (0) | 2024.01.17 |
[MySQL] SQL 문법 정리 (5) : SELECT - ORDER BY / GROUP BY / 집계함수 (0) | 2023.11.16 |
[MySQL] SQL 문법 정리 (4) : SELECT - FROM/WHERE (0) | 2023.11.05 |