1cm

자바 프로그래밍_Day_33_서브쿼리(SUBQUERY)(2) 본문

국비지원_Java/Java Programming_1

자바 프로그래밍_Day_33_서브쿼리(SUBQUERY)(2)

dev_1cm 2021. 10. 10. 12:56
반응형

 

 

2021. 10. 05

 

 

     > 단일행 서브쿼리 실습 코드

       -> 1차 조건(최저 급여)과 동일한 값(최저 급여를 받는 직원 (=))들의 세부 데이터 조회

 

       -> 1차 조건(노옹철)에 해당하는 값(노옹철과 동일한 급여를 받는 사원)보다 큰 값(노옹철 < 구하고자 하는 값)을 조회

 

 

       -> 서브 쿼리는 WHERE 절 뿐만 아니라, SELECT / FROM / HAVING 절에서도 사용이 가능하다. 

       -> WHERE 절에서 사용되는 서브쿼리에서는 ORDER BY 사용 불가능

 

 

       -> 전지연 사원이 속해있는 부서명을 조회하고, 전지연 사원을 제외한 부서원까지 조회하기

 

       -> ANSI 구문

          -> 1. 모든 테이블 JOIN하여 하나의 행으로 출력 -> 2. 원하는 데이터 SELECT문 작성 -> 3. 원하는 데이터 출력을 위한 서브 쿼리문 작성

 

       -> 오라클 구문

          -> JOIN문을 오라클 구문으로 작성 후 WHERE 절 안에 서브쿼리문 작성

 

 

     > 다중행 서브 쿼리 (Multiple-Row Subquery)

       -> 서브쿼리의 조회 결과 값의 행이 여러 개인 서브쿼리

       -> 다중 행 서브쿼리 앞에는 일반 비교 연산자 사용이 불가능 하다.

          -> 사용 가능 연산자 : IN / NOT IN, >ANY / <ANY, >ALL / <ALL, EXIST / NOT EXIST 등

       -> FROM / JOIN 절 뒤에 쓰는 서브쿼리 : 인라인 뷰 -> 테이블 위치에 서브쿼리를 넣어서 -> 서브쿼리의 결과를 테이블로 쓰는 것

 

       -> NULL 제외 : IS NOT NULL

       -> DISTINCT : 중복되는 값들 제거

 

       -> IN (사수) / NOT IN (사원) 연산자를 사용한 서브쿼리문 작성

 

 

       -> IN / NOT IN 연산자를 사용한 쿼리문들을 UNION 방식으로 연결

 

       -> SELECT 절에 서브쿼리를 사용하여 사수, 사원 구분

       -> CASE 절 -> WHEN 절 -> WHEN절 안에 사수 -> ELSE로 사원 -> IN 절 안에 서브쿼리 작성

       -> 출력 순서는 반대로 서브쿼리 -> WHEN -> CASE

 

 

       -> 기존에 작성한 코드를 좀 더 효율적으로, 깔끔하고 성능이 좋게 코드를 정리하는 작업 : 리팩토링 작업

 

       -> ANY 비교 연산자를 활용하여 서브쿼리문 작성

 

 

       -> ALL 비교 연산자를 활용하여 서브쿼리문 작성

 

 

 

 

     > 다중열 서브 쿼리 (Multiple-Column Subquery)

       -> 쌍비교라고도 부르며, 서브쿼리의 조회 결과 컬럼의 개수가 여러 개인 서브쿼리이다.

       ->  원하는 사원의 부서 코드 AND 직급 코드 조회

       -> 그 사원과 동일한 부서 코드, 직급 코드인 사원 조회

 

 

       -> 각각 단일행 서브 쿼리로 작성

 

       -> 다중열 서브 쿼리를 사용해서 하나의 쿼리문으로 작성 (DEPT_CODE, JOB_CODE)를 쌍으로 묶어서 비교한다.

       -> 다중열 서브쿼리 일때는 IN절에 넣어도 하나의 값으로만 비교가 된다.

 

 

 

 

     > 다중행, 다중열 서브 쿼리

       -> 서브쿼리의 조회 결과 컬럼의 개수와 행의 개수가 여러 개인 서브쿼리

 

       -> 위의 쌍으로 묶은 것보다 더 간결하게 코드 정리 / IN 연산자를 쓰면 쌍으로 묶인 값 여러 개가 IN연산자 안에 값 목록으로 등록이 되며, 그 값들을 비교하며 만족하는 값들을 조회

 

 

       -> 다중행 다중열 서브쿼리를 활용하여 원하는 데이터 조회

 

 

       -> NULL값 나오지 않도록 NVL함수 사용하여 '부서없음'으로 출력할 수 있게 한다.

 

 

 

     > 상(호연)관 서브쿼리 (Correlated Subquery)

       -> 서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때, 메인 쿼리 테이블의 값이 변경되면 서브쿼리의 결과 값도 바뀌는 서브쿼리

 

 

     > 스칼라 서브쿼리 (Scala Subquery)

       -> 상관쿼리이면서 결과 값이 한 개인 서브쿼리

       -> SELECT / WHERE / ORDER BY 절에서 사용이 가능하다.

 

 

     > 인라인 뷰 (Inline-View)

       -> FROM절에 서브쿼리를 사용(제시)하고, 서브 쿼리를 수정한 결과를 테이블 대신에 사용한다.

 

 

      -> ROWNUM - 조회되는 행의 순번

 

 

       -> 평균급여 역순 결과(서브쿼리)를 테이블 대신에 사용하여 ROWNUM을 붙여준다.

 

 

     > WITH

       -> 서브쿼리에 이름을 붙여주고 인라인 뷰로 사용 시 서브쿼리의 이름으로 FROM절에 기술 가능하다

       -> 같은 서브쿼리가 여러 번 사용될 경우 중복 작성을 피할 수 있고, 실행속도도 빨라진다는 장점이 있다.

 

 

       -> 중복되는 서브쿼리에 이름을 붙여 서브쿼리를 사용하는 것

반응형
Comments