2020년 7월 19일 일요일

오라클, 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...