ALL, ANY, SOME
하위 쿼리 (서브 쿼리)의 결괏값이 2개 이상일 경우 사용
서브 쿼리란 SELECT 안에 또 다른 SELECT가 들어간 형태를 의미한다.
SELECT 컬럼명 FROM [테이블A]
WHERE 컬럼명 조건연산자 (SELECT 컬럼명 FROM [테이블B] WHERE 조건)
예제
테이블 A에서 특정 값을 출력하려고 하는데, 조건은 테이블B에서 이름이 꽁쥐인 값보다 큰 값이다.
A | B | |||
번호 | 값 | 이름 | 값 | |
1 | 40 | 윤선생 | 40 | |
2 | 20 | 꽁쥐 | 10 | |
3 | 40 | 꽁쥐 | 30 | |
4 | 60 |
SELECT 번호, 값 FROM A
WHERE 값 >= (SELECT 값 FROM B WHERE 이름 = '꽁쥐')
위의 쿼리는 테이블B에서 꽁쥐의 데이터가 2개 존재하기 때문에 오류가 발생한다.
테이블A에서 값을 출력하려는데, 테이블 B에서의 결과가 2개(10,30)가 나와버려 오류가 발생하게 된 것이다.
메시지 512, 수준 16, 상태 1, 줄 1
하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
이럴 때 ANY, SOME, ALL를 사용하여 해결할 수 있다.
ANY, SOME은 하위 쿼리에서 나온 결과값에 하나 이상 충족하는 값이 기준이 되고, ALL은 하위 쿼리에서 나온 결과값을 모두 충족하는 값이 기준이 된다.
ANY, SOME (OR)
ANY, SOME은 하위쿼리에서 나온 결괏값에 하나 이상 충족하는 값이 검색
SELECT 번호, 값 FROM A
WHERE 값 >= ANY (SELECT 값 FROM B WHERE 이름 = '꽁쥐')
결과 | |
번호 | 값 |
1 | 40 |
2 | 20 |
3 | 40 |
4 | 60 |
꽁쥐의 값이 10, 30 이기 때문에 테이블 A의 값 중 10 혹은 30보다 큰 데이터를 모두 출력한다.
ALL (AND)
ALL은 하위 쿼리에서 나온 결괏값을 모두 충족하는 값이 검색
SELECT 번호, 값 FROM A
WHERE 값 >= ALL (SELECT 값 FROM B WHERE 이름 = '꽁쥐')
결과 | |
번호 | 값 |
1 | 40 |
3 | 40 |
4 | 60 |
꽁쥐의 값이 10, 30 이기 때문에 테이블 A의 값 중 10과 30보다 큰 데이터 즉, 30보다 큰 데이터를 출력한다.
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리 (2) | 2021.06.10 |
---|---|
[MSSQL] RAISERROR 프로시저 오류 처리 (0) | 2021.02.25 |
[MSSQL] GROUP BY COUNT (NULL 포함 집계) (0) | 2021.02.24 |
[MSSQL] XML 문자 파싱 오류 (XML 구문 분석: 잘못된 xml 문자입니다.) (0) | 2021.01.11 |
[MSSQL] 다중 칼럼 PIVOT 처리 (복수개의 열 행렬 변환) (0) | 2020.12.08 |