database
[Database] 스칼라 서브쿼리
tonirr
2021. 3. 1. 18:54
스칼라 서브쿼리란
- select 절에서 서브쿼리가 사용되는 경우 스칼라 서브쿼리라고 함
- 스칼라 서브쿼리의 특징
- 하나의 레코드만 리턴이 가능, 두개 이상의 레코드는 리턴할 수 없음
- 일치하는 데이터가 없더라도 null값을 리턴할 수 있음
tb_emp
----------
emp_id (사원아이디)
emp_name (사원이름)
emp_email (사원이메일)
tb_work
-----------
emp_id (사원아이디)
on_time (출근시간)
off_time (퇴근시간)
aprv_emp_id (승인자의 사원아이디)
어떤 사원이 매일매일 출퇴근 승인을 받는다고 할 때
tb_work 테이블에 기록이 된다. 기록이 된 후 사원이 속한 팀의 팀장이 출퇴근 승인을 해주면 팀장의 emp_id가 aprv_emp_id에 들어가게 된다.
사원번호가 1번인 사원의 출근시간, 퇴근시간, 승인자의 이름을 나타내려면 어떻게 해야할까?
이때 스칼라 서브쿼리를 사용하면 된다.
select
w.on_time,
w.offtime,
(select w.emp_name from tb_work w where w.aprv_emp_id=e.emp_id) aprv_name
from
tb_emp e
where
emp_id='1';
where 조건?
emp_id가 1일 때
from 어디에서?
tb_emp 테이블에서
select 무엇을?
on_time, off_time, aprv_name을 가져오겠다.
aprv_name은
where 조건?
tb_work의 aprv_emp_id와 e.emp_id가 같을 때
from 어디에서?
tb_work 테이블에서
select 무엇을?
emp_id를 가져오겠다.
따라서 스칼라 서브쿼리는 tb_work의 승인자의 아이디와 tb_emp의 사원아이디가 일치하면 사원의 이름을 가져오는 것이다.
두줄이상이면 안되며 승인자가 존재하지 않을 경우 null이 나올 수도 있다.