posted by changhozz 2013. 1. 11. 03:21

SQL의 기법중 JOIN기법에 대하여 알아보도록하자.


참고, SQL이란?

Structed Query Language의 약자로써 해석하자면 '구조화된 질의어'란 뜻이다.

즉, 데이터베이스에서 데이터를 조회, 입력, 수정, 삭제, 저장하는데 사용되는 질의 언어이다.

구조화된 언어라는 말은 일정한 틀이나 패턴이 있다는 뜻이다.

일정한 틀과 패턴에 맞게 조건들을 나열하면 SQL은 원하는 결과를 가져다 준다.

패턴에 맞게 조건들을 선언한다는 의미에서 SQL을 선언적(declarative)언어라고도 한다.



*JOIN*

-JOIN이란 기법은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져온뒤

가상의 테이블을 만들어 결과를 보여주는 기법이다.

-JOIN에는 오라클에서 사용하는 JOIN문과 모든 제품들에서서 공통적으로 사용 가능한 

표준(ANSI) JOIN 방법이 있다.


우리는 MySQL을 사용하므로 표준JOIN방법을 이용하면되겠다!.

그럼 우선 어떤  종류의 JOIN연산자가 있는지 알아보도록하자.




JOIN 종류   설명 
 내부조인(INNER JOIN)   조건을 사용해서 두 테이블의 레코드를 결합한다.
 외부조인(OUTER JOIN)  내부조인과 비슷한데 일치하지 않는 열까지 반환하며 그 열은 NULL로 반환한다.
  동등 조인(EQUI JOIN)   내부조인이다. 두 테이블 사이의 같은 행들을 반환한다.
 비동등 조인(NON-EQUI JOIN)  내부조인이다. 두 테이블 사이의 같지 않은 행들을 반환한다.
 자연 조인(NATURAL JOIN)  'ON' 절이 없는 내부조인. 같은 열 이름을 가진 두 테이블을 조인할때만 작동
 크로스 조인(CROSS JOIN)  한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환.
 콤마 조인(COMMA JOIN)  콤마가 CROSS JOIN 키워드 대신 사용된다는 점을 제외하면 크로스 조인과 같다.
 셀프 조인(SELF JOIN)  자기 자신을 조인한다.


그럼 이제 실제로 테이블을 생성하여 직접 사용해보자.
오늘의 테스트를 위한 테이블 4 개를 생성해보겠다. 






지금부터 생성한 4개의 테이블을 이용하여 알아보도록 하자.

    


1. 내부 조인(INNER JOIN)

 - 조건을 사용하여 두 테이블의 레코드를 결합한다.

- 동등 조인, 비동등 조인, 자연 조인 등이 있다.


ex) Select somecolumns From table1 Inner Join table2 ON somecondition; 


1) 동등 조인(EQUI JOIN)

- 두 테이블 사이의 같은 행들을 반환한다.


ex) 각 boy가 어떤 toy를 가지고 있는지 조사한다. (매핑 확인)

SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys 
ON tb_boys.toy_id =  tb_toys.toy_id;



 2) 비동등 조인(NON-EQUI JOIN)

-두 테이블 사이의 같지 않은 모든 행들을 반환한다.


ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys ON tb_boys.toy_id <> tb_toys.toy_id ORDER BY tb_boys.boy;


참고:여기서 <> ㅡ> 이것은 같지 않음을 나타냄.




3) 자연 조인(NATURAL JOIN)


- 두 테이블에 같은 이름의 열이 있을때만 동작한다.

- ON이 필요없다.

ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys NATURAL JOIN tb_toys;




2. 외부 조인(OUTER JOIN)


- 내부 조인과 유사하며 일치하는 것이 없을 경우 NULL로 표시한다.

- 왼쪽 테이블은 FROM 바로 다음에 나오는 테이블이고, JOIN 뒤에 나오는 테이블이 오른쪽 테이블이다.

- 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTER JOIN)이 있다.

- 왼쪽 외부 조인을 사용할 경우 왼쪽 테이블을 오른쪽 테이블에 비교한다. 오른쪽 외부 조인도 그 반대로 동작한다. 


유용한 예) girls가 어느 toys를 가지고 있는지 알아보도록 쿼리를 작성한다.


i) 왼쪽 테이블을 오른쪽 테이블에 비교하는 방법 

SELECT g.girl, t.toy FROM tb_girls g LEFT OUTER JOIN tb_toys t ON g.toy_id = t.toy_id;




 ii) 반대로 했을때

SELECT g.girl, t.toy FROM tb_toys t LEFT OUTER JOIN tb_girls g ON g.toy_id = t.toy_id;



3. 크로스 조인(CROSS JOIN)

- 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환한다.


ex) SELECT t.toy, b.boy FROM tb_toys AS t CROSS JOIN tb_boys AS b;



4. 셀프 조인(SELF JOIN)

- 자기 자신을 조인한다.

- 자기 자신을 하나씩 비교하기 위해 사용한다.

- 하나의 테이블로 같은 정보를 가진 테이블이 두 개 있는 것처럼 쿼리를 보낼 수 있다.


예) 각 사람의 이름(name)과 그 사람을 담당하는 보스(boss)의 이름을 가져온다. 

SELECT c1.name, c2.name AS boss FROM tb_company_info c1 INNER JOIN tb_company_info c2 ON c1.boss_id = c2.id;








'MySQL' 카테고리의 다른 글

GROUP BY  (4) 2013.01.18