AWS 클라우드환경 네이티브 수업 74일차
진행
1. Exists() / Not Exists() 함수
2. 내부 조인( Inner Join)
3. 동등조인 (Equi Join) / 비동등조인 (Non - Equi Join)
요약
1. Exists() / Not Exists() 함수
2. 내부 조인( Inner Join) / 아우터 조인 (Left Outer Join) / 아우터 조인 (Right Outer Join)
3. 동등조인 (Equi Join) / 비동등조인 (Non - Equi Join)
4. Self Join
Exists() / Not Exists() 함수 ( 8/29 In 참고하며 볼 것)
In은 어떤 값에 포함되는지 여부를 체크하는 것이라면
Exists 는 특정 컬럼값이 존재하는지 여부를 체크한다.
In은 괄호 안에 비교할 값이 올 수 도 있고, 서브쿼리가 올 수도 있는 반면에
Exists 는 오직 서브쿼리만 올 수 있다.
사원들 중에서 구매부서(30), it 부서(60), 경영부서(90)에 속한 사원들의 정보를 추출하는
아래의 예를 보자.
In을 사용했을 때는 아래와 같다.
select employee_id 사원번호,
concat(first_name, ' ' , last_name) 이름,
salary 월급,
department_id 부서코드
from employees
where department_id in (30, 60, 90);
Exists를 사용할 때는 아래와 같다.
select employee_id 사원번호,
concat(first_name, ' ' , last_name) 이름,
salary 월급,
department_id 부서코드
from employees emp
where exists (
select dep.department_id
from departments dep
where dep.department_id in (30, 60, 90)
and emp.department_id = dep.department_id ) ;
존재의 여부만 판별하기 때문에 위의 exists 내의 select 값은 임의의 어떤 데이터 값이어도 상관이 없다.
아래의 구문과 같다.
select employee_id 사원번호,
concat(first_name, ' ' , last_name) 이름,
salary 월급,
department_id 부서코드
from employees emp
where exists (
select 111
from departments dep
where dep.department_id in (30, 60, 90)
and emp.department_id = dep.department_id ) ;
내부 조인( Inner Join) / 아우터 조인 (Left Outer Join) / 아우터 조인 (Right Outer Join)
( 8/30 Join 과 같이 볼 것)
이러한 테이블들이 있다고 가정하자.
각각의 네모는 테이블이고 그 휘하에 있는 것들은 데이터의 종목이다.
내부 조인( Inner Join)
테이블 간의 공통 컬럼을 사용하여 컬럼값이 같은 데이터들을 연결하는 조인방법.
Join한 결과의 Row 수가 사용되는 테이블의 조회조건에 만족하는 Row 수와 같게 된다.
(결과 데이터의 수가 같다는 말, 왜냐면 출력 데이터에 추가 컬럼을 붙이는 작업이니까)
예를 들어서 확인해보자.
Select e.empno, e.ename, e.job, e.mgr, e.deptno, d.dname
From emp e, dept d
Where e.deptno = d.deptno
위의 코딩으로 아래의 2개의 테이블을 조인하려고 한다.
내부 조인은 왼쪽과 오른쪽 테이블의 공통 컬럼값(deptno)이
완벽히 공통적으로 존재하는 경우(10, 20, 30)만 조인 결과를 산출해낸다.
아래는 내부 조인을 한 결과값이다.
아우터 조인 (Left Outer Join)
예를 들어보자.
Select e.empno, e.ename, e.job, e.mgr, e.deptno, d.dname
From emp e
left outer join dept d
on e.deptno = d.deptno
아래의 2개의 테이블에서 왼쪽 테이블이 기준이다.
Left Outer Join은 left를 기준으로 왼쪽(left) 테이블(emp)의 모든 데이터는 조회가 되고
오른쪽 테이블에 공통 컬럼(deptno)의 데이터가 존재하는 경우(10, 20, 30)에만 조인 결과를 산출해낸다.
오른쪽 테이블에 공통 컬럼(deptno)의 데이터가 존재하지 않는다면 오른쪽 테이블 컬럼들의 데이터는 Null 값으로 처리 된다.
아래는 조인을 한 결과값이다.
아우터 조인 (Right Outer Join)
예를 들어보자.
Select e.empno, e.ename, e.job, e.mgr, e.deptno, d.dname
From emp e right outer join dept d
on e.deptno = d.deptno
아래의 2개의 테이블에서 오른쪽 테이블이 기준이다.
Right Outer Join은 right 구문을 기준으로 오른쪽(right) 테이블(dept)의 모든 데이터는 조회가 되고
왼쪽 테이블에 공통 컬럼(deptno)의 데이터가 존재하는 경우(10, 20, 30)에만 조인 결과를 산출해낸다.
왼쪽 테이블에 공통 컬럼(deptno)의 데이터가 존재하지 않는다면 왼쪽 테이블 컬럼들의 데이터는 Null 값으로 처리 된다.
아래는 조인을 한 결과값이다.
동등조인 (Equi Join) / 비동등조인 (Non - Equi Join)
둘 다 내부 조인의 종류 중 하나로써,
동등 조인 (Equal Join) 은 테이블을 조인함에 있어
공통 칼럼값의 동등 비교만을 이용해서( where 절에 = 를 사용하여) 테이블을 이어가는 방식이다.
두 테이블의 같은 행을 반환한다.
비동등 조인은 등호 연산자를 사용하지 않는다. Not In을 사용한다.
조인 조건에서 사용되는 연산자를 중심으로 비교대상이 될 좌측의 Row 들과 우측의 Row들이 서로 다른 것을 말한다.
두 테이블의 같지 않은 행을 반환한다.
Self Join
다른 테이블끼리의 Join뿐만 아니라 자기 테이블 스스로 Join을 할 수도 있다.
동일 테이블 사이의 Join을 수행하면 이름의 식별을 위해 반드시 Alias를 써야한다.
( Alias에서도 말했듯 변수 선언과 같다.)
그리고 각 필드들(구성요소)에도 각각의 테이블을 식별해줘야 한다.
아래의 예를 보면서 이해해보자.
select e.employee_id 아이디, concat(e.first_name, ' ' , e.last_name) 사원이름,
e.manager_id 매니져아이디, concat(m.first_name, ' ' , m.last_name) 매니져이름
from employees e, employees m
where e.manager_id = m.employee_id;
댓글