본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 집합연산자 | ALL

by dazwischen 2021. 9. 19. 17:40
반응형

본 포스트에서는 집합연산자 중 하나인 ALL에 대해서 살펴볼 것이다. 메인 쿼리 내의 WHERE 조건절의 데이터를 ALL 절내의 데이터와 일일이 기뵤하여 모두 TRUE 연산일 경우 TRUE를 리턴한다.

ALL

SQL 문법 집합 연산자 ALL

01 ALL : 모두 만족해야 한다

ALL은 ANY와 사용법이 동일하다. 차이점은 ANY의 경우 ANY절 내의 데이터 중 한 가지만이라도 WHERE절의 연산결과가 TRUE일 경우 전체 TRUE를 리턴했던 것에 반해 ALL의 경우는 ALL절 내의 모든 데이터가 WHERE절 내에서의 연산이 TRUE여야 전체 TRUE를 리턴한다는 것이다. 일단 쿼리를 어떻게 작성하는지 살펴보자.

SELECT	COL1, COL2
FROM	TABLE
WHERE	COL2 * ALL ( VAL1, VAL2, VAL3)
;

COL2가 ALL 절내의 모든 값 VAL1, VAL2, VAL3와 *연산 해서 모두 TRUE일 경우 그 결과에 해당하는 결과값이 추출된다. *는 [ <, > <=, =>, = ] 와 같은 비교연산자가 들어갈 수 있다. 여기까지는 이론적인 설명이였고 예를 통해서 명확히 이해해보자.

EXAMPLE

수입 무관세 기준은 A국가 10만원 B국가 12만원 C국가 14만원이다. SHOP의 제품들 중 A, B, C 모든 국가에 무관세 제품인 것을 알려주세요.

SELECT	NAME, PRICE
FROM	SHOP
WHERE	PRICE < ALL (100000, 120000, 140000)
;

위 예제는 세 값의 최솟값을 구해서 단 순 비교를 해도 된다. 따라서 위의 기능을 구현하기 위해 꼭 ALL 연산자를 사용할 필요는 업다. 다만 일단은 ALL이라는 기능을 SQL은 갖고 있다는 것을 알필요는 있다.

02 ALL : 서브쿼리를 이용할 때 유용하다

01 단락의 EXAMPLE 처럼 ALL 절 내에 모든 값을 열거해서 이용할 수도 있지만 때에 따라 변하는 기준 값들에 대응하기 위해선 서브쿼리를 작성하는 것이 효율적이다.

SELECT	COL1, COL2
FROM	TABLE
WHERE	COL2 > ALL (SELECT COL_B FROM DATA WHERE COL_A='VAL1' AND COL_B='VAL2')
;

위의 쿼리는 'DATA 테이블 내의 COL_A 컬럼에서 값이 VAL1과 VAL2일 때의 COL_B값보다 큰 값을 갖는 COL2 컬럼에 해당하는 COL1과 COL2를 TABLE 테이블에서 보여주세요.' 이다. 말로 좀 더 명쾌하게 설명할 수 있었을 것도 같은데 어렵다. 예제를 살펴보자.

EXAMPLE

2반의 수학 남자 1등 철수와 수학 여자 1등 영희보다 높은 점수를 갖는 1반 학생들의 이름과 수학성적을 알려주세요.

SELECT	B.NAME, B.MATHE
FROM	CLASS02 B
WHERE	B.MATHE > ALL ( SELECT A.MATHE FROM CLASS01 A WHERE A.NAME='철수' OR A.NAME='영희' )
;

이와 같이 쿼리를 입력하면 서브쿼리에서 철수와 영희의 수학 점수를 불러오고 2반 학생들의 모든 성적을 철수와 영희의 성적과 비교 후 이 둘 값보다 모두 큰 2반 학생들의 이름과 수학 성적을 추려낼 수 있다.

SUMMARY : ALL

  • WHERE 조건절에서 ALL 연산자와 연산시 ALL 절 내의 모든 값과 연산을 해서 모두 만족해야 TRUE를 리턴한다.
  • ALL 절은 연산들의 AND 결합을 단순화 한 것과 같다.
반응형

댓글