본문 바로가기
프로그래밍 공부/DBMS

[lesson] DBMS - JOIN

by Luna_lua 2021. 8. 22.
반응형

JOIN이란 데이터베이스에서 여러테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져와서

가상의 테이블처럼 만들고 결과를 보여주기 위한 문법입니다.

-> 정규화를 통해 조회 테이블이 너무 많이 쪼개져 있으면 작업이 불편하기 때문에 입력, 수정, 삭제의 성능을 향상시키기 위해서 JOIN을 통해 데이터를 합친 후 사용합니다.

 

<내부 조인>

 - 조건이 일차하는 값만 합쳐서 조회

// 첫번째 선언 방식
	테이블명A INNER JOIN 테이블명B
	ON 조건식

// 두번째 사용방식
	테이블명A JOIN 테이블명B
	ON 조건식

※ ON절에 등호가 있고 없는것에 따라 등가/비등가 조인이라고 부릅니다.

 

 

★Point! SQL 실행 순서

FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
* 모든 조건을 거르고 합치는게 좋기때문에 조건식이 들어갈수 있는 ON과 WHERE에서 ON에서 모든 조건을 걸어주고 진행!

 

ON절의 조건인 JOIN이 되면서 실행되고, WHERE절의 조건은 JOIN이 모두 끝나고 나서 실행됩니다.
ON과 WHERE를 같이 사용할 때와, ON만 사용할 때의 결과가 같다면 ON만 사용하는 것이 좋습니다.

 

 

< 사용 예제>

-- FROM 절에서는 AS를 사용할 때에는 AS를 쓰지 않고 띄어쓰기로만 사용해야 한다.

-- PLAYER 테이블에서 송종국 선수가 속한 팀의 전화번호 검색하기
SELECT PLAYER_NAME, TEL FROM PLAYER P JOIN TEAM T
ON P.PLAYER_NAME = '송종국' AND P.TEAM_ID = T.TEAM_ID;


-- EMPLOYEES 테이블에서 HIREDATE가 2003~2005년 까지인 사원의 정보와 부서명 검색
-- BETWEEN은 어떠한 값에서 어떠한 값 사이의 데이터를 골라내는 문법!

SELECT E.*, D.DEPARTMENT_NAME 
FROM EMPLOYEES E JOIN DEPARTMENTS D 
ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND E.HIRE_DATE BETWEEN TO_DATE('2003-01','YYYY-MM') AND TO_DATE('2005-12','YYYY-MM');



-- BETWEEN 문법 설명 (위아래가 같은 조건이지만 가독성의 문제!)
SELECT * FROM [테이블명] WHERE [칼럼명] >=[조건1] AND [칼럼명] <= [조건2] --AND

SELECT * FROM [테이블명] WHERE [칼럼명] BETWEEN [조건1] AND [조건2] -- BETWEEN

 

<내추럴 조인 OR 자연 조인>

2개의 테이블에서 컬럼명이 동일한 값만 추출하여 조인하는것입니다.

 

-- 네츄럴 조인(NATURAL JOIN) -> 자연 조인

-- 기본 내부조인으로 자연조인 만들기
SELECT * FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;

-- NATURAL JOIN하고 가상의 테이블을 만들때 사용
SELECT * FROM EMP NATURAL JOIN DEPT

-- USING(컬럼명) 내츄럴 조인과 동일한 기능
SELECT * FROM EMP JOIN DEPT USING(DEPTNO);

이렇게 사용하나 기본 내부조인으로 가져올수 있으며, 컬럼명만 동일내용만 가져올일이 많지 않기 때문에 아! 이런 내용이 있구나 하고 알고 가시면 되는 내용이라고 보시면 될것 같습니다!

 

 

<외부 조인>

내부조인은 서로 값이 조건(ON절)이 맞는 값만 가져오게 됩니다. 그런데 하나의 테이블의 데이터는 일단 모두 가져오고 싶을때 어떻게 할까요? 

즉, 회원과 주문 내용의 테이블을 가져올때 어떤 회원이 주문을 했는지 확인할 때 주문만 한 회원이 아닌 모든 회원을 가져오고 그중에 주문을 한 회원을 보고 싶을때! 사용하는 문법입니다.

 

-- 1. 조인 할 때 왼쪽 테이블 데이터는 모두 가져오고 싶을때
SELECT * FROM STADIUM S LEFT OUTER JOIN TEAM T
ON S.HOMETEAM_ID = T.TEAM_ID;

-- 2. 조인 할 때 오른쪽 테이블 데이터는 모두 가져오고 싶을때
SELECT * FROM TEAM T RIGHT OUTER JOIN STADIUM S
ON S.HOMETEAM_ID = T.TEAM_ID;

 

<셀프 조인>

테이블은 하나인데 조인을 하고 싶을때 사용하는 문법입니다.

예를 들어 사원테이블에 직원과 매니저가 모두 있고 그매니저가 다시 직원 ID를 가지고 있을 때,

매니저를 확인하려면 직원들의 매니저ID와 직원ID를 비교하여 매니저들의 데이터를 가져와야 합니다.

이때 셀프 조인을 사용합니다.

SELECT E1.ENAME 사원이름, E2.ENAME 매니저이름 FROM EMP E1 JOIN EMP E2
ON E1.MGR = E2.EMPNO
반응형