본문 바로가기

database

oracle - SUB QUERY, EXISTS 등

19.12.04. SUB QUERY, EXISTS 등

데이터베이스 구현

2019-12-05 20:52:42


▶ 서브 쿼리의 분류 (사용 위치)

1. SELECT  에서 사용

: 스칼라 서브쿼리(Scalar subquery). 하나의 행, 하나의 컬럼만 리턴하는 서브쿼리.

2. FROM 에서 사용

: Ilin view

3. WHERE 에서 사용

: 서브쿼리.

 

▶ 서브쿼리의 연산자 ( 멀티로우 연산자)

1. IN

: 서브쿼리 결과 중 같은 값이 있을 때.

2. ANY

: 서브쿼리 결과중 만족하는 것이 하나라도 있을 때.

3. ALL

: 서브쿼리 결과를 모두 만족시킬 때.

 

▶서브쿼리에서 NULL, NOT IN

: NOT IN 연산자 사용 시 NULL 이 데이터에 존재하지 않아야 정상 동작한다.

 

▶ Pairwise ( multi column subquery)

: 페어와이즈는 여러 컬럼의 값을 동시에 만족해야 하는 경우 사용.

ex) 매니저 번호가 7698 이면서 부서 번호가 30,  매니저 번호가 7839이면서 부서 번호가 10 인 직원 조회.

 

▶ 비상 호연관 서브 쿼리

: 메인 쿼리에서 사용하는 테이블, 서브 쿼리 조회 순서를 성능적으로 유리한 쪽으로 판단하여 순서 결정.

메인 쿼리와 서브 쿼리 중 무엇을 먼저 읽을지 오라클에서 결정한다.

상호 연관 서브 쿼리에서는 메인 쿼리를 먼저 읽은 후 서브 쿼리를 읽지만, 비상호연관 서브 쿼리는

서브 쿼리 단독적으로 실행할 수 있기 때문에 유리한 쪽으로 먼저 읽는다.

 

비상호 연관에서 서브 쿼리 쪽 테이블을 먼저 읽을 때 서브 쿼리가 제공자 역할을 했다고 표현함.

서브 쿼리 쪽 테이블을 나중에 읽을 때는 서브 쿼리가 확인자 역할을 했다고 표현함.

 

▶ EXISTS 연산자

-조건을 만족하는 서브 쿼리의 결괏값이 존재하는지 체크.

-조건을 만족하는 데이터를 찾으면 서브 쿼리에서 값을 찾지 않는다.

-여러 개가 존재해도 한건만 찾으면 끝냄.

-존재 여부를 확인하는 것뿐임.

-연산할 컬럼을 왼쪽에 적지 않는다.

-상호 연관 컬럼형태로 작성된 쿼리.

-EXISTS 뒤에 오는 것은 ture/false 로 나뉠 수 있다.