TIL - 수치 연산

이태연·2022년 2월 14일
0
post-thumbnail

SQL은 데이터베이스를 조작하는 언어이지만 컴퓨터를 조작하는 언어이기도 한 만큼
기본적인 계산기능을 포함합니다.

  1. 사칙연산

    • + - * / %(나머지)
      → 데이터베이스 제품에 따라 %대신 MOD 함수를 사용하는 경우도 있습니다.
    • 우선순위 : 1순위 - * / % 2순위 - + - 같은 그룹 내 연산자 우선순위는 동일
  2. SELECT 구로 연산하기

    • SELECT 구에는 열명을 지정하는 것 외에도 여러 가지 식을 기술할 수 있습니다.

      💡SELECT 식1, 식2 ... FROM 테이블명

    • 예시
      sample34 테이블의 내용 참조하기

      sample34 테이블에서 주문금액은 price*quantity로 계산할 수 있습니다.
      이를 SELECT 구로 지정해 계산하면 다음과 같습니다.

      SELECT *,price*quantity FROM sample34;


      여기에서 price*quantity 열 이름을 별명을 붙여 재지정할 수 있습니다. 별명은 예약어 AS를 사용해 지정합니다. (예약어 AS는 생략이 가능)
      SELECT *,price*quantity AS amount FROM sample34;

      SELECT 구에서는 콤마(,)로 구분해 복수의 식을 지정할 수 있으며 각각의 식에 별명을 붙일 수 있습니다.

      SELECT *,price*quantity AS amount, price/quantity AS A FROM sample34;


  1. 열의 별명
    • 별명을 한글로 지정하는 경우 오작동 하는 경우가 많으므로 더블쿼트(MySQL에서는 백쿼트)로 둘러싸서 지정합니다.
    • 명령구문을 분석할 때 더블쿼터(””)로 둘러싸면 데이터베이스 객체명으로 간주합니다.
    • 별명에 ASCII 문자 이외의 것을 포함할 경우는 더블쿼트로 둘러싸서 지정합니다.
    • 싱글쿼트(’’)로 둘러싸면 문자열 상수입니다.
    • 숫자로 시작하는 별명의 경우 MySQL에서는 허용되는 반면 Oracle의 경우 숫자로 시작하는 별명은 허용되지 않습니다.
    • 별명을 붙일 때 숫자만으로 구성되는 객체명은 허용되지 않습니다.
  1. WHERE 구에서 연산하기
    • WHERE 구에서는 조건을 통해 보다 상세하게 행을 검색할 수 있습니다.
    • 예시
      SELECT *, price*quantity AS amount FROM sample34;
      WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기
      SELECT *, price*quantity AS amount FROM sample34 WHERE price*quantity >= 2000; 주의할 점은, SELECT 구에서 amount라는 별명을 붙였다고 WHERE 구에도 amount로 지정하여 사용하면 안된다는 것입니다. 그 이유는 데이터베이스 서버 내부에서 WHERE 구 → SELECT 구 순서로 처리되기 때문입니다. 그렇기 때문에 SELECT 구에서 지정한 별명을 WHERE 구에서 사용하면 아직 내부적으로 지정되지 않은 상태이기 때문에 에러가 발생합니다.
  1. NULL 값의 연산
    • C나 PHP 언에서는 NULL이 0으로 처리되지만 SQL에서는 NULL값이 0으로 처리되지 않습니다.
    • NULL로 연산하면 결과는 NULL이 됩니다.
  1. ORDER BY 구에서 연산하기

    • ORDER BY 구에서도 연산이 가능하며 그 결괏값들을 정렬할 수 있습니다.
    • 예시
      SELECT *, price * quantity AS amount FROM sample34; ORDER BY 구에서 금액을 계산하고 내림차순으로 정렬하기 SELECT *, price * quantity AS amount FROM sample34 ORDER BY price * quantity DESC; ORDER BY는 서버에서 내부적으로 가장 나중에 처리되기 때문에 SELECT 구에서 지정한 별명을 ORDER BY에서도 사용할 수 있습니다.
      SELECT *, price * quantity AS amount FROM sample34 ORDER BY amount DESC;
    • 서버에서 내부처리 순서 **WHERE 구 → SELECT 구(별명 지정) → ORDER BY 구
  2. 함수

    💡함수명(인수1, 인수2)

    • 연산자 외에 함수를 사용하여 연산할 수 있습니다.
    • 연산자도 함수도 표기 방법이 다를 뿐 같은 것이라고 할 수 있습니다.
      10%3 → 1
      MOD(10,3) →1
  3. ROUND 함수

    • ROUND 함수는 숫자를 반올림 하는 함수입니다.
    • 예시
      SELECT *FROM sample341; ROUND로 반올림
      SELECT amount, ROUND(amount) FROM sample341;
    • ROUND 함수는 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환합니다.
      이때 ROUND 함수의 두번째 인수로 반올림한 자릿수를 지정할 수 있습니다.
    • 두번째 인수는 생략 가능하면 생략하는 경우 0으로 간주되어 소수점 첫째 자리를 반올림합니다.
      1을 지정하면 소수점 둘째 자리를 반올림합니다.
      SELECT amount, ROUND(amount,1) FROM sample341;
    • ROUND함수는 두 번째 인수에 음수를 사용해 정수부의 반올림할 자릿수도 지정할 수 있습니다.
    • 예를들어 5961.60 에서 두 번째 인수0은 1, 6은 0, 1는 -1, 6은 -2, 9는 -1를 사용해 지정할 수 있습니다. SELECT amount, ROUND(amount,-2) FROM sample341;
    • TRUNCATE 함수를 통해 버림을 할 수도 있습니다.
profile
주니어 백엔드 웹 개발자입니다.

0개의 댓글