미래학자

[MySQL] 7장 조인 : JOIN (INNER, LEFT, RIGHT) 본문

DataBase

[MySQL] 7장 조인 : JOIN (INNER, LEFT, RIGHT)

미래학자 2016.11.22 17:59

조인은 관계형 데이터 베이스에서 일반적으로 많이 사용하며, 충분한 이해 없이 사용하기 쉬운 내용이다.

이번 시간에는 여러 조인의 종류가 그 사용하는 예에 대해서 공부해보자.


  1. INNER 조인
  2. LEFT OUTER, RIGHT OUTER, OUTER 조인
  3. 카티전 조인 (CROSS 조인)
  4. 셀프 조인
우선 JOIN을 할 두 테이블을 생성하자.


아래 사진과 같이 테이블이 만들어 진다.

 






1. INNER 조인

INNER 조인은 우리가 생각하는 일반적인 용도에 사용한다.





* ON 대신 WHERE를 쓸 수 있다.
INNER 조인은 MySQL에서는 간략히 JOIN으로 나타낸다. 일반적으로 사용하는 JOIN 이다. 
 핵심은 JOIN뒤에 ON인데, 두 테이블이 결합하는 조건을 나타낸다. 
두 테이블 모두 노래의 _id를 가지고 있으며, 서로 모두 포함하는 레코드를 합쳐서 표현한다. 
 '위 아래' 라는 곡의 id 는 115인데 이 값은 girl_group 테이블에 존재하지 않기 때문에 나오지 않는다.
집합으로 표현하자면 아래와 같다.

 





2. LEFT OUTER, RIGHT OUTER 조인


히트 곡이 저장되어 있지 않은 에프터 스쿨, 포미닛의 경우, 곡이 표시 되지 않더라도 보이고 싶을 때는 하나의 테이블 기준으로 합치는 조인을 사용할 수 있다.





위 사진과 같이 일치 하지 않는 값을 가지고 있더라도 표시할 수 있게 된다.



두 번째 쿼리는 song table을 기준으로 조인을 하였다.


* A LEFT JOIN B 와 B RIGHT JOIN A는 완전히 같은 식이다. 

* LEFT OUTER 대신 LEFT, RIGHT OUTER 대신 RIGHT만 입력해도 같은 기능을 수행한다.


LEFT 조인 과 RIGHT 조인을 집합으로 표현하면



MySQL에서는 OUTER JOIN을 지원하지 않지만, 유사한 처리를 할 수 있다. 아래는 OUTER JOIN의 범위다.





어떤 결과가 나올지 예상해보고 직접 해보면 좋겠다.




3. 카티전 조인 ( CROSS JOIN)


집합에서 집합 곱의 개념이다.


A= {a, b, c, d} , B = {1, 2, 3} 일 때


A CROSS JOIN B 는

(a,1), (a, 2), (a,3), (b,1), (b,2), (b,3), (c, 1), (c,2), (c,3), (d, 1), (d, 2), (d,3)


와 같이 결과가 나타난다. 결과의 계수는 n(A) * n(B)  = 4 * 3 = 12 이다.



두 쿼리의 결과는 같다.
카티전 조인은 너무 많은 레코드를 생성할 위험이 있기 때문에, 많이 사용하지는 않는다.



* NATURAL JOIN은 두 테이블에 칼럼명이 같은 것을 기준으로 INNER JOIN을 한다. 그렇기 때문에 JOIN 뒤에 ON을 생략할 수 있다.



4. 셀프 조인



만약 아래와 같은 조직도를 생각해보자. 트리이기 때문에 닭의 부모 노드는 최목사다. 우병우의 부모 노드는 닭이다.


이를 테이블로 만들면




 닭의 차일드는 우병우, 김기춘, 안종범이다. (닭과 sunsil은 파트너 관계다)

우리가 하고 싶은 것은 보스 아이디를 통해 보스의 이름을 함께 나타내는 테이블이다. 아래 그림과 같이 만드는 것이 목표다.






1 : 각 각 테이블의 이름중 하나는 child로 다른 하나는 parent로 보이도록 한다. 2, 3 : chicken_gate 라는 하나의 테이블을 p, c 두 개 처럼 사용하여 JOIN 했다.




지금 까지 다양한 조인을 살펴봤다. 이를 응용하면 원하는 결과를 얻을 수 있는 쿼리를 작성할 수 있을 것이다.
19 Comments
댓글쓰기 폼