Study/DB

[SQL 첫걸음] 3장.정렬과 연산 - 12.수치 연산

momo02 2018. 8. 29. 13:47
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 

발매 : 2015.11.01



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단위를 반올림

반응형