이번 포스트에서는 SQL에서 산술 연산을 어떻게 수행하고 또 문자열은 어떻게 다루는지 알아보겠습니다.
1) 산술연산
-- SQL에서의 산술 연산, 산술 연산간 우선순위는 기존의 연산자와 같다
-- + - * /(몫) %(나머지)
-- 한국 나이를 가져오고 해당 한국 나이가 80 이하인 경우만 오름차순 정렬
SELECT 2025 - birthYear AS KoreanAge
FROM players
WHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2025 - birthYear) <= 80
ORDER BY KoreanAge;
-- 반올림
SELECT ROUND(3.14142323, 3);
-- 제곱
SELECT POWER(2, 3);
-- 삼각함수(코사인)
SELECT COS(0)
SQL에서도 마찬가지로 사칙연산을 수행하는 연산자들간의 우선순위가 존재합니다.
이런 우선순위를 주의하며 사용할 필요가 있습니다.
첫 번째 쿼리의 경우 이전에 사용하던 데이터 테이블에서
산술 연산을 사용하여 새로운 KoreanAge라는 특성을 만들어 보았습니다.
이때 해당 특성에서 deathYear과 birthYear이 NULL이 아닌 대상 중에서
KoreanAge가 80이하인 대상만을 찾아와 오름차순으로 정렬하여 가져오게 됩니다.
실행 결과는 다음과 같습니다.
두 번째 쿼리는 반올림을 수행합니다.
첫 번째 인자를 소수로 넣어주고, 두 번째 인자를 통해 반올림할 범위를 지정합니다.
최종적으로 소수점 3번째 자리까지 반올림합니다.
세 번째 쿼리는 제곱을 수행합니다.
첫 번째 인자로 밑을 넣어주고, 두 번째 인자로 지수를 넣어줍니다.
마지막 쿼리는 삼각함수를 수행합니다.
삼각함수 중에서 cos을 수행하도록 하였습니다.
산술 연산자는 위의 예시 외에도 많은 예시가 존재합니다.
필요에 따라 그때그때 사용하는 것이 바람직합니다.
2) 문자열
-- 영어가 아닌 문자열 연산
SELECT N'고길동'
-- 문자열 결합
SELECT 'Hello ' + 'World'
-- 문자열 추출
SELECT SUBSTRING('20240712', 1, 4)
-- 문자열 개행 날리기
SELECT TRIM(' HelloWorld')
-- 데이터에 적용
SELECT nameFirst + ' ' + nameLast AS FullName
FROM players
WHERE nameFirst IS NOT NULL AND nameLast IS NOT NULL;
첫 번째 쿼리의 경우, 영어가 아닌 문자열을 처리합니다.
이때 영어가 아닌 다른 언어의 문자열을 사용하는 경우 앞에 N을 수식하여 유니코드로 바꿔줘야 합니다.
두 번째 쿼리의 경우, 문자열 끼리의 결합을 수행합니다.
간단하게 + 연산자를 사용하여 결합합니다.
세 번째 쿼리의 경우, 문자열에서 특정한 데이터를 추출합니다.
이때 문자열의 시작부가 0이 아닌 1이라는 것에 주의해야 합니다.
예제에서는 1번부터 시작하여 총 4개의 문자를 가져오게 됩니다.
네 번째 쿼리의 경우, 문자열에 존재하는 개행처리된 부분을 없애줍니다.
마지막 쿼리의 경우, 문자열에 대한 연산을 실제 데이터에 적용해보았습니다.
nameFirst 특성과 nameLast 특성을 합쳐서 새로운 FullName 특성을 만들어냅니다.
'데이터베이스' 카테고리의 다른 글
SQL (6) - 집계 함수 (0) | 2025.02.10 |
---|---|
SQL (5) - CASE (0) | 2025.02.05 |
SQL (4) - DATETIME (0) | 2025.02.05 |
SQL (2) - ORDER BY문 (0) | 2025.02.04 |
SQL (1) - SELECT문 (0) | 2025.02.04 |