'oraclesubquery'에 해당되는 글 1건

  1. 2020.11.19 oracle 스칼라쿼리, 인라인뷰, 서브쿼리 차이
Oracle2020. 11. 19. 09:03

 

 

 

스칼라쿼리 : SELECT 절에서 함수처럼 사용되는 쿼리문이다.

하나의 레코드만 리턴가능, (반환값은 꼭 1개여야함.) 두개이상의 레코드는 리턴할 수 없다.

일치하는 데이터가 없으면 NULL 값을 리턴한다.

스칼라 쿼리의 예)

 

SELECT D.DEPTNO, 
(SELECT MIN(EMPNO) FROM EMP WHERE DEPTNO = D.DEPTNO EMPNO
   FROM DEPT D
  ORDER BY D.DEPTNO) AS EMPNO -- 스칼라쿼리
  FROM DEPT D
ORDER BY D.DEPTNO;

 

 

스칼라 쿼리는 일치하지 않더라도 NULL을 리턴하므로 Outer 조인과 같은 형태이며, 이는 스칼라 쿼리와 Outer 조인은 같은 맥락이라고 볼 수 있다는걸 의미한다.

인라인뷰 : FROM 절에서 임시 공간에 테이블을 생성하여 사용되는 뷰와 비슷한 저장 형태를 의미한다.

FROM 절에 있는 서브쿼리가 인라인 뷰를 생성

인라인뷰 예)

 

SELECT E.LAST_NAME, E.SALARY, D.AVGSAL
  FROM EMPLOYEES E, (SELECT DEPARTMENT_ID, AVG(SALARY) AVGSAL
                       FROM EMPLOYEES
                       GROUPO BY DEPARTMENT_ID) D -- 테이블처럼 이해하면 된다.
                                                  -- 별칭 꼭 줘야함
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
  AND E.SALARY < D.AVGSAL;

 

 

서브쿼리 : WHERE 조건 절에서 비교형태로 사용되는 형태

서브쿼리 예)

 

SELECT A.ACCOUNT,
       A.CUSTOMER_NO,
       A.CUSTOMER_NM,
       A.ADD_CASH
       ( SELECT EMP_NM
           FROM EMPLOYEE A
          WHERE D.EMP_NO = A.EMP_NO) AS 담당자_이름 -- 스칼라쿼리
  FROM TB_ACCOUNT A,
       (SELECT CUSTOMER_NO, 
               MAX(ADD_CASH) AS 적립금
          FROM TB_POINT
         WHERE ADD_DATE = '20190218') C -- 인라인 뷰
WHERE NOT EXISTS ( SELECT 'X' 
                     FROM TB_DEPOSIT B
                    WHERE A.ACCOUNT_NO = B.ACCOUNT_NO
                      AND B.DEAL_DATE LIKE '201912%') -- 서브쿼리
                        

'Oracle' 카테고리의 다른 글

[Oracle] sqlDeveloper 대체변수 '&' 입력  (0) 2020.11.19
oracle sql 파일 직접 실행하기  (0) 2020.11.19
[Oracle]Convert 함수  (0) 2020.11.19
ORA-28000: the account is locked  (0) 2020.11.19
ora-12519 TNS:no appropriate handler found  (0) 2020.11.19
Posted by 사슴영혼'-'