Post

[SQL] 연산자 및 함수들

SQL의 연산자

연산자의미
+,-,*,/더하기, 빼기, 곱하기, 나누기
%, MOD나머지
IS양쪽이 모두 TRUE 또는 FALSE
IS NOT한쪽은 TRUE 한쪽은 FALSE
AND, &&양쪽이 모두 TRUE
OR, ||한쪽만 TRUE여도 TRUE
=양쪽 값이 동일
!=, <>양쪽 같이 다름
>, <(왼쪽, 오른쪽) 값이 큼
>=, <=(왼쪽, 오른쪽) 값이 같거나 더 큼
BETWEEN {MIN} AND {MAX}두 값 사이에 있음
NOT BETWEEN {MIN} AND {MAX}두 값 사이가 아닌 곳에 있음
IN(…)괄호 안의 값들 가운데 있음
NOT IN(…)괄호 안의 값들 가운데 없음
LIKE ‘…%…’0~N개 문자를 가진 패턴
LIKE ‘…_…’_ 갯수 만큼의 문자를 가진 패턴

사칙 연산

1
2
3
4
5
6
7
8
// (1)
SELECT 1 + 2;
// (2)
SELECT 2 - 1 AS Minus;
// (3)
SELECT 'A' + 1;
// (4)
SELECT '1' + 3;
  • 1번
1+2
3
  • 2번
Minus
1
  • 3번

    문자는 0으로 인식

‘A’+1
1
  • 4번

    숫자를 내용으로 가진 문자는 숫자로 치환

‘1’+3
4

응용

📌 Example

ProductPriceCount
A102
B203
1
2
SELECT Product, Price * Count AS Pay
FROM Example;
ProductPay
A20
B30

참 & 거짓

1
SELECT TRUE, FALSE;
TRUEFALSE
10

응용

// Example | Product | Price | Count | | ——- | —– | —– | | A | 10 | 2 | | B | 20 | 3 | | C | 20 | 5 | | D | 20 | 7 |

1
2
3
SELECT Product, Count < 3 AS TEST
FROM Example
WHERE Count < 6;
ProductTEST
A1
B0
C0

이러한 연산자들을 SELECT 키워드 다음 혹은 WHERE 키워드 다음에 활용하여 다양한 데이터를 출력할 수 있다.

숫자 함수

함수의미
ROUND반올림
CEIL올림
FLOOR내림
ABS절대값
GREATEST(괄호 안에서) 가장 큰 값
LEAST(괄호 안에서) 가장 작은 값
MAX가장 큰 값
MIN가장 작은 값
COUNT갯수(NULL 미포함)
SUM총합
AVG평균
POW(A, B), POWER(A, B)A를 B만큼 제곱
SQRT제곱근
TRUNCATE(N, n)N을 소수점 n자리 까지 선택

문자열 함수

함수의미
UCASE, UPPER모두 대문자로
LCASE, LOWER모두 소문자로
CONCAT(…)괄호 안의 내용 이어 붙임
CONCAT_WS(S, …)괄호 안의 내용 S로 이어 붙이기
SUBSTR, SUBSTRING주어진 값에 따라 문자열 자르기
LEFT왼쪽 부터 N글자
RIGHT오른쪽 부터 N글자
LENGTH문자열의 바이트 길이
CHAR_LENGTH, CHARACTER_LENGTH문자열의 문자 길이
TRIM양쪽 공백 제거
LTRIM왼쪽 공백 제거
RTRIM오른쪽 공백 제거
LPAD(S, N, P)S가 N글자가 될 때까지 P를 왼쪽에 이어 붙이기
RPAD(S, N, P)S가 N글자가 될 때까지 P를 오른쪽에 이어 붙이기
REPLACE(S,A,B)S중 A를 B로 변경
INSTR(S, s)S중 s의 첫 위치를 반환, 없다면 0
CAST(A AS T), CONVERT(A,T)A를 T자료형으로 변환

시간/날짜 관련 함수

함수의미예제
CURRENT_DATE(), CURDATE()현재 날짜 변환 
CURRENT_TIME(), CURTIME()현재 시간 반환 
CURRENT_TIMESTAMP(), NOW()현재 시간과 날짜 반환 
DATE()문자열에 따라 날짜 생성DATE(‘2024-02-12’)
TIME()문자열에 따라 시간 생성TIME(‘21:21:21’)
YEAR()DATETIME값의 년도 반환 
MONTHNAME()DATETIME값의 월(영문) 반환MONTHNAME(‘2024-07-03’) -> July
MONTH()DATETIME값의 월 반환 
WEEKDAY()DATETIME값의 요일값 (월요일: 0)WEEKDAY(‘2024-02-16’) -> 6
DAYNAME()DATETIME값의 요일명 반환DAYNAME(‘2024-02-16’) -> Friday
DAYOFMONTH(), DAY()DATETIME값의 날짜(일) 반환 
HOUR()DATETIME의 시 반환 
MINUTE()DATETIME의 분 반환 
SECOND()DATETIME의 초 반환 
ADDDATE(), DATE_ADD()시간/날짜 더하기ADDDATE(‘2024-02-12’, INTERVAL 1 YEAR) -> ‘2025-02-12’
SUBDATE(), DATE_SUB()시간/날짜 빼기 
DATEDIFF()두 시간/날짜 간 일수차DATEDIFF(‘2024-02-12’, ‘2024-01-12’) -> 31
TIMEDIFF()두 시간/날짜 간 시간차 
LAST_DAY해당 달의 마지막 날짜 
STR_TO_DATE(S,F)S를 F형식으로 해석하여 시간/날짜 생성STR_TO_DATE(‘2024-02-12 21:21:21’, ‘%Y-%m-%d %T’)
  • DATE_FORMAT : 시간/날짜를 지정한 형식으로 반환한다.
형식의미
%Y4자리 연도
%y2자리 연도
%M월(영문)
%m월(숫자)
%D일(영문)
%d, %e일(숫자)
%Thh:mm:ss
%rhh:mm:ss AM/PM
%H, %k24시
%h, %l12시
%i
%S, $s
%pAM/PM

DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %s초'); -> 2024년 02월 12일 PM 01시 01분 02초

기타 함수

  • IF(조건, T, F) : 조건이 참이라면 T, 거짓이면 F반환

📍 복잡한 조건은 CASE문 사용

1
2
3
4
5
6
7
8
9
SELECT
CASE
  WHEN a > 10 THEM '10보다 크다.'
  WHEN a == 10 THEM '10이다.'
  ELSE '10보다 작다.'
END;

SELECT
  IF(1 > 0, '1은 0보다 크다.', '1은 0보다 작다');
  • IFNULL(A,B) : A가 NULL일 경우 B 출력
1
SELECT(NULL, 'A'); -> A
This post is licensed under CC BY 4.0 by the author.