서브 쿼리란?
서브 쿼리는 하나의 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
'DataBase & DBMS' 카테고리의 다른 글
22.11.22 Oracle DB / PL-SQL 예제 쿼리 작성 및 각종 함수 응용 (0) | 2023.02.15 |
---|---|
22.11.21 Oracle DB / PL-SQL 기본 쿼리 및 함수, DML 연습_3 (0) | 2023.02.15 |
22.11.18 Oracle DB / PL-SQL 기본 쿼리 및 함수, DML 연습_2 (0) | 2023.02.15 |
22.11.17 Oracle DB / PL-SQL 기본 쿼리 및 함수, DML 연습 (0) | 2023.02.15 |
22.11.16 Oracle DB 설치 및 기본 세팅 (0) | 2023.02.15 |