DB 이야기

디비이야기 15. 조인

김푸른초푸른 2020. 3. 8. 15:12

1. 조인이란?

= 테이블간 연결 또는 결합하여 원하는 데이터를 출력한다.

-> 일반적으로 사용하는 SQL 문장이 JOIN이며, 관계형 DB의 핵심이다.

이유 : 조인이 필요한 이유는 정규형에서 시작한다. (데이터 무결성)

 

 

[특징]

1) PK, FK의 연관관계가 없이 논리적인 값들만으로도 JOIN 성립가능

-> 컬럼값이 서로 같지 않아도 데이터 타입과 길이가 같으면 조인 조건으로 사용가능하다! 

 

2) FROM 절에 여러 테이블이 나열되어도 단 2개의 테이블로만 조인이 일어난다

EX) A,B,C,D 테이블을 조인할 경우 옵티마이저는 (A JOIN B) JOIN C) JOIN D 순으로 A를 주축으로 조인된다

3) DBMS처럼 한 테이블에 모든 데이터를 모아놓고 원하는 데이터를 조회하는 형식이다

-> 그렇기에 데이터가 많이 모이면 검색속도에 문제가 발생하니 정규화가 필수다 

주의)  조인을 잘못 기술되면 검색속도가 낮아질 수 있어서 신중하게 조인을 해야한다! 

 

 

 

2. 조인의 종류

1) 곱집합(카디널 조인) - 조건에 맞는 테이블 컬럼수 * 행의 수2) 동등조인(INNER JOIN) - 조인조건이 일치하는 경우 결과 출력한다 <-> 비동등조인3) 외부조인(OUTER JOIN) - 조인조건이 일치하지 않아도 모든 결과를 출력한다4) 자체 조인(셀프 조인) - 자체 테이블에서 조인할시 사용한다 5) 동등조인 - 두 테이블의 컬럼값이 동등할시 사용한다.6) 비동등조인 - 다중연산자(between, in 등)를 사용하여 join을 수행한다 -> 주의) pk-fk로 연관관계를 가지거나 논리적으로 같은 값이 존재할 경우에는 '=' 연산자를 사용한다 

 

3. EQUAL JOIN = 두 테이블의 컬럼값이 정확히 일치할시 사용함 = 대부분 PK-FK 관계일시 사용한다 
[문법]1) where 절 안에 조건으로 주기 SELECT PLAYER.PLAYER_NAME  선수명 
      , TEAM.TEAM_NAME      소속팀명 
   FROM PLAYER, TEAM 

  WHERE PLAYER.TEAM_ID = TEAM.TEAM_ID; 
 
-> 조인 조건에 =는 대입을 의미한다. 변수처럼 오른쪽에서 왼쪽으로 대입한다.

 

 
2) SQL 표준 방식 
SELECT PLAYER.PLAYER_NAME  선수명 
         , TEAM.TEAM_NAME      소속팀명 
  FROM PLAYER 
 INNER JOIN TEAM 
    on PLAYER.TEAM_ID = TEAM.TEAM_ID;

 

4. NON EQUAL JOIN 

= 연산자가 아닌 집합 연산자(BETWEEN 등)을 사용한다

= 두 테이블의 컬럼 값이 정확히 일치하지 않을시 사용

특징 : 두 테이블이 PK-FK관계이거나 논리적으로 같은 값이 존재할시 "="를 사용한다. 

-> EQUAL JOIN처럼 사용한다. 

 

EX)  SELECT E.ENAME 
       , E.JOB 
       , E.SAL 
       , S.GRADE 
    FROM EMP E, SALGRADE S 
   WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL


5. INNER JOIN 

= 조건에 따라 서로 공통된 ROW를 반환

ex) SELECT *
  FROM USERS A, MAPLIST B
WHERE A.user_id = B.user_id
;

 

5. OUTER JOIN (LEFT, RIGHT가 있다)

= 모든 값 출력하며 동등조인에서 조건을 만족 못하는 값을 NULL로 출력한다 

 

EX) SELECT *
  FROM USERS A, MAPLIST B
WHERE A.user_id = B.user_id(+)
;
-> (+)는 데이터 값이 부족행 열 뒤에 붙는다 / 한쪽에만 기술가능 / 부족한 데이터는 null 값을 같는다 
6. LEFT (OUTER) JOIN <-> RIGHT (OUTER) JOIN= 왼쪽에 있는 테이블의 모든 결과를 가져온 후  오른쪽 테이블의 데이터를 매칭하여 값이 없을시 NULL을 넣음 
7. FULL (OUTER) JOIN / CROSS JOIN= 양쪽 테이블 모두 값을 가져와 매칭시킨다. 값이 없을시 NULL 값을 대신 넣음 

8. SELF JOIN 

= 자신을 제2의 테이블로 하여 서로 조인한다 특징) 한 테이블 내 데이터를 정리하여 현시할때 유용하다