3. 서브쿼리 심화
1. 동작하는 방식에 따른 서브쿼리 분류
- 서브쿼리에 메인 쿼리의 컬럼이 포함되는지에 따라 연관 서브쿼리(correlated subquery), 비연관 서브쿼리라고 불린다.
연관 서브쿼리
- 메인쿼리의 컬럼이 서브쿼리에 포함되며, 메인쿼리의 컬럼은 서브쿼리에 특정 조건으로 사용된다.
비연관 서브쿼리
- 메인쿼리의 컬럼이 서브쿼리에 포함되지 않으며, 주로 메인쿼리에 특정한 값을 제공할 때 사용된다.
2. 반환되는 데이터 형태에 따른 서브쿼리 분류
1)단일 행 서브쿼리(단일컬럼)
- 서브쿼리 결과가 한개의 행을 반환하며, 단일 행 비교 연산자(=, <, >, <=, >=)와 같이 사용된다.
2)당중 행 서브쿼리(단일컬럼)
- 서브쿼리 결과가 두개 이상의 행을 반환하며, 다중 행 비교 연산자(IN, ALL, ANY, EXISTS)와 같이 사용된다.
- in : 서브쿼리 결과에 존재하는 값들 중 하나와 일치해야한다. 무조건 일치 해야한다. where절 2개 column in (sub-query의 select절 2개 column)
- exists : 서브쿼리 결과값이 존재하는지 여부를 확인한다. 일치하는지 안 하는지만 확인 하는 것.
- all : 서브쿼리 결과에 존재하는 모든 값들에 대해 조건을 만족해야한다.
- any : 서브쿼리 결과에 존재하는 값들 중 조건을 만족하는 것이 하나 이상 존재해야 한다.
3)다중 컬럼 서브쿼리(멀티컬럼)
- 서브쿼리의 결과가 여러개의 컬럼을 반환하며, 메인쿼리의 조건과 동시에 비교된다.
3. 스칼라 서브쿼리
- 하나의 속성을 가지면서, 하나의 행만을 반환하는 쿼리이다. 그리고 이는 select, where, having절 등에서 사용할 수 있다.
즉, 단일 컬럼이면서 단일 행이면 스칼라 서브쿼리라고 한다.
- 스칼라 서브쿼리 DUAL
from을 사용한 특정 테이블 참조 없이 쿼리를 작성하는 경우도 있다.
dual talbe을 이용하여 ratio등을 구할수도 있다.
4. 뷰
-
뷰 : 다른 테이블에서 파생된 테이블이며 물리적으로 데이터가 저장되는 것이 아니라, 논리적으로만 존재하며 뷰를 사용한 질의 시에는 DBMS에서 뷰 정의에 따라
질의를 재작성하여 수행한다.
-
독립성 : 테이블 구조가 변경되어도 뷰를 사용하고 있는 응용 프로그램은 변경하지 않아도 된다.
-
편리성 : 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해 놓으면, 추후 커리는 간단한 형태로 표현할 수 잇따.
-
보안성 : 사용자의 권한에 따라 열람이 가능한 데이터를 다르게할 수 있다. 권한에 따라 확인 가능한 컬럼을 정의하여 뷰를 생성하면, 기본 테이블 노출 없이 점근 제어를 할 수 있다.
-
특징
1.생성된 뷰는 또 다른 뷰를 생성할 때 사용될 수 있다.
2.뷰의 정의는 변경할 수 없으며, 삭제 후 재생성이 필요하다. 즉, update가 없고 대신 replace로 delete 후 다시 create하는 방법밖에 없다.
3.뷰를 통한 갱신에는 제약이 따른다. 갱신을 위해서는 기본적으로 원천 테이블의 기본키가 포함되어야 한다.
4.원천이 되는 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제된다.
-
문법
create [or replace] view view_name as{
select 컬럼 명1, 컬럼 명2,...
from 테이블 명
where 조건