본문 바로가기
DataBase & DBMS

23.02.14 Oracle DB Sub Query 개념과 ALIAS 사용

by SoulMania 2023. 2. 15.

서브 쿼리란?

 서브 쿼리는 하나의 SELECT 문장에서  문장 안에 포함된  하나의 SELECT 문장입니다. 서브 쿼리를 순차적으로 사용하여 복잡한 쿼리문을 쉽게 구현할  있습니다

 

기본 사용법

SELECT column2
  FROM t_table
 WHERE column1 = (SELECT문)

서브 쿼리는 괄호 안에 SELECT문을 입력하여 사용합니다. 또한, 서브 쿼리에는 group by having 사용할  없습니다.

 

단일  서브 쿼리

 단일  서브 쿼리는 오직 하나의 행만을 반환하는 서브 쿼리를 갖는 것을 말합니다.

 

예시

SELECT address
  FROM t_table
 WHERE phone = (SELECT phone
                  FROM t_member
                 WHERE name = "홍길동");

단일  서브쿼리는 예시와 같이 WHERE 절에서 사용할  있습니다.

 

 

다중  서브 쿼리

다중  서브 쿼리는 여러 행을 반환하는 서브 쿼리를 말합니다. WHERE 절에서 사용하기 위해서는 아래와 같은 연산자를 통해 사용할  있습니다.

 

서브 쿼리 연산자 설명
IN 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다.
ANY, SOME 메인 쿼리의 비교 조건이 서브 쿼리의 결과와 하나 이상 일치하면 참입니다.
ALL 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.
EXIST 메인 쿼리의 비교 조건이 서브 쿼리의 결과  만족하는 값이 하나라도 존재하면 참입니다.
 

IN

SELECT column1, column2
  FROM t_table
 WHERE column1 IN (SELECT column1 FROM t_table WHERE column2 > 500);

서브 쿼리로 조회되는 column1 값들 중에서 column1 값이 하나라도 존재하면 참이 되어 조회됩니다. ANY와 SOME 사용한 결과도 같습니다.

 

ALL

SELECT column_name
FROM table_name
WHERE column_name ALL (SELECT column_name FROM table_name WHERE condition);

서브 쿼리로 조회되는 column_name 값들과 column_name 값이 모두 존재해야 참이되어 조회됩니다.

 

EXIST

SELECT column_name
 FROM table_name
WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);

테이블에서 서브 쿼리의 값과 같은 행이 존재한다면 조회합니다.

 

인라인 

 FROM절에 사용하는 서브 쿼리를 인라인 뷰라고 합니다. 서브 쿼리를 FROM 절에 사용해 하나의 테이블처럼 사용할  있습니다.

※특히나 이 개념이 게시판 페이징 처리 시에 사용 되었다.

서브쿼리를 From절에 사용하여 마치 테이블처럼 사용하는 것..

예시

SELECT A.address
  FROM (SELECT phone
                  FROM t_member
                 WHERE name = "홍길동") A;

FROM절에 서브 쿼리를 사용한 모습입니다. 별칭을 붙여주어 간편하게 서브 쿼리에서 조회된 address 컬럼에 접근할  있습니다.

 

 

게시판 검색기능 및 페이징 처리 시에 사용된 서브쿼리(인라인뷰 이용)

 

SELECT notice_no, writer_id, writer_name, title, regdate, moddate, read_cnt, isshow 
FROM 
(SELECT A.*, ROWNUM RNUM 
FROM(select * from  notice where writer_name like '%관리%' order by notice_no desc) A
WHERE ROWNUM <= (8+5) ) 
WHERE RNUM > 5 ;

 

참고url

https://lifejusik1004.tistory.com/entry/SQL-%EC%84%9C%EB%B8%8C-%EC%BF%BC%EB%A6%AC%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EB%B3%84%EC%B9%ADALIAS-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0