확인한 환경과 범위

Windows · SQLite 3.45.3. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.

이 글의 순서 5개 단락

상품마다 재고 금액을 확인하려면 가격과 수량을 곱하면 됩니다. SQLite에서는 SELECT에 계산식을 적어 각 상품의 금액을 조회하고, AS로 결과 열에 이름을 붙일 수 있습니다.

SELECT에서 계산하기

SELECT에는 기존 열 이름뿐 아니라 price * quantity 같은 계산식도 적을 수 있습니다. *는 곱셈 연산자이며, 식은 조회하는 각 행의 값을 사용해 계산됩니다. AS stock_value는 이 계산 결과의 열 이름을 stock_value로 지정합니다.

이름을 붙여도 원래 테이블에 새 열이 저장되지는 않습니다. 이 예제에서 구하는 것은 상품별 금액이며, 모든 상품의 금액을 더한 합계는 아닙니다.

상품별 재고 금액 조회하기

실습 환경은 SQLite입니다. 아래 예제는 다음 입력을 쿼리 안에 직접 준비합니다. 가격은 원 단위이고 수량은 개수입니다.

번호상품가격수량
1연필5004
2공책20003
3지우개8000
WITH products(id, name, price, quantity) AS (
  VALUES
    (1, '연필', 500, 4),
    (2, '공책', 2000, 3),
    (3, '지우개', 800, 0)
)
SELECT name, price, quantity, price * quantity AS stock_value
FROM products
ORDER BY id;

조회 결과 계산하고 이름 붙이기 — 첫 예제의 실제 실행 결과

예상 출력은 다음과 같습니다. 표시 방식은 사용하는 SQLite 실행 환경에 따라 달라질 수 있습니다.

name    price  quantity  stock_value
연필    500    4         2000
공책    2000   3         6000
지우개  800    0         0

코드와 결과 살펴보기

WITH는 이 쿼리에서 사용할 임시 결과에 products라는 이름을 붙입니다. 괄호 안의 id, name, price, quantity는 열 이름이고, VALUES의 각 괄호는 상품 한 행의 값을 순서대로 나타냅니다. 별도로 테이블을 만들거나 데이터를 저장하지 않고도 예제를 살펴볼 수 있습니다.

SELECT는 상품 이름, 가격, 수량과 함께 price * quantity의 결과를 반환합니다. 예를 들어 공책 행에서는 2000 * 3이므로 stock_value가 6000입니다. 마지막의 ORDER BY id는 번호 순서로 결과를 표시합니다.

흔한 실수와 경계 조건

  • price * quantity AS stock_value에서 AS 뒤의 이름은 결과 열의 별칭입니다. 원본의 price나 quantity 값이 바뀌는 것은 아닙니다.
  • 수량이 0이면 곱셈 결과는 0입니다. 반면 가격이나 수량이 NULL이면 값이 알려지지 않았으므로 곱셈 결과도 NULL입니다. NULL을 0으로 생각하면 안 됩니다.
  • 계산식을 늘릴 때는 연산 순서에 주의하세요. 예를 들어 price * quantity + 100은 먼저 곱하고 100을 더합니다. 의도한 순서를 분명히 하려면 괄호를 사용할 수 있습니다.

연습과 풀이

위 예제에서 상품마다 포장비 100원을 한 번 더한 금액을 packed_value라는 열로 표시해 보세요. 수량과 포장비는 곱하지 않습니다.

풀이: SELECT의 계산식 부분을 아래처럼 바꾸면 됩니다.

price * quantity + 100 AS packed_value

연필은 500 * 4 + 100으로 2100이 됩니다. 지우개처럼 수량이 0인 경우에도 포장비를 상품 행마다 한 번 더하므로 결과는 100입니다.

출처: SQLite SELECT 문서, SQLite 표현식과 연산자 문서

CHECK THE SOURCE

참고한 공식 문서

기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.

한 줄씩 이해하고, 차곡차곡 기록합니다.이 글의 오류 제보하기 ↗