서브쿼리
- 서브쿼리(Subquery)란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다.
- 조인은 조인에 참여하는 모든 테이블이 대등한 관계에 있기 때문에 조인에 참여하는 모든 테이블의 커럼을 어느 위치에서라도 자유롭게 사용할 수 있다. 그러나 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
서브 쿼리 사용시 주의점
- 서브쿼리를 괄호로 감싸서 사용한다.
- 서브 쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용한다.
- 단일 행 비교 연산자는 서브 쿼리의 결과가 반드시 1건 이하이어야 하고 복수 행 비교 연산자는 서브 쿼리의 결과 건수와 상관 없다.
- 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY절은 SELECT절에서 오직 한개만 올 수 있기 때문에 ORDER BY절은 메인 쿼리의 마지막 문장에 위치해야 한다. (개념이 이렇게 나와 있는데 실제로는 사용하는 것 같다...?)
서브 쿼리가 사용 가능한 위치
- SELECT절 - FROM절 - WHERE절- HAVING절- ORDER BY 절
- INSERT문의 VALUES절- UPDATE문의 SET절
동작 방식에 따른 서브 쿼리 분류
비 연관 서브 쿼리
- 서브쿼리가 메인 쿼리의 컬럼을 가지고 있지 않은 형태의 서브 쿼리임
- 메인 쿼리에 값을 제공하기 위한 목적으로 주로 사용
연관 서브 쿼리
- 서브 쿼리가 메인 쿼리의 값을 가지고 있는 형태의 서브쿼리임
- 일반적으로 메인 쿼리가 먼저 수행되어 얽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용
반환 형태에 따른 서브 쿼리 분류
- 단일 행 서브 쿼리
- 서브 쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미한다.
- 항상 비교 연산자와 함께 사용된다.
- =,>,<=,>,>=,<>
- 다중 행 서브 쿼리
- 서브 쿼리의 실행결과가 여러건인 서브쿼리를 의미한다.
- 다중 행 서브 쿼리는 다중 행 비교 연산자와 함께 사용된다.
- IN, ALL, ANY, SOME, EXISTS
- 다중 컬럼 서브 쿼리
- 서브 쿼리의 실행 결과로 여러 컬럼을 반환한다.
- 메인 쿼리의 조건 절에 여러 컬럼을 동시에 비교할 수 있다.
- 서브 쿼리와 메인 쿼리의 컬럼 수와 컬럼 순서가 동일해야 한다.
실무에서 매우 많이 쓰임
스칼라 서브 쿼리는 SELECT절에 위치하는 서브쿼리
인라인 뷰 서브 쿼리는 FROM 절에 위치하는 서브 쿼리
각각의 사원이 속해있는 부서코드별 부서며으로 EMP xㅔ이블의 DEPT_NM 컬럼을 업데이트 해라
컬럼에 값을 넣는 쿼리 (복사)
뷰 사용의 장점
- 독립성: 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 된다.
- 편리성: 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 또한 해당. 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.
- 보완성: 직원의 급여 정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성 할 때 해당 컬럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
SQL 윈도우 함수(WINDOW FUNCTION) - Oracle (1) | 2023.06.10 |
---|---|
SQL 그룹함수 - Oracle (0) | 2023.06.10 |
SQL 계층 형 질의와 SELF조인 - Oracle (0) | 2023.06.10 |
SQL 집합연산자(SET OPERATOR) - Oracle (0) | 2023.06.10 |
SQL 조인(JOIN)- Oracle (0) | 2023.06.10 |