개발새발 블로그
[SQL 첫걸음] 3장 - 연산 본문
4. 수치연산
데이터배이스 제품에 따라 다른데,
%대신 MOD 함수를 사용하는 경우도 있다.
SELECT 구는 열명을 지정하기도 하고,
추가적으로 식도 기술할 수 있다.
SELECT 식1, 식2... FROM 테이블명;
현재 기본 세팅이다.
단가 x 개수의 연산식을 사용하고 싶으면,
cost*amount 라는 열이 새롭게 생긴다.
<열의 별명>
새롭게 생긴 열의 이름을 cost*amount 가 아닌, 새로운 이름 total 이라는 열로 이름짓고싶다면
예약어 AS 를 사용한다.
SELECT 식1, 식2... AS 별명 FROM 테이블명;
이렇게 더블쿼츠를 사용해도 괜찮다.
<WHERE 구에서 연산하기>
SELECT *, cost*amount "total" FROM product WHERE cost*amount >= 10000;
WHERE구 에서는 지정해준 별명으로는 사용이 불가능하다!
데이터베이스 서버 내부에서 WHERE 구 -> SELECT 구 순으로 처리되기 때문이다.
<NULL 값의 연산>
NULL + 1 을 해서 NULL을 0으로 간주하고 1의 결과값이 나오는 것이 아니라,
NULL 값을 이용해서 연산해도 NULL 값이 나온다.
<ORDER BY 구에서 연산하기>
ORDER BY는 WHERE과 달리 서버에서 내부적으로 가장 나중에 처리되므로,
설정해둔 별명으로 조건을 달아줘도 상관없다.
SELECT *, cost*amount "total" FROM product ORDER BY cost*amount;
SELECT *, cost*amount "total" FROM product ORDER BY total;
둘 다 같은 결괏값을 보여준다.
<ROUND 함수>
반올림을 해주는 함수
SELECT amount, ROUND(amount) FROM sampledb;
amount | round(amount) |
128.9 | 129 |
2134.1 | 2134 |
108.0 | 108 |
주의) INTEGER 형은 소숫점 저장은 하지 못하고, DECIMAL 형으로 정의해야 소숫점까지 저장이 된다.
함수의 인자로 함께 넣어주면, 소숫점 자리수까지 지정이 가능하다.
SELECT amount, ROUND(amount, 1) FROM sampledb;
amount | round(amount, 1) |
128.90 | 129.9 |
2134.16 | 2134.2 |
108.00 | 108.0 |
인자를 음수로 지정하면, 반올림할 자릿수도 지정할 수 있다.
SELECT amount, ROUND(amount, -2) FROM sampledb;
amount | round(amount, -2) |
128.90 | 100 |
2134.16 | 2100 |
180.8 | 200 |
5. 문자열 연산
<문자열 결합>
문자열을 결합하는 연산자도 데이터베이스 제품마다 방언이 있다.
연산자/함수 | 연산 | 데이터베이스 |
+ | 문자열 결합 | SQL Server |
|| | 문자열 결합 | Oracle, DB2, PostgreSQL |
CONCAT | 문자열 결합 | MySQL |
문자열 결합은 2개의 열 데이터를 모아서 1개의 열로 처리하고 싶은 경우에 자주 사용한다.
SELECT *, CONCAT(amount, unit) FROM product;
<SUBSTRING 함수>
문자열의 일부분을 계산해서 반환해주는 함수
연속된 문자/숫자를 두개의 열로 나눈다.
앞 4자리 추출
SUBSTRING('20140125001', 1, 4) -> '2014'
5째 자리부터 2자리 추출
SUBSTRING('20140125001', 5, 2) -> '01'
<TRIM 함수>
여분의 스페이스가 있을 경우 제거.
but 문자열 도중에 존재하는 스페이스는 제거 안됨!!
TRIM으로 스페이스 제거하기
TRIM('ABC ') -> 'ABC'
<CHARACTER_LENGTH 함수>
문자열의 길이를 계산해서 돌려줌.
6. 날짜 연산
'백 > SQL' 카테고리의 다른 글
[SQL 첫걸음] 3장 - 정렬 (0) | 2023.09.30 |
---|---|
[SQL 첫걸음] 1,2장 - 테이블에서 데이터 검색 (0) | 2023.09.23 |