
목차
산술연산자를 통한 데이터를 가공하거나 가정해 볼 수 있습니다.
산술식에는 열이름, 상수 및 산술 연산자를 포함할 수 있습니다.
산술 연산자로 사용할 수 있는 연산자는 아래와 같이 5개가 있습니다.
DATE 및 TIMESTAMP 데이터 유형은 더하기(+)/빼기(-)만 사용 가능합니다.
1. 산술연산자 종류
더하기 연산자(+): 더하기 연산자는 두 개의 숫자 값을 더하는 데 사용됩니다.
SELECT 2 + 3 FROM dual;
결과: 5
빼기 연산자(-): 빼기 연산자는 하나의 숫자 값에서 다른 값을 빼는 데 사용됩니다.
SELECT 10 - 5 FROM dual;
결과: 5
곱셈 연산자(*): 곱셈 연산자는 두 개의 숫자 값을 곱하는 데 사용됩니다.
SELECT 2 * 3 FROM dual;
결과: 6
나누기 연산자(/): 나누기 연산자는 하나의 숫자 값을 다른 값으로 나눌 때 사용합니다.
SELECT 10 / 2 FROM dual;
결과: 5
참고: 0으로 나누면 오류가 발생합니다.
계수 연산자(%): 계수 연산자는 나누기 연산의 나머지를 구하는 데 사용됩니다.
SELECT 10 % 3 FROM dual;
결과: 1
즉, 10을 3으로 나눈 값은 3이고 나머지는 1입니다.
2. 연산 우선순위
연산에는 우선순위가 있습니다.
곱하기, 나누기가 먼저 실행되고 우선순위가 동일한 경우 왼쪽이 먼저 실행됩니다.
• 곱하기와 나누기는 더하기와 빼기보다 먼저 수행됩니다.
• 동일한 우선 순위를 갖는 연산자는 왼쪽에서 오른쪽으로 평가됩니다.
• 괄호는 기본 우선 순위를 재정의하거나 표현식을 명확히 하기 위해 사용됩니다.
이에 따라 아래와 같은 예시는 14가 나옵니다.
SELECT 2 + 3 * 4 FROM dual;
결과: 14
곱셈 연산(3 * 4)을 먼저 수행한 다음 덧셈 연산(2 + 12)을 수행합니다.
3. 연산에서 알고 있으면 좋은 팁
3-1. 암시적 변환
데이터 유형이 다른 열 또는 리터럴에서 계산을 수행할 때 피연산자가 동일한 데이터 유형이 되도록 암시적 변환을 수행할 수 있습니다. 예를 들어 숫자 열과 문자열 리터럴을 추가하려는 경우 문자열을 숫자로 변환할 수 있습니다.
이로 인해 때때로 예기치 않은 결과가 발생할 수 있으므로 피연산자의 데이터 유형을 인식하는 것이 중요합니다.
SELECT 5 / 2 FROM dual;
정수 5를 정수 2로 나누고 있습니다.
그러나 나누기 결과가 정수가 아니므로 나누기를 수행하기 전에 피연산자를 숫자로 암시적으로 변환합니다.
쿼리 결과는 2.5입니다.
SELECT '5' + 2 FROM dual;
문자열 '5'를 정수 2에 추가합니다.
그러나 피연산자의 데이터 유형이 서로 다르기 때문에 문자열 5를 정수로 변환합니다.
결과는 7입니다.
3-2. 정밀도 및 배율
나누기 연산을 수행할 때 피연산자의 데이터 유형에 따라 결과를 특정 정밀도 및 배율로 반올림할 수 있습니다.
예를 들어 정밀도가 10이고 소수 자릿수가 2인 숫자를 정밀도가 5이고 소수 자릿수가 1인 숫자로 나누면 결과는 정밀도가 12이고 소수 자릿수가 3이 될 수 있습니다. 예기치 않은 결과가 발생할 수 있으므로 피연산자의 정밀도와 배율을 인식하는 것이 중요합니다.
number(정밀도, 배율)
정밀도: 소수점의 왼쪽과 오른쪽에 저장될 수 있는 전체 자릿수의 최대 값
배율: 소수점의 오른쪽에 저장될 수 있는 최대 자릿수
3-3. 오버플로 및 언더플로
매우 크거나 작은 숫자에 대해 계산을 수행할 때 오버플로 또는 언더플로 오류가 발생할 수 있습니다. 연산 결과가 데이터 타입에 저장할 수 있는 최대값보다 큰 경우 오버플로가 발생하고, 저장할 수 있는 최소값보다 작은 경우 언더플로가 발생한다. 두 경우 모두 결과가 잘리거나 반올림되어 부정확한 결과가 나올 수 있습니다.
SELECT 1e1000 * 1e1000 FROM dual;
SELECT 1e-1000 / 1e1000 FROM dual;
위 두 수식은 오라클에서 다루는 수를 벗어나기 때문에 아래와 같은 오류가 발생합니다.
그래서 개발할 때는 피연산자의 크기를 가늠할 수 있어야 합니다.
'오라클' 카테고리의 다른 글
쿼리에서 중복을 제거하는 방법(DISTINCT와 GROUP BY 차이점) (0) | 2023.03.24 |
---|---|
오라클 데이터 타입과 정확히 작성해야 하는 이유 (0) | 2023.03.22 |
sql에서 가독성을 높이는 별칭 사용법(Column Aliases, Table Aliases) (0) | 2023.03.18 |
10 x null = ?, null(널)에 대해 알아야할 사항 (0) | 2023.03.16 |
오라클 SQL DECODE와 CASE(조건문, 비교) (0) | 2023.03.14 |