본문으로 바로가기
반응형

 

 

 

 

지난 포스팅에서 SQL 조인문(JOIN)에 대해서 다뤄봤습니다.

 

 

 

 

 

[Database] SQL JOIN | INNER JOIN | LEFT(RIGHT) OUTER JOIN | CROSS JOIN | SELF JOIN | NON EQUI JOIN | SQL 테이블 3개 조인(j

지난 포스팅에서 SQL 집계 함수와 정렬에 대해서 다뤄봤습니다. [Database] SQL GROUP BY | ORDER BY | HAVING | ROLLUP | CUBE | UNION ALL | SQL 집합 연산자 (java로 웹개발하기)(day23) 지난 포스팅에서 SQL..

healthdevelop.tistory.com

 

 

 

이번 시간에는 SQL SUQUERY, RANK 함수에 대해서 다뤄보고자 합니다.

 

 

 

 




 

 

▶ SUBQUERY

 

 

 

 

SUBQUERY란,,

 

 

 

SELECT 문장 안에 포함된 또 다른 SELECT 문장으로,


메인 쿼리가 실행되기 전 한 번만 실행되며 반드시 괄호로 묶어야 합니다.

 

 


서브쿼리와 비교할 항목은 

 

반드시 서브쿼리의 SELECT한 항목의 개수와 자료형을 일치시켜야 합니다.

 

 

 

 

작성법 및 예시는 아래와 같습니다.

 

 

 

 

 

 


 

▶ SUBQUERY 유형

 

 

 

 

SUBQUERY의 유형은 6가지로 분류할 수 있는데요.

 

 

 

 

 

위와 같이 구분할 수 있습니다.

 

 

 

그럼 각 서브쿼리 사용법, 서브쿼리 예시를 알아보도록 하죠.

 

 

 

 

 

 

 

 

 


 

▷ 단일행 서브쿼리

 

 

 

 

 

 

 

 

 


 

▷ 다중 행 서브쿼리

 

 

 

 

 

 

 

 


 

▷ 다중 열 서브쿼리

 

 

 

 

 

 

 


 

다중 행 다중 열 서브쿼리

 

 

 

 

 

 

 

 

 


 

▷ WITH

 

 

 

 

 

 

 


rank 함수도 서브쿼리로 처리가 가능합니다.

 

 

▷ RANK() OVER

 

 

 

 

 

 

 

 

 


 

▷ DENSE_RANK() OVER

 

 

 

 

 

 

 

 

 

 

 

그럼 간단한 예제를 살펴봅시다.

 

 

 

 

 

 

 

 


SQL(SUBQUERY) 예제


 

 

※ 모든 SQL 예제는 테이블을 생성하지 않고 문제만 봐도 풀 수 있습니다!

   모든 테이블은 ID로 구분하고 ID로 조인합니다.

   (EX- EMPLOYEE.DEPARTMENT_ID = DEPARTMENT.DEPARTMENT_ID)

 

 

 

 

난이도 ★

 

 

 

예제 1

 

 

Q :  아래 코드를 참조하여 ROWNUM을 활용해 원하는 SALARY(월급)이 높은 직원 3명을 조회하라.

     

SELECT ROWNUM, EMPLOYEE_ID, SALARY

FROM EMPLOYEES 

WHERE ROWNUM <= 5; 

 

(원하는 결과가  나오지 않음)  

   


 

 

 

 

풀이 :

 

 



SELECT ROWNUM, EMPLOYEE_ID, SALARY
  FROM (SELECT ROWNUM,EMPLOYEE_ID,SALARY FROM EMPLOYEES ORDER BY SALARY DESC)
 WHERE ROWNUM <=3;

 

 

 


 




난이도 ★

 

 

 

예제 2

 

 

Q : 매니저가 존재하는 부서의 사원들을 조회

     (DEPARTMENTS, EMPLOYEES,

      매니저는 MANAGER_ID로 구분하고 DEPARTMENTS와 EMPLOYEES 테이블에 둘 다 포함되어있다.)

   

 

 

 

 


 

 

 

 

풀이 :

 

 



SELECT E.EMPLOYEE_ID,
       E.FIRST_NAME || ' ' || E.LAST_NAME AS "NAME",
       E.DEPARTMENT_ID,
       (SELECT D.DEPARTMENT_NAME
          FROM DEPARTMENTS D
         WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID) AS DEPARTMENT_NAME    
  FROM EMPLOYEES E
 WHERE E.DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
                             FROM DEPARTMENTS
                            WHERE MANAGER_ID IS NOT NULL)
 ORDER BY 1;

 

 

 


 




 

 

이상으로 SUBQUERY에 대해 알아봤습니다.

 

 

다음 포스팅에선 SQL VIEW(뷰)에 대해 다뤄보고자 합니다.

 

 

 

[Database] SQL VIEW(뷰) | 뷰의 장점 (java로 웹개발하기)(day26)

지난 포스팅에서 SQL 서브쿼리에 대해서 다뤄봤습니다. https://healthdevelop.tistory.com/entry/db7 [Database] SQL RANK(), DENSE_RANK() | 서브쿼리(SUBQUERY) | INLINE VIEW | SQL 순위 구하기 (java로 웹개..

healthdevelop.tistory.com

 

반응형