본문 바로가기

SQL 함수란

1. SQL 함수란?

SQL 함수는 미리 정의된 기능을 수행하는 구문으로, 데이터 처리와 변환을 간편하게 할 수 있도록 도와줍니다. SQL 함수는 크게 단일 행 함수(한 행에 대해 하나의 값을 반환)와 그룹 함수(여러 행에 대해 하나의 값을 반환)로 나뉩니다. 이 장에서는 SQLite에서 자주 사용되는 SQL 함수들을 다룹니다.

함수를 사용하면 복잡한 데이터 처리 로직을 간단하게 표현할 수 있으며, 코드의 재사용성과 가독성을 높일 수 있습니다.

1.1 데이터 타입 관련 함수

SQLite는 동적 타입 시스템을 사용하므로, 명시적인 데이터 타입 함수가 제한적입니다. 그러나 값의 타입을 확인하거나 변환할 때 사용할 수 있는 함수들이 있습니다.

1.1.1 typeof 함수

typeof(값) 함수는 값의 데이터 타입을 문자열로 반환합니다. SQLite에서는 다음과 같은 타입을 반환할 수 있습니다:

  • integer: 정수형
  • real: 실수형
  • text: 문자열
  • blob: 바이너리 데이터
  • null: NULL 값

1.1.2 cast 함수

cast(값 AS 타입) 함수는 값을 지정된 타입으로 변환합니다. 데이터 타입 간 변환이 필요할 때 유용합니다.

SELECT typeof(123), typeof('abc'), typeof(4.56);
SELECT cast('123' AS INTEGER), cast(456 AS TEXT);
실습환경 바로가기

1.2 문자열 처리 함수

문자열을 다룰 때 사용하는 함수는 데이터 검색과 변환 시 유용합니다. 사용자 입력 데이터를 정규화하거나, 텍스트 분석을 수행할 때 필수적으로 활용됩니다.

주요 문자열 함수

  • lower('ABC') → 'abc': 문자열을 소문자로 변환합니다. 대소문자 구분 없이 검색할 때 유용합니다.
  • upper('abc') → 'ABC': 문자열을 대문자로 변환합니다. 데이터 정규화에 활용됩니다.
  • substr('hello world', 1, 5) → 'hello': 문자열의 일부분을 추출합니다. 첫 번째 숫자는 시작 위치, 두 번째 숫자는 추출할 문자열의 길이를 나타냅니다.
  • replace('hello world', 'world', 'SQL') → 'hello SQL': 문자열의 일부를 다른 문자열로 대체합니다. 데이터 정제 작업에 사용됩니다.
  • length('hello') → 5: 문자열의 길이를 반환합니다. 유효성 검증이나 데이터 분석에 활용됩니다.
  • instr('ABCDEF', 'B') → 2: 특정 문자가 문자열 내에서 처음 등장하는 위치를 반환합니다. SQLite에서는 인덱스가 1부터 시작합니다.
SELECT
    lower('HELLO'),
    upper('world'),
    substr('SQLite', 1, 3),
    replace('Hello World', 'World', 'SQLite'),
    length('Function'),
    instr('ABCDEF', 'D');
실습환경 바로가기

1.3 숫자 관련 함수

숫자를 처리할 때 사용할 수 있는 다양한 수학적 함수가 있습니다. 통계 계산, 재무 분석, 과학적 계산 등 다양한 분야에서 활용됩니다.

주요 숫자 함수

  • round(123.456, 2) → 123.46: 숫자를 반올림합니다. 두 번째 인자는 소수점 자릿수를 나타냅니다. 금융 데이터나 통계 계산에 자주 사용됩니다.
  • abs(-10) → 10: 절대값을 반환합니다. 음수를 양수로 변환하여 거리나 차이를 계산할 때 유용합니다.
  • random(): -9223372036854775808과 +9223372036854775807 사이의 정수를 무작위로 반환합니다. 샘플링이나 테스트 데이터 생성에 활용됩니다.

실무 예제

-- 기본 숫자 함수 사용
SELECT round(123.456, 2), abs(-10), random();

-- 0부터 100 사이의 랜덤 정수 생성
SELECT abs(random()) % 101;

-- 가격 반올림 예제
SELECT
    상품명,
    가격,
    round(가격 * 1.1, 0) AS 부가세포함가격
FROM 상품;
실습환경 바로가기

1.4 그룹 함수

그룹 함수는 여러 행의 데이터를 집계할 때 사용됩니다. 일반적으로 GROUP BY 절과 함께 사용되며, 대량의 데이터를 요약하고 통계를 산출하는 데 필수적입니다.

주요 그룹 함수

  • count(): 행의 개수를 셉니다. NULL 값을 제외하고 계산합니다. COUNT(*)는 NULL을 포함한 모든 행을 셉니다.
  • sum(컬럼명): 특정 열의 값을 모두 더합니다. 총 매출이나 총합을 계산할 때 사용됩니다.
  • avg(컬럼명): 특정 열의 평균 값을 계산합니다. 평균 가격이나 평균 점수를 구할 때 활용됩니다.
  • min(컬럼명): 특정 열의 최소 값을 반환합니다. 최저 가격이나 최소값을 찾을 때 사용됩니다.
  • max(컬럼명): 특정 열의 최대 값을 반환합니다. 최고 가격이나 최대값을 찾을 때 사용됩니다.

실무 예제

-- 전체 상품 가격의 합계
SELECT SUM(가격) AS 총가격 FROM 상품;

-- 상품 평균 가격
SELECT AVG(가격) AS 평균가격 FROM 상품;

-- 최저가와 최고가
SELECT MIN(가격) AS 최저가, MAX(가격) AS 최고가 FROM 상품;

-- 전체 상품 개수
SELECT COUNT(*) AS 상품개수 FROM 상품;

-- 카테고리별 집계 (GROUP BY와 함께 사용)
SELECT
    카테고리ID,
    COUNT(*) AS 상품수,
    AVG(가격) AS 평균가격,
    SUM(가격) AS 총가격
FROM 상품
GROUP BY 카테고리ID;
실습환경 바로가기

마무리

SQL 함수는 데이터를 효율적으로 처리하고 분석하는 데 필수적인 도구입니다. 각 함수는 데이터 타입이나 목적에 맞게 사용할 수 있으며, 여러 함수를 조합하여 복잡한 계산이나 변환도 손쉽게 수행할 수 있습니다.

SQLite에서는 일부 함수가 제한적일 수 있으므로, SQLite 공식 문서를 참조하여 사용 가능한 함수를 확인하는 것이 좋습니다. 다음 장에서는 단일 행 함수를 더 자세히 살펴보겠습니다.

SQL 함수란 - SQL 베이스캠프 | 위니버시티