검색결과 리스트
Non-Equi Join에 해당되는 글 1건
- 2012.03.29 [SQL] Join
글
조인은 둘 이상의 테이블간 연계하여 데이터를 검색한다.
보통 PK와 FK를 이용하는데 조인 조건을 정의 하지않거나 잘못된 경우, 첫 테이블이 다음 테이블의 모든 행과 조인 될 경우 카테션 곱(Cartesian Product)이 일어나 상호 테이블간의 모든 데이터가 반환 되는 현상이 일어난다.
조인의 종류는 다음과 같다.
1. Equi Join - 조건절에 = 에 의해 일어난다.
SELECT A.DATA, B.DATA
FROM t_table A, t_table_sec B
WHERE A.ID = B.ID;
2. Non-Equi Join - = 외의 조인 조건을 가진는 경우
SELECT A.DATA, B.DATA
FROM t_table A, t_table_sec B
WHERE A.VALUE BETWEEN B.VALUE AND B.NEXT_VALUE;
3. Self-Join - 자기 스스로 조인 일어나는 것으로 두개의 테이블을 조인 하는 것 처럼 보이는 경우
SELECT A.DATA, B.DATA
FROM t_table A, t_table B
WHERE A.ID = B.ID;
4. Outer Join - LEFT, RIGHT, FULL OUTER JOIN이 있으며 두개의 테이블의 컬럼들에서 공통되는 값이 없을 경우 종종 이용한다. (+) 를 이용하여 사용하는데 값이 없는 측에 붙여 사용한다.
SELECT A.DATA, B.DATA
FROM t_table A, t_table_sec B
WHERE A.ID(+) = B.ID;
위와 같이 작성을 했으나 한쪽에 데이터가 맞지 않은 경우가 있다 가령 NULL 값이 들어간 경우이다.
결과가
A.DATA B.DATA
------- -------
1 1
2
나와야 하는 경우 1에 대한 행만 나왔다면 다른 조건을 걸어 (+) 시켜 줘야한다.
4.1 LEFT OUTER JOIN - 오른쪽에 조인시킬 컬럼 값이 없을 경우
SELECT A.DATA, B.DATA
FROM t_table A LEFT OUTER JOIN t_table_sec B
WHERE A.ID = B.ID;
4.2 RIGHT OUTER JOIN - 쪽에 조인시킬 컬럼 값이 없을 경우
SELECT A.DATA, B.DATA
FROM t_table A RIGHT OUTER JOIN t_table_sec B
WHERE A.ID = B.ID;
4.3 FULL OUTER JOIN - 양측에 OUTER JOIN을 거는 경우
SELECT A.DATA, B.DATA
FROM t_table A LEFT FULL JOIN t_table_sec B
WHERE A.ID = B.ID;
5. INNER JOIN - 일반 조인에서 콤마 대신 INNER JOIN을 넣고 WHERE 대신 ON 넣는 방법
SELECT A.DATA, B.DATA
FROM t_table A INNER JOIN t_table_sec B
ON A.ID = B.ID;
6. NATURAL JOIN - Equi Join과 동일한 형태로 동일한 이름을 지니는 컬럼은 모두 조인이 된다. 또한 Alias는 사용하지 못하며 동일한 컬럼이 두개 이상일 경우 JOIN~USING을 이용하여 제어가 가능하다.
SELECT DATA, NAME FROM t_table NATURAL JOIN t_table_sec
7. JOIN~USING - NATURAL JOIN에 나타나는 문제를 제어하기 위한 것으로 해당하는 컬럼을 선택해서 조인이 가능하다. 또한 USING절 안에 포함되는 컬럼에 Alias를 지정하면 오류가 난다.
SELECT A.DATA, B.NAME, ID FROM t_table A JOIN t_table_sec B USING (ID)
8. ON - 조인 조건을 지정하며 논리 연산과 서브쿼리 지정이 가능하다.
SELECT A.DATA, B.NAME
FROM t_table A JOIN t_table_sec B ON (A.DATA = B.DATA)
JOIN t_table_third C ON (C.ID = A.ID)
RECENT COMMENT