데이터베이스 수업 기록
22-11-14 서브쿼리 중에 "인라인 뷰(Inline View)"
JadeStone
2022. 11. 14. 19:46
<인라인 뷰>
-사용하는 이유: 새로운 칼럼을 만든 것을 밖에서 다시 사용해서 추가 작업을 이어나가야 할 때 사용.
-처음에는 헷갈리니까 내가 필요한 select 구문을 찾고 그대로 그걸
from 절에 넣어주고 그대로 이어서 작업해주면 됨.
--인라인뷰
select *
from (select *
from employees);
--order를 거치면서 순서가 섞임
select rownum, first_name,job_id, salary
from employees
order by salary;
--인라인뷰
select rownum,
a.*
from (select first_name, job_id, salary
from employees
order by salary) a
where rownum <= 10;
--rownum이 중간 카운트 불가
select rownum,
a.*
from (select first_name, job_id, salary
from employees
order by salary) a
where rownum > 10 and rownum <=20; --값이 안 나오는 이유는 rownum은 값이 첫 번째 행부터 있어야 조회할 수 있다.
--3중 인라인 뷰
select *
from (select rownum as rn,
a.*
from(select *
from employees
order by salary desc) a)
where rn > 10 and rn <= 20;
----------------------------------------------------------------------------------------
--인라인 뷰 응용 (JOIN테이블의 위치로 인라인뷰 삽입가능 or 스칼라 쿼리와 혼합해서 사용가능)
--DEPARTMENTS 테이블에서 MANAGER_ID가 NULL이 아닌 데이터를, EMPLOYEES에 조인
SELECT *
FROM employees E
LEFT OUTER JOIN (SELECT *
FROM DEPARTMENTS
WHERE MANAGER_ID IS NOT NULL) D
ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;
--salary가 10000이상인 직원의 정보 전부, 부서명, 부서의 주소, job_title을 출력. salary기준으로 내림차순
select e.*,
d.department_name,
l.street_address,
j.job_title
from employees e
left outer join departments d on e.department_id = d.department_id
left outer join locations l on d.location_id = l.location_id
left outer join jobs j on e.job_id = j.job_id
where salary >= 10000;
--인라인뷰에 들어갈 구문(위에랑 똑같은 구문임)
SELECT A.*,
(SELECT STREET_ADDRESS FROM LOCATIONS L WHERE L.LOCATION_ID = A.LOCATION_ID),
(SELECT JOB_TITLE FROM JOBS J WHERE J.JOB_ID = A.JOB_ID) AS JOB_TITLE
FROM (select *
from employees e
left outer join departments d
on e.department_id = d.department_id
where salary >= 10000) A;
< DML(Data Manipulation Language) >
#DML 문장은 다음의 경우에 실행됩니다.
-테이블에 새로운 행을 추가할 때
-테이블에 있는 기존의 행을 변경할 때
-테이블로부터 기존의 행을 제거할 때
<기억할거>
*where -> 서브쿼리 : 조건을 걸어줌.
*select ->서브쿼리 : join의 역할을 함
*from ->서브쿼리 :인라인뷰 라고 함
*rownum 을 조회할 땐 rownum이 무조건 1행부터 나와야함.
만약 rownum 20이상 40미만 이렇게 제한을 주고싶으면 인라인 뷰를 사용해주어야함.
*select 구문에 관한 내용이 제일 중요함. 공부 잘 해두기.