· 1분 읽기

KH_ORACLE_06_서브쿼리


ORACLE

목록 보기숨기기6/12
  1. KH_ORACLE_01_SQL의 기본
  2. KH_ORACLE_02_SELECT로 특정 데이터 추출하기
  3. KH_ORACLE_03_SQL 주요 함수
  4. KH_ORACLE_04_그룹 쿼리와 집합 연산자
  5. KH_ORACLE_05_조인
  6. KH_ORACLE_06_서브쿼리
  7. KH_ORACLE_07_DDL
  8. KH_ORACLE_08_DML
  9. KH_ORACLE_09_트랜잭션 관리, 데이터읽기일관성과 락(Lock)
  10. KH_ORACLE_10_데이터 무결성을 위한 제약 조건
  11. KH_ORACLE_11_가상 테이블인 뷰
  12. KH_ORACLE_12_시퀀스, 인덱스

서브 쿼리의 기본 개념

 - 서브 쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT 문장이다.

 - 서브 쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라고 한다.

 - 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 한다.

 - 서브 쿼리는 메인 쿼리가 실행되기 이전에 한 번만 실행이 된다.

단일행 서브 쿼리

단일 행 서브 쿼리는 수행 결과가 오직 하나의 로우만을 반환하는 서브 쿼리를 갖는 것을 말한다.

단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =, >, >=, <, <=, <> 를 사용해야 한다.

SELECT ENAME, SAL
FROM EMP
WHERE SAL > ( SELECT AVG(SAL)
 FROM EMP);

다중행 서브 쿼리

다중행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리이다. 다중 행 서브 쿼리는 반드시 다중 행 연산자와 함께 사용해야 한다. 

다중 행 서브 쿼리의 종류에는 IN, ANY, SOME, ALL, EXIST 가 있다.

IN 연산자

IN 연산자는 메인 쿼리의 비교 조건에서 서브 쿼리의 출력 결과와 하나라도 일치하면 메인 쿼리의 WHERE 절이 참이 되는 연산자이다.

SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN ( SELECT DISTINCT DEPTNO
FROM EMP
WHERE SAL>=3000);

ALL 연산자

ALL 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다.

SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL
 FROM EMP
 WHERE DEPTNO =30);

ANY 연산자

ANY 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참이다.

SELECT ENAME, SAL
FROM EMP
WHERE SAL > ANY ( SELECT SAL
 FROM EMP
 WHERE DEPTNO = 30 );

EXISTS 연산자

서브쿼리에 결과 값이 하나 이상 존재하면 조건식이 모두 true, 존재하지 않으면 모두 false 가 되는 연산자이다.

SELECT *
FROM EMP
WHERE EXISTS (SELECT DNAME FROM DEPT WHERE DEPTNO = 10);


SELECT *
FROM EMP
WHERE EXISTS (SELECT DNAME FROM DEPT WHERE DEPTNO = 50);

댓글

댓글을 불러오는 중…