[JOIN]
일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다.
하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.
FROM 절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두 개의 집합 간에만 조인이 일어난다는 것이다.
테이블의 조인 순서는 옵티마이저에 의해서 결정된다.
Table A
id userId name
1 id001 youn
2 id002 life
3 id003 mysql
4 id004 oracle
5 id005 databasel
--
Table B
id userId nickName
1 id001 nickYoun
2 id002 nickLife
4 id004 nickOracle
6 id006 nickDuck
--
[INNER JOIN]
A INNER JOIN B를 하게 되면 A테이블과 B테이블의 교집합을 나타낸다.
select *
from a inner join b
on a.id = b.id;
-- 결과
id userId name id userId nickName
1 id001 youn 1 id001 nickYoun
2 id002 life 2 id002 nickLife
4 id004 oracle 4 id004 nickOracle
[OUTER JOIN]
A OUTER JOIN B를 하게되면 A테이블과 B테이블의 합집합을 나타낸다.
LEFT OUTER JOIN
select *
from a left outer join b
on a.id = b.id;
-- 결과
id userId name id userId nickName
1 id001 youn 1 id001 nickYoun
2 id002 life 2 id002 nickLife
3 id003 mysql null null null
4 id004 oracle 4 id004 nickOracle
5 id005 databasel null null null
RIGHT OUTER JOIN
select *
from a right outer join b
on a.id = b.id;
--결과
id userId name id userId nickName
1 id001 youn 1 id001 nickYoun
2 id002 life 2 id002 nickLife
4 id004 oracle 4 id004 nickOracle
null null null 6 id006 nickDuck
FULL OUTER JOIN
MySQL에서는 FULL OUTER JOIN을 지원하지 않아 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과를 UNION 해주어야 한다.
A에는 있는데 B에 없는 id가 3, 5인 부분은 null로 조회됩니다.
B에는 있는데 A에 없는 id가 6인 부분은 null로 조회됩니다.
select *
from a left outer join b
on a.id = b.id
union
select *
from a right outer join b
on a.id= b.id;
-- 결과
id userId name id userId nickName
1 id001 youn 1 id001 nickYoun
2 id002 life 2 id002 nickLife
3 id003 mysql null null null
4 id004 oracle 4 id004 nickOracle
5 id005 databasel null null null
null null null 6 id006 nickDuck
'데이터베이스' 카테고리의 다른 글
[DB]인덱스와 인덱스의 장단점 (0) | 2022.09.08 |
---|---|
DB 트랜잭션(Transaction)과 트랜잭션 격리 수준(Isolation Level) (0) | 2022.08.22 |