서브쿼리

오윤혜·2021년 2월 4일
0
post-thumbnail

-- 서브 쿼리 예제 쿼리 1개씩

단일행 서브쿼리

-- 단일행 서브쿼리 : 수행결과가 오직 하나의 행만을 반환하는것
  --서브쿼리를 수행한 결과가 1건만 나오고, 이 결과를 메인 쿼리로 전달해서 메인쿼리를 수행하게된다.
  --메인쿼리의 WHERE절에서는 단일행 비교 연산자를 사용해야 한다.
  SELECT DNAME
  FROM DEPT
  WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'Shelli');

결과출력

다중행 서브쿼리

-- 다중행 서브쿼리 : 서브쿼리가 2건 이상 반환 (IN 연산자는 하나의 컬럼이 여러개의 '='조건을 가지는 경우)
SELECT ENAME,SAL,DEPTNO
FROM EMP
WHERE SAL IN (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO);

결과출력

다중컬럼 서브쿼리

-- 다중컬럼 서브쿼리 : 서브쿼리의 결과가 여러 컬럼인 경우 다중컬럼 서브쿼리라고 한다.
  --메인쿼리 WHERE절과 서브쿼리에서 반환하는 컬럼의 수가 반드시 같아야한다.
  SELECT DEPTNO,ENAME,SAL
  FROM EMP
  WHERE (DEPTNO,SAL) IN (SELECT DEPTNO,MIN(SAL) FROM EMP GROUP BY DEPTNO )
  ORDER BY DEPTNO;

결과출력

인라인뷰

-- 인라인뷰 : FROM절에 있는 서브쿼리
SELECT A.DEPTNO,A.SAL
FROM EMP A,(SELECT DEPTNO, MAX(SAL) AS MAX
            FROM EMP
            GROUP BY DEPTNO) B
WHERE A.DEPTNO = B.DEPTNO
AND A.SAL = B.MAX;

결과출력

스칼라 서브쿼리

-- 스칼라 서브쿼리 : SELECT문에 있는 서브쿼리
SELECT A.ENAME
      ,(SELECT B.DNAME
        FROM DEPT B
        WHERE B.DEPTNO = A.DEPTNO)AS DNAME
      ,A.JOB
FROM EMP A
WHERE A.JOB = 'MANAGER';

결과출력

UNION

-- 집합쿼리(UNION, UNION ALL, INTERSECT, MINUS)
  --UNION : 두개의 SELECT 결과를 합칠수 있다. 합친결과에서 중복되는 행은 하나만 표시
  --단 컬럼의 개수가 같아야하고 각 컬럼의 데이터 타입이 같아야한다. 중복은 허용하지 않는다.
  SELECT DEPTNO 
  FROM EMP
  UNION
  SELECT DEPTNO
  FROM DEPT ;

결과출력

UNION ALL

  --UNION ALL : UNION에서 중복이 제거 되지 않은것
  SELECT DEPTNO 
  FROM EMP
  UNION ALL
  SELECT DEPTNO
  FROM DEPT ;

결과출력

INTERSECT

  --INTERSECT : 교집합, 양쪽 모두에서 포함된 행을 검색
  SELECT DEPTNO 
  FROM EMP
  INTERSECT
  SELECT DEPTNO
  FROM DEPT ;

결과출력

MINUS

  --MINUS : 차집합, 첫번째 검색 결과에서 두번째 검색 결과를 제외한 나머지를 검색
  SELECT DEPTNO 
  FROM EMP
  MINUS
  SELECT DEPTNO
  FROM DEPT ;
  -------------------------------------------------------------------
  SELECT DEPTNO 
  FROM DEPT
  MINUS
  SELECT DEPTNO
  FROM EMP ;

결과출력

profile
안녕하세요

0개의 댓글