Oracle - 서브쿼리

갓김치·2020년 8월 25일
0

Oracle

목록 보기
25/33
post-thumbnail

참고

2020-08-25-01)서브쿼리.sql
2020-08-26-01)서브쿼리예.sql

서브쿼리

  • ★ 서브쿼리에서 중요한 점: 메인쿼리와 서브쿼리에 들어갈 내용 구별하는 것!
  • 서브쿼리는 지문은 짧고, 코드는 길다. 분할해서 검산하고 실행하는게 중요
  • ()안에 기술

서브쿼리 분류

1. 연관성 여부

연관성 없는 서브쿼리

  • 메인쿼리와 서브쿼리에 사용된 테이블이 조인으로 연결되지 않은 서브쿼리

연관성 있는 서브쿼리

  • 메인쿼리랑 서브쿼리가 조인으로 연결될때

2. 형태별 분류

일반 서브쿼리 (SELECT)

인라인 서브쿼리 (FROM)

  • 제일먼저실행됨, 독립적실행이가능해야함
    • 첫번째로 실행되기때문에 다른 절의 도움을 받을 수 없음)
    • SELECT,WHERE은 독립적이지 않아도됨, FROM절과 연계해서 실행될 수 있기때문

중첩 숴브쿼리 (WHERE)

  • 보통 이걸 서브쿼리라고 함

3. 반환 값의 갯수에 따라

단일행/단일열

단일행/다중열

다중행/단일열

다중행/다중열

예시

1. 회원테이블에서 평균마일리지보다 많은 마일리지를 보유한 회원의 회원번호, 회원명, 직업, 마일리지를 조회하시오

  • 1) 메인쿼리: 조회할 내용 - 회원의 회원번호, 회원명, 직업, 마일리지
  • 2) 서브쿼리: 비교할 대상 - 평균마일리지

연관성 없는 서브쿼리 사용시

  • 서브쿼리 실행결과:
  • 전체 실행결과: 회원이 10만명이면 10만번 돌아감

인라인 서브쿼리 사용시

결과 같음

  • 전체 실행결과:

2. 부서테이블에서 상위부서코드가 NULL인 부서에 소속된 사원수를 조회하시오

연관성 없는 서브쿼리: 거의 사용 안됨

  • (메인) 사원테이블에서 사원수를 조회
  • '=' 쓸 경우
  • (서브) 상위부서코드가 NULL인 부서
  • (결합)
  • (결과)

3. 각 부서의 평균급여를 계산하고 각 부서에서 자기 부서의 평균급여보다 많은 급여를 지급받는 직원이 있는 부서코드와 부서명을 출력

연관성 있는 서브쿼리

  • 메인쿼리와 서브쿼리에 사용된 테이블이 조인으로 연결된 서브쿼리
  • (메인) 부서코드와 부서명을 출력
  • (서브) 자기 부서의 평균급여보다 많은 급여를 지급받는 직원이 있는 부서의 부서코드
  • (Subquery of Subquery) 자기 부서의 평균 급여
  • (결합)
  • (결과)

4. 장바구니 테이블에서 회원별 최고구매수량을 가진 자료의 회원번호, 장바구니번호, 상품번호, 구매수량을 조회하시오

연관성 있는 서브쿼리

  • (메인) 회원번호, 장바구니번호, 상품번호, 구매수량을 조회
  • (서브) 회원별 최고 구매수량
  • (결합)
  • (결과)
    • 다른 품목을 같이 많이 산 경우 중복 출력되서 총 30행

5. 사원테이블의 사원급여를 아래 조건대로 변경하시오

  • 조건
      1. 사원이 소속된 부서의 상위부서가 90번인 부서
      1. 상위부서 90에 속한 부서의 각 부서의 평균급여를 계산
      1. 상위부서 90에 속한 부서에 속한 사원의 급여를 자신의 부서 평균 급여로 변경
  • (상위부서가 90번인 부서에 속한 사원)
  • (UPDATE문에 필요: 상위부서가 90번인 부서에 속한 사원의 평균급여)
  • (UPDATE로 결합)
    • UPDATE의 WHERE절 매우 중요! 없으면 전체다 업데이트됨
  • (검증)

6. 모든 거래처별 2005년 매입정보를 조회하시오.

인라인 서브쿼리: FROM절

  • 출력은 거래처코드, 거래처명, 매입금액
  • (메인쿼리)
  • (서브쿼리)
  • (결합)
  • (결과)
    • OUTER JOIN 잘 작동됨 (WHERE A.BUYER_ID = B.BID(+))

문제

1. 모든 2005년도 거래처별 매출금액을 조회하시오

  • 출력은 거래처코드, 거래처명, 매출액
  • (메인쿼리)
  • (서브쿼리)
  • (결합)
  • (결과)
profile
갈 길이 멀다

0개의 댓글