콩순이냉장고 2021. 11. 25. 14:37

Join

  • 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법

Inner Join

  • 두 테이블 이상의 공통된 부분을 결합하는것

학생 과 과목의 2개의 테이블

  • 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

 

두개의 테이블 INNER JOIN

Left Outer Join 과 Right Outer Join

 

왼쪽 LEFT JOIN , 오른쪽 RIGHT 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

 

 

 

LEFT JOIN의 결과

 

  • 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

 

 

RIGHT JOIN의 결과

Full outer Join

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