2015년 12월 2일 수요일

MySQL - JOIN

Join

Join(조인)을 사용하는 때는
-select 명령문의 from 절에 적어도 두 개의 테이블 명세가 존재할 때 
-where 절에는 서로 다른 테이블의 열을 비교하는 조건이 한 개 이상 존재할 때

-조인에서 사용되는 용어

-조인으로 정의된 select 명령문에 있는 열을 조인 열(join column)이라 합니다.

-조인의 종류

Cross Join
Equi Join
Outer Join
Left outer Join
Self Join
Union Join
Alias 이용한 Join

조인을 위한 테이블
 

                                 s1                                  s2

-기본조인(general join)
SELECT * FROM s1,s2 where s1.idx = s2.idx;

mysql> select * from s1,s2 where s1.idx= s2.idx;
+------+---------+------+----------+
| idx  | name    | idx  | name     |
+------+---------+------+----------+
|    1 | 사람1   |    1 | 사람2    |
|    2 | 사람2   |    2 | 사람4    |
|    3 | 사람3   |    3 | 사람6    |
|    4 | 사람4   |    4 | 사람8    |
|    5 | 사람5   |    5 | 사람10   |
|    6 | 사람6   |    6 | 사람12   |
+------+---------+------+----------+

-이너 조인(inner join)
SELECT * FROM tableA
INNER JOIN tableB
ON tableA,name = tableB.name

mysql> select * from s1
    -> inner join s2
    -> on s1.name = s2.name;
+------+---------+------+---------+
| idx    | name     | idx    | name     |
+------+---------+------+---------+
|    2    | 사람2     |    1   | 사람2     |
|    4    | 사람4     |    2   | 사람4     |
|    6    | 사람6     |    3   | 사람6     |
+------+---------+------+---------+

//이너 조인은 교집합을 찾는 조인이다

-left outer join
select * from s1 left outer join s2
on s1.name = s2.name;













-right outer join
select * from s1 right outer join s2
on s1.name = s2.name;















//각 outer 조인은 해당되는 테이블 값만 찾는 조인이다(left or right)

위의 outer join에 where 조건을 추가하면 차집합을 표현할 수 있습니다.

where s2.name is null (left outer일 때)
where s1.name is null (right outer일 때)



















-Cross join

오른쪽의 그림처럼 만들어지는 것의 query는
각 차집합을 union하면 쉽게 가능합니다.

select * from s1 left outer join s2
on s1.name = s2.name
where s2.name is null
union
select * from s1 right outer join s2
on s1.name = s2.name
where s1.name is null;

결과 값은,











-Full outer Join

위의 cross join과 같이 하는데
tableA, tableB의 합집합을 하는데
where 부분만 없애주면 됩니다.

select * from s1 left outer join s2
on s1.name = s2.name
union
select * from s1 right outer join s2
on s1.name = s2.name;


결과 값은,














이렇게 나옵니다.

참고 사이트 : 


댓글 없음:

댓글 쓰기

JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...