2020년 7월 19일 일요일

오라클, SQL, 인라인뷰(IN_LINE VIEW)

오라클, SQL, 인라인뷰(IN_LINE VIEW)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=617

5.5 인라인뷰(IN_LINE VIEW)

서브 쿼리는 FROM절에서도 가능 한데 이와 같은 것을 뷰((View)는 뷰(View)인데 Create 명령어로 만들지 않고 해당 라인에 직접 기술한다고 해서 하여 인라인 뷰(InLine View)라고 일컫는다. 인라인 뷰는 Create 명령어를 이용하여 만들지 않으므로 필요한 시점에만 사용된다는 특징이 있다. 가령 어떤 테이블의 데이터 건수, 칼럼 개수가 많다고 했을 때 FROM절 다음에 전체 테이블을 기술 하면 쿼리실행시 수행속도에 악 영향을 미칠 수가 있으므로 FROM절 뒤에 테이블 데이터 중 필요한 행과 열만 선택 한다면 좀더 효율적인 쿼리 할 수 있을 것이다. 또한 인라인뷰는 조인 연산을 줄이기 위해 또는 분리된 쿼리를 하나의 쿼리에 모아서 사용하기 위해 사용한다.

--EMP 테이블에서 직무가 “SALESMAN”인 사람들의 이름, 부서명, 직무를 출력하는 예문

SQL> select ename, dname, job from (select ename, job, deptno from emp

2 where job = 'SALESMAN') e, dept d

3 where e.deptno = d.deptno;

ENAME DNAME JOB

---------- -------------- ---------

ALLEN SALES SALESMAN

WARD SALES SALESMAN

MARTIN SALES SALESMAN

TURNER SALES SALESMAN

--아래의 경우 인라인뷰를 이용하지 않은 예문이다.

SQL> select ename, dname, job from emp e, dept d

2 where e.job = 'SALESMAN'

3 and e.deptno = d.deptno;

ENAME DNAME JOB

---------- -------------- ---------

ALLEN SALES SALESMAN

WARD SALES SALESMAN

MARTIN SALES SALESMAN

TURNER SALES SALESMAN

--이번에는 WITH문을 이용해 보자.

SQL> with emp2 as (

2 select ename, job, deptno from emp

3 where job = 'SALESMAN'

4 )

5 select ename, dname, job from emp2 e, dept d

6 where e.deptno = d.deptno;

ENAME DNAME JOB

---------- -------------- ---------------

ALLEN SALES SALESMAN

TURNER SALES SALESMAN

MARTIN SALES SALESMAN

WARD SALES SALESMAN

오라클, SQL, 스칼라서브쿼리, Scalar SubQuery

오라클, SQL, 스칼라서브쿼리, Scalar SubQuery

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=616

5.4 Scalar SubQuery

하나의 단일값을 나타내기 위해 SELECT구문을 SELECT LIST, WHERE절, ORDER BY절, DML등에 사용하는 서브쿼리를 지칭하며 데이터건수가 적을 경우 조인 방식보다 유리하다. 유효한 수식이 사용될 수 있는 곳이라면 어디든 사용가능하며 반드시 하나의 결과만 되돌려야 한다.

--사원테이블과 부서테이블을 조인하여 사번, 사원명, 부서코드, 부서명을 추출한다고 하자.

SQL> select empno, ename, emp.deptno, dname from emp, dept

2 where emp.deptno = dept.deptno;

EMPNO ENAME DEPTNO DNAME

---------- ---------- ------ --------------

7782 CLARK 10 ACCOUNTING

……

7654 MARTIN 30 SALES

14 개의 행이 선택되었습니다.

-- 스칼라 서브쿼리로 바꾸면

SQL> select empno, ename, deptno, (select dname from dept where emp.deptno = dept.deptno)

2 from emp;

EMPNO ENAME DEPTNO (SELECTDNAMEFR

---------- ---------- ------ --------------

7369 SMITH 20 RESEARCH

……

7934 MILLER 10 ACCOUNTING

14 개의 행이 선택되었습니다.

-- 부서별로 사원수를 출력하는 쿼리를 스칼라 서브쿼리를 이용해 보자.

SQL> select deptno, dname,

2 (select nvl(count(*),0) from emp where emp.deptno = dept.deptno) emp_cnt

3 from dept ;

DEPTNO DNAME EMP_CNT

------ -------------- ----------

10 ACCOUNTING 3

20 RESEARCH 5

30 SALES 6

40 OPERATIONS 0

-- insert 구문에 스칼라 서브쿼리를 사용해보자.

SQL> create table emp_summary (

2 sum_sal number,

3 avg_sal number,

4 max_sal number,

5 min_sal number

6 );

테이블이 생성되었습니다.

SQL> insert into emp_summary (

2 sum_sal,

3 avg_sal,

4 max_sal,

5 min_sal )

6 values (

7 (select sum(sal) from emp),

8 (select avg(sal) from emp),

9 (select max(sal) from emp),

10 (select min(sal) from emp)

11 );

1 개의 행이 만들어졌습니다.

SQL> commit;

-- 아래처럼 order by절에서도 사용 가능하다. EMP테이블에서 부서이름으로 정렬

SQL> select empno, ename, sal

2 from emp e

3 order by ( select dname from dept d

4 where e.deptno = d.deptno);

EMPNO ENAME SAL

---------- ---------- ----------

7782 CLARK 2450

7839 KING 5000

7934 MILLER 1300

7566 JONES 2975

……

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...