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
, 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의 테이블로 하여 서로 조인한다 특징) 한 테이블 내 데이터를 정리하여 현시할때 유용하다
'DB 이야기' 카테고리의 다른 글
디비 이야기 17. 서브쿼리 (1) | 2020.03.08 |
---|---|
디비 이야기 16. 집합연산자 (0) | 2020.03.08 |
디비 이야기 13. 집계함수 (0) | 2020.03.08 |
디비 이야기 12. 데이터 값 순위 매기기와 집합함수 (0) | 2020.03.07 |
디비 이야기 11. 날짜 함수 (0) | 2020.03.07 |