프로그래밍/SQL / / 2022. 10. 5. 09:41

[SQL] 서브쿼리 구분, ANY, ALL, IN, EXISTS

1. 서브 쿼리

 

1) 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.

- 하나의 SQL문으로 풀 수 없는, 조금 더 복잡한 데이터를 추출할 때, 

 

2) 서브 쿼리는 메인 쿼리의 칼럼을 모두 사용할 수 있지만, 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.

 

3) 서브 쿼리를 괄호로 감싸서 사용한다.

 

4) 서브 쿼리는 단일 행(SINGLE ROW)또는 복수 행(MULTIPLE ROW) 비교 연산자와 함께 사용 가능하다.

- 단일 행(SINGLE ROW) 비교 연산자는 반드시 1건 이하여야 한다.

- 복수 행(MULTIPLE ROW) 비교 연산자는 서브 쿼리의 결과 건수와 상관없다.

 

5) 서브 쿼리에서는 ORDER BY를 사용하지 못한다.

- ORDER BY 절은 메인 쿼리의 마지막 문제이 위치하여야 한다.

 

6) 서브 쿼리가 사용 가능한 위치

- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT문의 VALUES, UPDATE문의 SET



2. 서브쿼리 구분

 

1) 중첩 서브쿼리

- WHERE절

 

2) 인라인 뷰

- FROM절

 

3) 스칼라 서브쿼리

- SELECT절



3. 서브 쿼리 구분 2

 

1) 단일행 서브 쿼리

 

- 하나의 값을 리턴하는 서브 쿼리이다.

- 일반적인 연산자 모두 사용 가능하다. (=, >, <, AND, OR, NOT)

 

2) 다중행 서브 쿼리

 

- 리턴 값이 여러 개의 레코드이다.

- 결과를 처리하는 전용 연산자가 있다. (IN, ALL, ANY, EXISTS)



4. 연산자 

 

1) ANY 연산자

 

- 값을 서브 쿼리에 의해서 반환된 값과 비교한다.

- 서브 쿼리의 값이 어떠한 값이라도 만족을 하면 조건이 성립한다.

- 여러 개 레코드의 OR 효과

- 메인 쿼리에서 가장 작은 값보다 큰 것만 추출한다.

 

2) ALL 연산자

 

- 서브 쿼리에 의해 반환된 값과 비교한다.

- 서브 쿼리의 모든 값이 만족을 해야만 조건이 성립된다.

- 여러 개의 레코드의 AND효과

- 메인 쿼리에서 가장 큰 값보다 큰 것만 추출한다.

 

3) IN / EXISTS 연산자

 

- 서브쿼리 내에 집합이 존재하는지에 대한 존재 여부만 판단한다.

- 결과값 중에 있는 것 중에서의 존재 여부이다.

- IN은 전체 레코드를 스캔한다. EXISTS는 존재 여부만 확인하고 스캔하지 않는다.

- 존재하면 TRUE, 존재하지 않으면 FALSE 

- 연산 시 부하가 줄어든다.

 

LIST
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유