SQL에서의 다양한 검색 조건
이번 포스팅에서는 GROUP BY&HAVING / ORDER BY / 서브쿼리 같은 다양한 검색 조건에 대해 설명하려 한다.
- GROUP BY 구
GROUP BY 구는 말 그대로, 테이블의 레코드를 정해진 기준으로 그룹화 시켜주는 구문이다. 이 구문을 사용하면 아래의 집계함수를 쉽게 연산할 수 있다.
- COUNT( ) : 레코드 value의 개수
- SUM( ) : 레코드 value의 합
- AVG( ) : 레코드 value의 평균
- MAX( ) : 레코드 value 중 최댓값 추출
- MIN( ) : 레코드 value 중 최솟값 추출
아래 예시는 ADDRESS 테이블에서 성별로 그룹화하여 레코드 개수를 구한 과정이다.
- GROUP BY 구 + HAVING 구
HAVING 구는 GROUP BY 구를 통해 연산된 결과 집합에 조건을 걸어 선택하는 기능이다.
HAVING 구는 WHERE 구와 사용방법이 거의 동일하나, GROUP BY 구가 선제적으로 제시되어야 한다. 여기서 WHERE 구는 '레코드'에 조건을 지정한다면, HAVING 구는 GRUOP BY 구로 묶여진 '집합'에 조건을 지정한다는 데에 차이가 있다고 생각하면 되겠다.
아래의 예시처럼, 이미 GROUP BY 구로 그룹화 되어 계산된 COUNT( ) 값에 조건을 걸어 결과를 추출해 줄 수 있다.
- ORDER BY 구
DBMS에서 SELECT 구문의 결과 순서를 지정해 주고 싶을 때 쓰는 구가 ORDER BY 구이다. (조건을 지정해주지 않으면 레코드 순서는 중구 난방으로 출력된다.)
ORDER BY 구로 레코드를 정렬할 때, 디폴트 옵션은 오름차순(ASC)이며, 내림차순 옵션을 적용하고 싶을 땐 DESC를 적용하면 된다.
다음 예시는 ADDRESS 테이블에서 나이(age)의 내림차순으로 레코드를 정렬한 결과이다.
- 서브쿼리
SELECT 구문 안에서 또 다른 SELECT 구문이 기술되어 있는 것을 서브쿼리(subquery)라고 부른다.
서브쿼리를 설명하기 위해 중첩된 레코드가 있는 아래의 두 TABLE을 활용하려 한다. 두 테이블에서 '인성'과 '민'의 데이터가 중첩되는 것을 볼 수 있다.
- 서브쿼리 (FROM 구)
아래의 테이블은 FROM 구에 서브쿼리를 적용한 예시이다. 단순히 서브쿼리가 어떻게 쓰이는지 보이기 위한 예시이므로, 아래 테이블을 구하고 싶을 땐 주석과 같이 쓰면 된다.
- 서브쿼리 (WHERE 구)
서브쿼리를 사용할 때 중요한 WHERE 구 안에서의 활용을 설명하려 한다.
아래는 두 테이블의 중첩된 레코드를 활용하여 서브쿼리가 어떻게 쓰이는지 잘 보여주는 예로, WHERE 구에서 ADDRESS2 테이블의 username을 뽑아내 ADDRESS 테이블의 username과 비교하는 쿼리이다. 이런 처리를 레코드간의 매칭(matching)이라고도 부른다.
서브쿼리를 활용한 쿼리는 아래 주석과 같은 결과를 불러오게 된다.
'Data Analysis > SQL' 카테고리의 다른 글
[SQL] 06. 조건 분기 응용1 (CASE 식과 WHERE 구의 비교) (0) | 2019.07.17 |
---|---|
[SQL] 05. 조건 분기(CASE),집합 연산, 윈도우 함수(WINDOW) (0) | 2019.07.17 |
[SQL] 03. SQL 기초 쿼리1 (TABLE 만들기 + SELECT/WHERE) (0) | 2019.07.14 |
[SQL] 02. SQL 실습환경 찾기 (feat. Oracle Live SQL) (0) | 2019.07.14 |
[SQL] 01. SQL 시작하기 (feat. 한빛출판사 - SQL 레벨업) (0) | 2019.07.14 |
댓글