SQL 첫걸음 - 수치 연산
1. 사칙 연산
연산자의 우선 순위
우선순위 | 연산자 |
1 | * / % |
2 | + - |
2. SELECT 구로 연산하기
SELECT * FROM sample34;
sample34 테이블의 내용 참조
SELECT *, price * quantity FROM sample34;
가격 * 수량으로 금액 계산하기
3. 열의 별명
SELECT *, price * quantity AS amount FROM sample34;
price * quantity 식에 amount라는 별명 붙이기
- 별명은 예약어 AS를 사용해 지정, AS는 생략 가능
- SELECT 구에서는 콤마(,)로 구분해 복수의 식 지정 가능, 각각의 식에 별명 붙일 수 있음
- 별명을 한글로 지정하는 경우에는 오작동하는 경우가 많아 더블쿼트("")로 둘러싸서 지정
- ASCII문자 이외의 것을 포함할 경우는 더블쿼트로 둘러싸서 지정
: SELECT *, price * quantity "금액" FROM sample34;
* 데이터베이스 객체명 : 더블쿼트로 둘러쌈 ex) "sample21", "sample34"
* 문자열 상수 : 싱글쿼트로 둘러쌈 ex) 'ABC', '박준용'
* 더블쿼트로 둘러싸면 예약어와 같은 이름 지정 가능 : SELECT price * quantity AS "SELECT" FROM sample34;
* 이름을 붙일 때 숫자로 시작할 수 없음 - 더블쿼트로 묶을 시 가능
4. WHERE 구에서 연산하기
SELECT *, price * quantity AS amount FROM sample34 WHERE price * quantity >= 2000
WHERE 구에서 금액을 계산하고 2000원 이상인 행 검색하기
- SELECT 구에서 amount라는 별명을 붙인 후 WHERE 구에서 amount로 지정하게되면 amount라는 열은 존재하지 않는다는 에러 발생함 : SQL 내부처리 순서가 WHERE ➡️ SELECT 구의 순서로 내부 처리를 함. 즉 WHERE 구의 처리가 SELECT 구보다 선행되므로 WHERE 구에서 사용한 별칭은 아직 내부적으로 지정되지 않은 상태라 에러 발생
* SELECT 구에서 지정한 별명은 WHERE 구 안에서 사용할 수 없다!
5. NULL 값의 연산
아래 연산 결과 모두 NULL
- NULL + 1
- 1 + NULL
- 1 + 2 * NULL
- 1 / NULL
* NULL로 연산하면 결과는 NULL이 된다!
6. ORDER BY 구에서 연산하기
SELECT *, price * quantity AS amount FROM sample34 ORDER BY price * quantity DESC;
ORDER BY 구에서 금액을 계산하고 내림차순으로 정렬하기
- ORDER BY는 서버에서 내부적으로 가장 나중에 처리됨
- SELECT 구보다 나중에 처리되기 때문에 SELECT 구에서 지정한 별명을 ORDER BY에서도 사용할 수 있음
SELECT *, price * quantity AS amount FROM sample34 ORDER BY amount DESC;
ORDER BY구에서 별명을 사용해 정렬하기
- 서버 내부 처리 순서 : WHERE 구 ➡️ SELECT 구 (여기서 별명을 지정) ➡️ ORDER BY 구
* ORDER BY 구에서는 SELECT 구에서 지정한 별명을 사용 할 수 있음
7. 함수
- 10 % 3을 계산하면 결과값 1
- MOD(10,3)을 계산하면 결과값 1
* 함수도 연산자도 표기 방법이 다를 뿐 같음
8. ROUND 함수
SELECt * FROM sample341;
SELECT amount, ROUND(amount) FROM sample341;
ROUND로 반올림
- 반올림 자릿수 지정
: ROUND 함수는 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환.
: ROUND 함수의 두 번째 인수로 반올림할 자릿수를 지정할 수 있음
SELECT amount, ROUND(amount, 1) FROM sample341;
ROUND 함수의 두 번째 인수를 저장해 소수점 둘째 자리를 반올림
* 음수로 지정해 정수부의 반올림할 자릿수도 지정할 수 있음
SELECT amount, ROUND(amount, -2) FROM sample341;