1. SET OPERATOR의 종류는?

  1. SET OPERATOR를 중복해서 사용하면 위에서부터 아래로 내려가며 실행됌

  2. UNION

    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     UNION 
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';
    
  3. UNION ALL

    -- UNION ALL 
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     UNION ALL
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';
    
  4. INTERSECT

    -- INTERSECT
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     INTERSECT
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';
    
  5. MINUS(ORACLE) == EXCEPT(MYSQL)

    -- MINUS
    SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'A%' OR ENAME LIKE 'C%' 
     MINUS
     SELECT ENAME
      FROM EMP
     WHERE ENAME LIKE 'C%' OR ENAME LIKE 'F%';
    

2. ORACLE 계층형 질의란?(언제 효율적으로 쓰일 수 있나?)

Untitled

3. SUBQUERY의 종류

  1. WHERE 절에 비교값으로 사용된 서브 쿼리

    1. 단일행 서브쿼리 : 실행결과가 단 하나의 행으로 나오는 서브쿼리

      • 주로 비교 연산자가 사용됌
      -- 자료형이 DATE일 때도 서브쿼리 사용가능
      SELECT *
      FROM EMP
      WHERE HIREDATE < (SELECT HIREDATE 	-- 자료형이 DATE(날짜)일 때도 서브쿼리를 사용할 수 있다.
                        FROM EMP
                        WHERE ENAME = 'SCOTT');
      
    2. 다중행 서브쿼리 : 실행 결과 행이 여러 개로 나오는 서브쿼리

      • 주로 IN, LIKE 같은 메서드가 사용됌
      • 다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 사용 가능함
      -- IN을 기본연산자가 아닌 다중행 연산자로 사용할 수 있다.(효과는 같음)
      SELECT *
      FROM EMP
      WHERE DEPTNO IN (20, 30);
      
      -- 서브쿼리로 넣어서 사용가능
      SELECT *
      FROM EMP
      WHERE SAL IN (SELECT MAX(SAL) 	
                    FROM EMP
                    GROUP BY DEPTNO);
      
    3. 다중열 서브쿼리 : 서브쿼리의 SELECT절에 비교할 데이터를 여러 개 지정하는 방식

      • 다중행과 같이 IN 등이 사용되지만 서브쿼리에서 SELECT되는 컬럼 자체가 여러개
      SELECT *
      FROM EMP
      WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, MAX(SAL)
                              FROM EMP
                              GROUP BY DEPTNO);
      
  2. 인라인 뷰 + WITH 절 : FROM 절에 사용한 서브쿼리

    SELECT E10.EMPNO, E10.ENAME, E10.DEPTNO, D.DNAME, D.LOC
    -- 인라인 뷰는 특정 테이블 전체가 아닌 SELECT문을 통해   
    -- 일부 데이터를 추출해 온후 별칭을 지정하여 사용할 수 있다.
    FROM (SELECT * FROM EMP WHERE DEPTNO = 10) E10, 
         (SELECT * FROM DEPT) D
    WHERE E10.DEPTNO = D.DEPTNO;
    
  3. 스칼라 서브 쿼리 : SELECT 절에 사용한 서브쿼리