본문 바로가기

Programming/DB관련

조인(Join) 쿼리

조인(Join)의 개념
여러개의 테이블을 결합하여 데이터를 검색 하는 것입니다. 예를 들어 A와 B라는 테이블을 따로 select하는 것이 아니라 동시에 select를 한다고 생각하시면 됩니다. 그 결과 중 특정 컬럼들의 값을 비교해서 같은 것들(혹은 다른 것들)만 select한다던지 하는 것을 조인이라고 합니다. where 절로 구분 하는 방법에 따라 여러가지 이름으로 불리고 있지만 간단한 개념이 이렇다는 것입니다.

조인(Join)의 종류
EQUI JOIN, NON-EQUI JOIN, OUTER JOIN, SELF JOIN 등

EQUI JOIN
조인 대상 테이블에서 공통 칼럼을 '=' 비교를 통해, 같은 값을 가지는 행을 연결하여 결과를 생성하는 조인 방법 입니다.

예를 들기 이전에 설명의 편의를 위해 EQUI JOIN에서 테이블 간의 연결 고리가 되는 공통 칼럼을 Join Attribute라고 정의 하겠습니다. 이 Join Attribute는 참조 무결성을 가져야 하며 한쪽 컬럼의 값이 NULL일경우 조인 결과에서 제외 됩니다.

SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;

SELECT t1.column, t2.column FROM table1 t1, table2 t2 WHERE t1.column1 = t2.column2;

 

주목 할것은 :

  • column 이름 앞에 테이블 이름으로 컬럼의 스코프를 지정 줘 스코프를 구분 했다는 것.
  • FROM 절에서 테이블이 하나가 아니라 두 개(사실 N개도 가능)를 썼다는 것.
  • WHERE에서 서로 다른 두 테이블의 컬럼을 비교 하고 있다는 것.

정도 입니다.

참고로 말씀드리면, 꼭 다른 테이블에 있는 컬럼끼리 조인 쿼리의 대상이 될 필요는 없다는 것입니다. 동일한 테이블의 컬럼들 내에서도 조인은 가능 합니다. 보통 이런 것을 Self join이라고도 하더군요

 

1. 크로스조인 (= 카티젼 조인)

두 테이블 중 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 결과를 반환한다.

만약, A테이블과 B테이블이 있따면 첫 번째 테이블의 값을 두 번째 테이블의 각 값과 연결한다.

SELECT 테이블1.컬럼1, 테이블2.컬럼4 FROM 테이블1, 테이블2;

SELECT t1.컬럼1, t2.컬럼4 FROM 테이블1 t1, 테이블2 t2;

테이블1 3개와 테이블2 7개의 데이터가 각각 연결되어 총 21개의 결과 값이 나온다. (3 X 7 = 21)

SELECT 테이블1.컬럼1, 테이블2.컬럼4, FROM 테이블1, 테이블2 WHERE 테이블1.컬럼1 = 테이블2.컬럼6;

SELECT t1.컬럼1, t2.컬럼4 FROM 테이블1 t1, 테이블2 t2 WHERE t1.컬럼1 = t2.컬럼6;

 

2. 내부조인

내부 조인은 크로스조인의 결과에 조건절이 추가되어 결과 중 일부가 쿼리의 조건에 의해 제거된 조인이다.

SELECT 컬럼1, 컬럼4 FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.컬럼1 = 1;

SELECT 컬럼1, 컬럼4 FROM 테이블1 t1 INNER JOIN 테이블2 t2 ON t1.컬럼1 = 1;

 

3. 동등조인

같은지를 테스트하는 내부조인

A테이블과 B테이블이 있을 경우 해당 기본키와 참조키를 이용하여 동등 조인을 써서 같은 데이터를 검색 할 수 있다.

SELECT 컬럼1, 컬럼4 FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼6;

SELECT 컬럼1, 컬럼4 FROM 테이블1 t1 INNER JOIN 테이블2 t2 ON t1.컬럼1 = t2.컬럼6

 4. 비동등조인

같지 않은 모든 행들을 반환

SELECT 컬럼1, 컬럼4 FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.컬럼1 <> 테이블2.컬럼6;

SELECT 컬럼1, 컬럼4 FROM 테이블1 t1 INNER JOIN 테이블2 t2 ON t1.컬럼1 <> t2.컬럼6

 

참조 : http://kukuta.tistory.com/127

참조 : http://underclub.tistory.com/50

'Programming > DB관련' 카테고리의 다른 글

Character Functions (문자형 함수)  (0) 2012.11.12
DECODE 함수 (ORACLE)  (0) 2012.11.12
INNER JOIN & OUTER JOIN  (0) 2012.04.05
서브쿼리  (0) 2012.03.30
[DB] MySQL 명령어 정리  (0) 2010.06.10