database

[SQL] 조인 JOIN ( INNER, OUTER, CROSS)

sewonzzang123 2022. 2. 19.
반응형

 

 


조인의 종류

1. INNER JOIN

2. OUTER JOIN

3. CROSS JOIN

 

INNER JOIN

두 개의 관련된 키가 있는 테이블에서 Column의 값을 비교 후 Join 조건에 맞는 행만 검색합니다. SQL서버의 기본 조인 방식입니다.

 

1. EQUI JOIN 

조인 대상 테이블의 칼럼 값들이 서로 정확하게 일치하는 경우에 사용하는 JOIN으로 WHERE절에 '=' 연산자를 사용하여 JOIN 조건을 명시합니다.

일반적으로 PK, FK로 지정된 칼럼을 JOIN으로 많이 사용합니다.

EQUL JOIN의 성능을 높이려면 INDEX 기능을 사용하는 것이 좋습니다.

 

2. NATURAL JOIN

EQUL JOIN에서 JOIN의 조건이 '=' 일 때 동일한 속성이 두 번 나타내게 되는데, 이 중 중복을 제거하여 같은 속성을 한번만 표기하는 것입니다.

NATURAL JOIN은 두 테이블의 동일한 이름을 가지는 칼럼이 모두 조인됩니다.

동일한 칼럼을 내부적으로 찾게 되므로 테이블 별칭 (Alias)를 주면 오류가 발생합니다.

NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데, USING문을 사용하면 칼럼을 선택해서 조인할 수 있습니다.

USING절 안에 포함되는 칼럼에 별칭(Alias)를 주면 오류가 발생합니다.

-- INNER JOIN
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1, TABLE2
WHERE TABLE1.A = TABLE2.A

SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1
INNER JOIN TABLE2
ON TABLE1.A = TABLE2.A

-- NATURAL JOIN
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1 NATURAL JOIN TABLE2

-- JOIN ~ USING
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1 
JOIN TABLE2
USING A

3. NON EQUL JOIN

조인 대상 테이블의 어떤 칼럼 값도 일치하지 않을 때 사용하며 '=' 이외의 연산자를 사용합니다.

사용 빈도가 매우 낮습니다.

연산자 : BETWEEN AND , IS NULL, IS NOT NULL, NOT, IN, >, <, >=, <=

-- NON EQUL JOIN
SELECT [TABLE1.]A, [TABLE2.]B ....
FROM TABLE1, TABLE2
WHERE (NON EQUL JOIN 조건)

 

4. SELF JOIN

SELF JOIN은 같은 테이블에서 2개의 속성을 연결하여 EQUL JOIN을 하는 것입니다. 

(자기 자신과 자기 자신이 조인한다는 의미, 별도의 구문이 없다.)

-- SELF JOIN
-- 1
SELECT [ALIAS1.]A, [ALIAS2.]B ....
FROM TABLE1 AS ALIAS1, TABLE1 AS ALIAS2
WHERE ALIAS1.A = ALIAS2.B

--2
SELECT [ALIAS1.]A, [ALIAS2.]B ....
FROM TABLE1 AS ALIAS1
	JOIN TABLE1 AS ALIAS2
    ON ALIAS1.A = ALIAS2.A

 

OUTER JOIN

조인 조건을 만족하지 않는 데이터를 처리하기 위한 JOIN으로 INNER JOIN이 두 테이블에 있는 일치하는 값만 가져오는 것에 비해 OUTER JOIN은 어느 한 쪽의 데이터를 모두 가져옵니다.

JOIN 조건에 일치하지 않은 값을 추가 할 때 사용합니다.

 

1. LEFT OUTER JOIN

JOIN 수행 시 왼쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행합니다.

 

2. RIGTH OUTER JOIN

JOIN 수행 시 오른쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행합니다.

 

3. FULL OUTER JOIN

JOIN 수행 시 왼쪽, 오른쪽 테이블의 모든 값을 읽어 JOIN을 수행합니다.

LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일합니다.

 

-- LEFT JOIN
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1
LEFT OUTER JOIN TABLE2 
ON TABLE1.A = TABLE2.B

SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1 ,TABLE2 
ON TABLE.A = TABLE2.B(+)

-- RIGHT JOIN
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1
RIGHT OUTER JOIN TABLE2 
ON TABLE1.A = TABLE2.B

SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1 ,TABLE2 
ON TABLE1.A(+) = TABLE2.B

-- FULL OUTER JOIN
SELECT [TABLE1.]A, [TABLE2.]B ...
FROM TABLE1 FULL OUTER JOIN TABLE2 
ON TABLE1.A = TABLE2.A

 

CROSS JOIN

CROSS JOIN은 상호 조인이라고도 불리며, 한 쪽 테이블의 모든 행들과 다른 테이블의 모든 행을 조인시키는 기능을 합니다.

그래서, CROSS JOIN의 결과 개수는 두 테이블의 행의 개수를 곱한 개수가 됩니다.

 

-- CROSS JOIN
SELECT *
FROM TABLE1
CROSS JOIN TABLE2

 

 

 

 

반응형

댓글