GROUP BY 절은 특정 열을 기준으로 데이터를 그룹화하며, 그룹화된 데이터는 집계 함수를 이용하여 요약이 가능합니다. GROUP BY 구문은 중복 제거와 함께 데이터를 집계하고 검색할 때 사용합니다.
이를테면, 아래 코드와 같이 '성별' 컬럼을 기준으로 데이터를 그룹화하고, 집계 함수 COUNT로 그룹별 데이터의 수를 계산하는 것이 가능합니다.
SELECT 성별, COUNT(*) FROM 학생정보 GROUP BY 성별;
HAVING 절은 GROUP BY와 함께 사용되며, 그룹화된 데이터에 대한 조건을 추가할 수 있습니다.
GROUP BY로 그룹화한 데이터에 대해서, HAVING 절을 이용하여 집계 함수를 이용한 조건에 따른 검색이 가능합니다.
이를 통해 아래와 같이 '성별' 컬럼을 기준으로 그룹화 하였지만, 그룹별로 3명 이상인 그룹의 데이터만 검색하는 것이 가능합니다.
SELECT 성별, COUNT(*) FROM 학생정보
GROUP BY 성별
HAVING COUNT(*) > 2;
NULL은 값이 정의되지 않은 데이터를 의미합니다. 따라서, NULL 값을 검색하려면 일치 연산자(=, <>, >, <)를 사용하는 것이 불가능합니다.
대신, IS NULL 또는 IS NOT NULL을 사용하여 검색해야합니다.
예를 들어, 아래와 같이 '이름' 컬럼에 NULL 값이 있는 데이터를 검색하는 쿼리를 작성할 수 있습니다.
SELECT * FROM 학생정보 WHERE 이름 IS NULL;
DISTINCT는 중복 값을 제거하여 결과를 반환합니다.
즉, 중복되는 데이터가 있으면 그 중 하나만을 반환하고 나머지는 모두 제외합니다.
이를 통해 아래와 같이 중복 된 '이름' 컬럼 값을 제거하고, 유일한 '이름' 값만 반환하는 것이 가능합니다.
SELECT DISTINCT 이름 FROM 학생정보;
이와 같이 SQL에서 제공되는 집계 함수와 연산자를 적절히 사용하면, 복잡한 데이터 요약 및 집계 쿼리를 효율적으로 작성할 수 있습니다.
DISTINCT와 GROUP BY는 모두 중복 값을 제거하는 데 사용되지만, 그 구체적인 용도와 작동 방식에서 차이가 있습니다.
DISTINCT는 한 개의 열에 대해 중복 값을 제거하여 반환합니다.
그러나 다른 모든 열에 대한 동일한 처리를 보장하지 않습니다. 즉, 다른 열에 중복 값이 있다면 중복된 데이터가 여전히 반환됩니다.
GROUP BY는 한 개 이상의 열을 기준으로 중복 값을 그룹화하여 처리합니다. 이를 통해, 그룹화된 데이터에 대해 집계 함수를 적용하여 그룹별 요약 정보를 생성합니다.
따라서 GROUP BY는 DISTINCT보다 더 많은 구성 요소에 대해서 중복을 제거하므로, 더 광범위한 요약 가능성을 가지고있습니다.
또한, GROUP BY는 그룹화된 데이터에 대한 필터링을 위해 HAVING 절을 사용할 수 있습니다. 이와 다르게, DISTINCT는 단일 열에 대한 검색으로만 사용됩니다.