愛林

SQL을 이용한 정형 데이터 다루기(SQL응용) - 조인(JOIN) 본문

Data Science/SQL

SQL을 이용한 정형 데이터 다루기(SQL응용) - 조인(JOIN)

愛林 2022. 7. 14. 00:25
반응형

 

 

SQL 도 .. 끝이 보인다 ..!

 

 

 


 

Intro

 

 

저번 시간에는 SQL 에서 자주 쓰는 집계함수, HAVING 절, GROUP BY 절에 대해 알아보았다.

https://wndofla123.tistory.com/33

 

SQL을 이용한 정형 데이터 다루기(SQL응용) - 집계 쿼리(집계 함수, GROUP BY, HAVING 절)

Intro 저번 시간에는 SQL 함수를 알아보았다. 이번에는 집계 함수, 그리고 SQL 에서 정말정말 많이 쓰는 GROUP BY, HAVING 절을 공부해보자. 집계 함수 (Aggregate Function) 집계 함수란, 여러 행들의 그룹이

wndofla123.tistory.com

 

이제 마지막, JOIN 에 대해 알아보자.

 

 


 

 

조인 (JOIN)

 

 

 

조인이란 ?

 

조인은 두 개 이상의 테이블들을 연결 또는 결합해서 데이터를 조회하는 것을 말한다.

 

 

JOIN 이 필요한 기본적인 이유는 데이터 모델링에서 배운 정규화에서부터 시작한다.

정규화란 불필요한 데이터의 정합성을 확보하고 이상 현상 발생을 피하기 위해

테이블을 분할해서 생성하는 것이다.

우리가 앞에서 ERD 하고 할 때 했던 관계설정과 유사하다.

 

하나의 테이블에 모든 정보를 다 넣으면 데이터의 정합성에 더 큰 비용을 지불해야 하고,

성능 측면에서도 간단한 데이터 하나 찾는데도 많은시간이 걸리는 등의 문제가

생길 수 있다.

하지만 테이블을 정규화시켜서 데이터를 분할한다면 ?

위와 같은 문제는 자연스럽게 해결된다.

특정 요구조건을 만족하는 데이터들을 분할된 테이블로부터 조회하기 위해서는

테이블 간에 논리적 연관관계가 필요하고 그런 관계성을 통해서 다양한 데이터들을 조회할 수 있는 것이다.

 

쉽게 말해서, 데이터를 분리시켜놓지 않는다면, 뭐 하나가 바뀌었을 때 다 바꾸어야 하거나,

하나의 데이터를 찾는데도 큰 데이터테이블 안에서 찾아야 하기 때문에 비효율적인 측면이 생긴다.

 

유연한 조인 기능은 관계형 데이터베이스의 가장 큰 장점이라고 할 수 있다.

 

 

 


 

 

일반적인 경우, 행들은 PRIMARY KEY 나 FOREIGN KEY 값의 연관에 의해 JOIN 이 성립된다.

그러나, 무조건 이런 값을 사용해야 하는 것은 아니다.

이러한 것이 없어도 논리적은 값들의 연관성만으로 JOIN 이 성립할 수 있다.

 

주의사항은, 여러 테이블이 나열되더라도 SQL 에서 데이터를 처리할 때는 단 두 개의 집합 간에만

조인이 일어난다는 것이다.

 

JOIN 조건은

JOIN에 참여하는 대상 테이블이 N개라고 했을 때, N개의 테이블로부터 필요한 데이터를 조회하기 위해

필요한 JOIN 조건은 대상 테이블의 개수에서 하나를 뺀 N - 1개 이상이 필요하다.

 

 

 


 

 

등가 조인 (EQUI JOIN)

 

 

EQUI JOIN 은 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법이다.

대부분 PK -> FK 의 관계를 기반으로 한다.

 

고전적인 JOIN 의 조건은 조건을 주는 WHERE 절에 기술하게 되는데,

EQUI JOIN 은 '=' 연산자를 사용하여 표현하게 된다.

 

-- Equi Join 실습
-- [예제] 사원 테이블과 조직 테이블의 조인 SQL
SELECT TB_EMP.EMP_NAME, TB_EMP.ORG_CD
, TB_ORG.ORG_CD, TB_ORG.ORG_NAME
FROM cslee.TB_EMP, cslee.TB_ORG
WHERE cslee.TB_EMP.ORG_CD = cslee.TB_ORG.ORG_CD;

 

TB_EMP 의 ORG_CD 와 TB_ORG 의 ORG_CD 를 등가조인시켰다.

 

JOIN 대상이 되는 테이블명이 조회하고자 하는 컬럼 앞에 반복해서 나온다.

그래서 테이블 명이 길고, 이를 계속해서 입력하다 보면 개발 생산성이 떨어지는 문제점과 함께

개발자의 실수가 발생할 가능성이 높아진다.

 

이는 TABLE ALIAS 를 사용해서 해결할 수 있다.

 

여러 테이블을 사용하는 조인을 이용하는 경우에 매우 유용하게 쓸 수 있다.

 

만약 테이블에 대한 ALIAS 를 적용해서 SQL 문장을 작성할 경우에, 

WHERE절과 SELECT 절에는 테이블명이 아닌 테이블에 대한 ALIAS 를 사용해야 한다.

 

SELECT 해올때도 . ALIAS. 사용해야 한다.

 

 

SELECT E.EMP_NO,
E.EMP_NAME,
E.ORG_CD,
O.ORG_NAME,
E.POSITION
FROM cslee.TB_EMP AS E,
cslee.TB_ORG AS O
WHERE E.ORG_CD = O.ORG_CD 
AND E.POSITION = '팀장' 
ORDER BY O.ORG_NAME;

 

이 예제에서는 테이블에 대한 ALIAS 를 사용하여, TM_EMP 를 E로, TB_ORG 를 O 로 간략화시켰다.

 

 

 


 

 

3개 이상 테이블 JOIN

 

SELECT A.ACCNO,
C.CUST_NAME,
P.PROD_NAME,
A.CONT_AMT,
E.EMP_NAME
FROM cslee.TB_ACCNT A, cslee.TB_CUST C, cslee.TB_PROD P, cslee.TB_EMP E
WHERE A.CUST_NO = C.CUST_NO
AND A.PROD_CD = P.PROD_CD
AND A.MANAGER = E.EMP_NO;

 

간단하게 WHERE 절에 AND 를 사용해주면 된다.

 

 

결과

 

 


 

Non EQUI JOIN

 

 

두 개의 테이블이 PK-FK 로 연관관계를 가지거나 논리적으로 같은 값이 존재하는 경우에는

'=' 연산자를 사용하여  EQUI JOIN 을 사용한다고 했다.

 

그러나, 두 개 테이블 간에 컬럼값들이 서로 정확하게 일치하지 않는 경우에는 NON EQUI JOIN 을

사용한다.

 

Non EQUI JOIN 은 '=' 연산자가 아닌 다른

Between , >, >= 등등 연산자들을 사용하여 JOIN 시키는 것이다.

 

 

SELECT E.EMP_NAME 사원명,
E.SALARY 연봉,
S.GRADE 급여등급
FROM cslee.TB_EMP E, cslee.TB_GRADE S
where E.SALARY
BETWEEN S.LOW_SAL AND S.HIGH_SAL;

 

사원별 급여와 어느 등급에 속하는지 알고 싶다는 요구사항에 대한 Non EQUI JOIN 의 사례이다.

 

BETWEEN AND 를 사용하여

SALARY 가 연봉 등급 어디에 해당하는 지를 출력했다.

 

말을 이상하게 하는 것 같다.

바로 출력결과 보여주기..

 

 

 

 


 

 

 

Review

 

 

JOIN 에 대하여 알아보았다.

 

JOIN 은 여러 개의 테이블을 연결하거나 결합시켜서 데이터를 볼 수 있게 해주는 기능이다.

앞에서 했던 관계설정과 같다.

관계형 데이터베이스 기능에서 핵심적인 기능이며, 아주 유용하게 쓰이는 기능이다.

 

 JOIN  조건은 JOIN 테이블 수  - 1 을  해주어야 한다.

 

PK,FK 키로 조인을 만들 수 있으나, 굳이 쓰지 않아도 관계 설정이 가능하다.

 

EQUI JOIN 은 등가조인으로, '=' 연산자를 사용한다.

테이블명이 긴 경우 ALIAS 를 사용해서 TABLE 에 별명을 붙여줄 수 있다.

이 경우, 필수적으로 SELECT 나 WHERE 절에도 TABLE ALIAS 를 사용해주어야 한다.

 

3개 이상 테이블을 JOIN 시킬 때에는 WHERE 절에 AND 를 사용한다.

 

두 개 테이블 간의 컬럼이 정확하게 일치하지는 않으나, JOIN 을 설정하고 싶을 때는

NON EQUI JOIN 을 사용한다.

NON EQUI JOIN 은 = 대신에 >=, > , <, <= 연산자를 사용해서 관계를 설정해줄 수 있다.

 

 


 

 ※ 저의 모든 데이터 분석 자료는 모두 공공 빅데이터 청년 인턴 교재들을 참고합니다.

 

 

Comments