Join
Join(조인)을 사용하는 때는
-select 명령문의 from 절에 적어도 두 개의 테이블 명세가 존재할 때
-where 절에는 서로 다른 테이블의 열을 비교하는 조건이 한 개 이상 존재할 때
-조인에서 사용되는 용어
-조인으로 정의된 select 명령문에 있는 열을 조인 열(join column)이라 합니다.
-조인의 종류
Cross Join
Equi Join
Outer Join
Left outer Join
Self Join
Union Join
Alias 이용한 Join
-기본조인(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
//각 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;
결과 값은,
위의 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;
이렇게 나옵니다.
참고 사이트 :
댓글 없음:
댓글 쓰기