Bitaholic

Table Join하기. 본문

Computer/DB

Table Join하기.

Bitaholic 2006. 9. 19. 05:26

Database에서 주로 쓰는 Join은'Inner join'이다.

   이 join은 조인할 두 테이블을 모두 합해서 큰 테이블을 합하고(이 큰테이블에는 명시된 테이블에 있는 데이터의모든 조합이 들어가 있어야 한다. : A테이블 tuple수 * B테이블 tuple수 ... )

 

Inner join == FULL JOIN == Cartesian product (모두 같은 말이다)

 

그렇지만 Inner join으로 만든 모든 행이 필요하지 않기 때문에 필요한 행만 조인해서

쓰는'equi-join'을 많이 쓴다.

   ex) select order.id, orders.amount, orders.date

         from customers, orders <-- ',' 로 inner join을 한다.

         where customers.name = 'Julie Smith'

         and customer.customerid = orders.customerid;  <-- 조건이 맞는넘들만 join 하게~

 

LEFT JOIN (일치 하지 않는 행 찾기)

  : 양쪽 테이블에서 모두 매치되는 데이터가 아니면 조인에서 제외 되었다. 하지만 이런 데이터들도 모두 포함해야 할 경우가 있다. 한쪽의 매치되는 데이터가 없을 때에는 대신에 NULL을 넣어서 추가 시킨다.

 

 ex) select sutomers.customerid, customers.name, orders.orderid

       from customers left join orders

      oncustomers.customerid = orders.customerid;

 

     ON은 다음 과 같이 쓰일수도 있다.

 

      using (customerid) 

 

    단 양쪽 테이블 모두 customerid라는 컬럼이 있어야 한다.

 

 -Cartesian product   :  조인에 쓰인 모든 테이블들의 모든 행의 조합, 테이블의 이름은 ','로 구분하고 WHERE는 쓰지 않는다.

 -Full JOIN : 위와 같음

 -Cross JOIN: 위와 같음. 테이블 이름들 사이에 CROSS JOIN이라고 명시하여 사용할수 있다.

 -Inner JOIN: ',' 또는 INNER JOIN이라고 명시해 준다. WHERE로 조건을 달지 않으면 full join과 같다. 보통 WHERE와 같이 쓰여야 inner join이라고 할 수 있다.

 -Equi-JOIN: 다른 테이블에서 일치하는 행을 찾기 위해 '='를 사용한다. WHERE와 같이 쓰인다.

 -Left JOIN: 테이블간에 매치되지 않는 행이 있으면 NULL을 채워준다. LEFT JOIN 이라는 키워드로 사용되고, RIGHT JOIN도 쓸 수 있다.

 

- 참고 : 성공적인 웹프로그래밍 PHP와 MySql : Luke Welling, Laura Thomson 공저, 정보문화사

Comments