안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
스칼라 서브쿼리
- scala 값 (단일 값)
- select절에 사용된 1행 1열 상관서브쿼리
사원명, 부서명, 관리자명 조회
select
emp_name,
(select dept_title from department where dept_id = e.dept_code) dept_title,
(select emp_name from employee where emp_id = e.manager_id) manager_name
from
employee e;
INLINE-VIEW
- from절에 사용된 서브쿼리
- inline view에 정의되지 않은 컬럼은 메인 쿼리에서 사용할 수 없음
- inline view에 별칭을 사용했다면, 메인 쿼리에서는 별칭으로 접근
※ view란 : 실제 테이블에 근거해서 작성된 논리적 가상 테이블
view를 통해 실제 테이블의 데이터에 접근
① inline view 1회용
② stored view 객체로 저장 후 재사용
여사원의 사번, 사원명, 성별 조회
[inline view 사용 전]
select
emp_id,
emp_name,
decode(substr(emp_no, 8, 1), '2', '여', '4', '여', '남') gender
from
employee
where
substr(emp_no, 8, 1) in ('2', '4');
inline view를 사용하지 않는다면, SQL은 어떠한 변수에 담아서 재사용할 수 없기 때문에 중복되는 코드를 다시 사용하는 경우가 빈번합니다.
gender = '여' 라고 where절에서 쓸 수 있으면 편할 텐데요,
inline view를 사용하면 비슷한 효과를 낼 수 있습니다.
여사원의 사번, 사원명, 성별 조회
[inline view 사용 후]
select
emp_id, emp_name, gender
from
(
select
emp_id,
emp_name,
decode(substr(emp_no, 8, 1), '2', '여', '4', '여', '남') as gender
from
employee
)
where
gender = '여';
코드가 훨씬 직관적이고 간결해진 것을 확인할 수 있습니다.
다만 inline view에서 별칭을 사용했다면 메인 쿼리에서도 별칭으로 접근해야 합니다.
또한 inline view에서 사용하지 않은 컬럼을 불러올 수도 없습니다.
1990년대 입사자 조회 (사번, 사원명, 입사년도)
select
*
from
(
select
emp_id,
emp_name,
extract(year from hire_date) as hire_date
from
employee
)
where
hire_date between 1990 and 1999
order by
hire_date;
30~49세의 여사원 조회 (사번, 사원명, 부서명, 성별, 나이)
select
*
from
(
select
emp_id,
emp_name,
(select dept_title from department where dept_id = e.dept_code) dept_title,
decode(substr(emp_no, 8, 1), '2', '여', '4', '여', '남') gender,
extract(year from sysdate) - (decode(substr(emp_no, 8, 1), '1', 1900, '2', 1900, 2000) + substr(emp_no, 1, 2)+1) age
from
employee e
)
where
gender = '여'
and
age between 30 and 49;
'DataBase > Oracle' 카테고리의 다른 글
WINDOW FUNCTION) 순위관련처리(rank, dense_rank, row_number), 집계관련처리(sum, avg, listagg...) (0) | 2022.04.22 |
---|---|
고급쿼리) TOP-N 분석 (rownum) (0) | 2022.04.22 |
SUB-QUERY) 상호연관 서브쿼리 (exists, not exists) (0) | 2022.04.21 |
SUB-QUERY) 단일/다중행 다중컬럼 서브쿼리 (0) | 2022.04.21 |
SUB-QUERY) 다중행 단일컬럼 서브쿼리 (any/some, all) (0) | 2022.04.21 |