Computer Science/데이터베이스
SQL JOIN의 종류
콩순이냉장고
2021. 11. 25. 14:37
Join
- 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
Inner Join
- 두 테이블 이상의 공통된 부분을 결합하는것
- inner join 예시
1
2
3
|
select st.name,st.ino, s.name,s.score
from student st
inner join subject s on st.name = s.sname
|
cs |
- where 절을 이용한 inner join
1
2
3
|
select st.name,st.ino, s.name,s.score
from student st, subject s
where st.name = s.sname
|
cs |
Left Outer Join 과 Right Outer Join
- 하나의 테이블을 기준으로 잡고 동일한 값이 없음에도 결합할때 사용
- left outer join 사용
1
2
3
|
select st.name,st.ino, s.name,s.score
from student st
left outer join subject s on st.name = s.sname
|
cs |
- right outer join 사용
1
2
3
|
select st.name,st.ino, s.name,s.score
from student st
right outer join subject s on st.name = s.sname
|
cs |
Full outer Join
- full outer join 사용 (단 mysql에선 full outer join을 지원안함 에러나옴)
1
2
3
|
select st.name,st.ino, s.name,s.score
from student st
full outer join subject s on st.name = s.sname
|
cs |
- union을 이용한 full outer join 예시
1
2
3
4
5
6
7
8
|
select st.name,st.ino, s.name,s.score
from student st
left outer join subject s on st.name = s.sname
union
select st.name,st.ino, s.name,s.score
from student st
right outer join subject s on st.name = s.sname
|
cs |
Cross Join
- 모든 경우의 데이터를 구하기 위해 사용 메모리 낭비 매우안좋음 (이론적인 예시일뿐 기업에서 사용하는 경우는 거의없음 아예 없다고 생각해도 무방함)
- cross join 사용예시
1
2
3
|
select *
from student st
cross join subject s;
|
cs |
Self Join
- 자기자신과 조인을 할때 사용
- 과목점수들 중에서 과목명은 다르지만 점수가 같은 데이터를 찾고싶다면
1
2
|
select * from subject s1, subject s2
where s1.score=s2.score and s1.name!=s2.name;
|
cs |