해당 글은 코드잇에서 실습한 내용을 토대로 정리한 글입니다 :)
오늘은 서브쿼리에 대해 배웠던 내용들 중에 ANY, SOME, ALL에 대해 잠깐 정리해보고자 합니다.
위 사진처럼 IN을 이용해 name의 조건절을 사용했습니다. 이렇게 IN 말고도 유용하게 사용할 수 있는 다른 키워드들이 있는데요, 바로 ANY, SOME과 ALL입니다!
1. ANY
위 그림을 보면 silicon_valley 테이블에 company(회사명), year(입사연도), race(인종), gender(성별), job_category(직무), count(인원 수) 컬럼이 있습니다.
여기서 job_category 컬럼의 Managers 값을 나타낸 count 컬럼을 살펴보겠습니다.
각 Managers 직무의 인원 수가 잘 보입니다. 이제 이 SELECT 문을 서브쿼리로 사용해보겠습니다.
아래 그림의 노란색 박스 부분이 서브쿼리로 사용한 곳입니다.
그런데 WHERE 절을 자세히 살펴보면 서브쿼리 앞에 ANY라는 키워드가 붙어있습니다.
이 ANY는 무슨 뜻일까요?
이 조건은 count 컬럼 값이, 서브쿼리가 리턴한 결과
에 있는 값(1,1,30,0... ) 중 단 하나의(ANY) 값보다 크다면 TRUE를 리턴합니다.
즉, 1,1,30,0...의 값 중에서도 최솟값인 0보다 큰 값이라면 조건을 만족하게 된다는 뜻입니다.
이 서브쿼리가 사용된 전체 SQL 문의 실행 결과를 다시 보면, count가 0보다 큰 값들이, 그 중에서도 Managers 직무를 제외하고(AND job_category != 'Managers') 조회되었습니다.
ANY는 우리말로 '-중 하나라도'라는 뜻입니다. ANY가 WHERE 절에서 사용될 때는, 서브쿼의 결과에 있는 각 row의 값들 중 하나라도 조건을 만족하는 경우가 있으면 TRUE를 리턴한다는 뜻입니다. ANY와 같은 기능을 하는 SOME도 있습니다.
ANY 때와 같은 결과를 출력되는 걸 알 수 있습니다. SOME도 서브쿼리의 결과에 있는 각 row의 값들 중 하나라도 조건을 만족하면 TRUE를 리턴합니다. ANY와 SOME은 같은 기능을 하니 원하는 것을 골라서 사용하면 될 것 같습니다.
2. ALL
이번에는 ALL의 의미에 대해 알아보겠습니다. 방금 전에 봤던 SQL 문에서 SOME 부분말 ALL로 바꾸고 실행해보겠습니다.
결과를 보니 다른 결과가 출력되는 걸 볼 수 있습니다. ALL은 '모든~'이라는 뜻을 가지고 있습니다. 그래서 ALL은 모든 경우에 대해서 해당 조건이 성립해야 TRUE를 리턴합니다.
ALL이 쓰였다면 count 컬럼값이 모든 값보다 커야 TRUE가 된다는 뜻입니다. 즉, 여기서 최댓값이 10733보다 커야 TRUE가 된다는 것입니다.
확인해보니 Managers 테이블의 최댓값은 10733, Managers를 제외한 테이블의 최솟값은 10860으로 10733보다 큰 값들이 조회된 것이 맞네요 ;)
이상 ANY, SOME, ALL에 대해 정리해봤습니다. 다음 글은 어떤 포스팅를 하게 될까요!
'데이터분석 공부하기' 카테고리의 다른 글
모델링 기본 정리 (0) | 2021.11.07 |
---|---|
데이터 모델링 (0) | 2021.10.24 |
여러가지 JOIN들 (0) | 2021.09.12 |
Primary Key의 종류 (0) | 2021.08.15 |
Seaborn 시각화 (0) | 2021.04.23 |
댓글