SQL 첫걸음 - 3장 수치 연산(3/6)
1. 사칙 연산
덧셈 : + , 뺄셈 : - , 곱셈 : * , 나눗셈 : / , 나머지 / %
% 나머지연산자 : 몫이 정수값이 되도록 계산.
ex) 1 나누기 2는 몫이 0.5가 아니라 0. 따라서 나머지는 1.
데이터베이스 제품에 따라 적용하는 함수가 다른데, %대신 MOD함수를 사용하는 경우도 있음.
연산자의 우선순위 1순위. * / % => 2순위. + -
SQL명령에서는 여러 부분에서 산술 연산자 사용 가능. SELECT구나 WHERE 구 안에서도 연산 가능.
2. SELECT 구로 연산
SELECT price * quantity FROM sample34; (가격 X 수량으로 금액 계산)
3. 열의 별명
SELECT price * quantity AS amount FROM sample34;
SELECT price * quantity “금액” FROM sample34;
별명은 예약어 AS(alias)를 사용해 지정. 생략 가능.
ASCII 문자 이외의 것을 포함할 경우에는 더블쿼트(“)로 둘러싸서 지정.
이름을 지정하는 경우 숫자로 시작되지않도록 함
(MySQL에서는 숫자로 시작하는 객체명이 허용되지만 Oracle에선 숫자로 시작하는 이름은 허용X)
cf) 더블쿼트(“)로 둘러싸면 명령구문을 분석할 때 데이터베이스 객체의 이름이라고 간주.
싱글쿼트(')로 둘러싸는 것은 문자열 상수.
4. WHERE 구에서 연산
WHERE구에서 금액을 계싼하고 2000원 이상인 행 검색
SELECT price * quantity AS amount FROM sample34
WHERE price * quantity >= 2000;
주의! SELECT 구에서 지정한 별명은 WHERE 구 안에서 사용 불가
SELECT price * quantity AS amount FROM sample34 WHERE amount >= 2000;
—> 이렇게 WHERE구에 amount 라는 별명(alias)을 사용해서 명령을 실행하면 amount 라는 열이 존재하지않는다는 에러 발생
이유 : WHERE 구 -> SELECT 구의 순서로 내부 처리를 하는 데이터 베이스가 많음.
WHERE 구로 행이 조건에 일치하는지 아닌지를 먼저 조사한 후에 SELECT 구에 지정된 열을 선택해 결과로 반환.
alias는 SELECT 구문을 내부 처리할 때 붙여지는데, WHERE 구의 처리는 SELECT 구보다 선행되므로 WHERE 구에서 사용한 별칭은 아직 내부적으로 지정되지 않은 상태가 되어 에러가 발생.
5. NULL 값의 연산
null로 연산하면 결과는 항상 null이 됨.
6. ORDER BY 구에서 연산하기
ORDER BY 구에서도 연산할 수 있고 그 결괏값들을 정렬할 수 있음.
SELECT *, price * quantity AS amount
FROM sample34
ORDER BY price * quantity DESC;
ORDER BY 구는 서버에서 내부적으로 가장 나중에 처리되기때문에, SELECT 구에서 지정한 별명을 ORDER BY에서도 사용할 수 있음.
cf. DB서버의 내부처리 순서
WHERE 구 —> SELECT 구 (여기서 별명을 지정) —> ORDER BY 구
따라서.. WHERE 구에서는 별명을 사용할 수 없고, ORDER BY 구에서는 별명을 사용할 수 있음.
7. 함수
연산자 외에 함수를 사용해 연산할 수도 있음.
함수명(인수1, 인수2…)
ex) 10 % 3 -> 1 (%연산사 사용)
MOD(10,3) -> 1 (MOD함수 사용)
8. ROUND 함수
반올림을 할때 사용하는 함수
소숫점 이하를 반올림
cf. amount 열은 DECIMAL형으로 정의. ( INTEGER형의 경우 정수밖에 저장할수 없기때문에 )
DECIMAL형
열을 정의할 때 정수부와 소수부의 자릿수를 지정할 수 있는 자료형. (소수점을 포함하는수치를 저장하는 자료형)
반올림 자릿수 지정
ROUND 함수는 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환하는데,
두 번째 인수(파라미터)로 반올림할 자릿수를 지정할 수 있음.
해당 인수 생략 시 0으로 간주되어 소수점 첫째 자리를 반올림하고 1을 지정하면 소수점 둘째 자리를 반올림.
소수점 둘째 자리에서 반올림
음수로 지정해 정수부의 반올림할 자릿수를 지정할 수도 있음.
-1을 지정하면 1단위, -2를 지정하면 10단위를 반올림.
그 밖에도 반올림 외에 버림을 하는 경우도 있는데 이는 TRUNCATE 함수로 계산.
10단위를 반올림
출처 : https://smilejh.tistory.com/