study/sql

정렬과 연산 - 수치 연산(함수), 문자열 연산

올스왑 2021. 5. 17. 01:03

SQL 첫걸음이란 책을 읽으면서 정리중.

 

SQL은 기본적인 계산 기능을 포함하고 있다.

 

기본적인 산술 연산 기능을 갖고 있다. -> + - * / %(나머지. MOD를 사용하기도 함.) -> 우선순위는 기본적인 수학 연산에서와 같다. SELECT 구나 WHERE 구에서 사용할 수 있다.

 

다음과 같은 SAMPLE 테이블이 있다.

 

SELECT *, price * quantity FROM sample; -> 샘플테이블에서 모든 열의 데이터와 단가와 개수를 곱한 값을 출력한다.

-> 하지만 이렇게 하면 출력 값에는 'price * quantity'라는 열이 추가되서, 가독성이 떨어진다.

-> 이럴 때, AS 구를 사용하면 원하는 이름의 별명을 붙일 수있다.

-> SELECT *, price * quantity AS amount FROM sample; -> amount로 출력됨.

 

* 별명을 지정할 때, 아스키 문자 외의 값은 더블쿼트로 감싸야 한다.

-> 데이터베이스 객체의 이름을 지정할 땐 더블쿼트를 사용하고, 문자열 상수의 경우에는 싱글쿼트로 감싼다.

-> 데이터베이스 객체 이름이나 별명 붙일 때의 문자열 상수는 숫자로 시작하면 안된다.(되는 경우도 있지만, 안하는 것이 좋다.)

 

SELECT 구와 마찬가지로 WHERE 구에서도 연산을 할 수 있다.

ex) SELECT * FROM sample WHERE price * quantity >= 1000;

 

SQL 연산 순서가 WHERE 구가 SELECT 구보다 먼저이기 때문에 SELECT 구에서 설정한 별명은 사용할 수 없다.

 

NULL에 대한 연산 결과는 모두 NULL이다.

 

ORDER BY 구에서도 연산을 사용할 수 있는데, SELECT 구보다 나중에 처리되기 때문에 SELECT 구에서 설정된 별명을 사용할 수 있다.

ex) SELECT *, price * quantity AS amount FROM sample ORDER BY amount DESC;

 

SQL에서는 다양한 함수를 통해 연산을 할 수도 있다.

* MOD(10, 3) -> 1 : 나머지 함수

* ROUND(1021.76) -> 1022 : 반올림 함수. 소수점을 포함하는 DECIMAL 자료형의 데이터를 처리하고, 기본적으로 소수점 첫째자리에서 반올림하지만 반올림할 자릿수를 지정할 수 있다.

-> ROUND(1021.76, 1) -> 1021.8 : 소수점 둘째 자리에서 반올림.

-> ROUND(1021.76, -1) -> 1020 : 음의 값을 넣어서 정수부에서도 반올림을 할 수 있다.

* 이 외에 다양한 함수가 제공됨.


문자열 연산.

 

문자열 결합 함수 : 데이터베이스 제품마다 다르다.

* MySQL : CONCAT()

* SQL Server : +

* Oracle, PostgreSQL : ||

 

SUBSTRING 함수 : 문자열 추출 함수

TRIM 함수 : 문자열 앞뒤에 있는 스페이스를 제거하는 함수.

CHARACTER_LENGTH 함수 : 문자열 길이 반환 함수.

OCTET_LENGTH 함수 : 문자열의 길이를 바이트 단위로 반환하는 함수.

 

문자열의 인코드 방식을 데이터베이스에서는 문자세트(character set)이라고 하는데, 문자세트에 따라 문자열 데이터의 길이는 달라진다.