JUST GO
[공통] 연산자와 함수 본문
연산자
- 기본 연산자
· + : x + y 꼴에서 x 값과 y 값을 더한다. 단, 문자열 합치기를 지원하지 않음으로 유의한다.
· - : x - y 꼴에서 x 값에서 y 값을 뺀다.
· * : x * y 꼴에서 x 값과 y 값을 곱한다.
· / : x / y 꼴에서 x 값을 y 값으로 나눈 몫이다.
· % 혹은 MOD : x % y 혹은 x MOD y 꼴에서 x 값을 y 로 나눈 나머지이다.
- 비교 연산자
· = : x = y 꼴에서 x 값이 y 값과 같은가의 여부를 반환한다.
- 타 언어와 달리 == 및 === 를 사용하지 않음으로 유의한다. 또한 가능한한 형변환을 통해 비교함으로 유의.
- 가능한 한 형변환을 통해 비교를 함으로 유의한다.
- 영문 비교시 대소문자를 가리지 않고 비교함으로 유의한다.
· 영문 비교시 대소문자를 구분하기 위해 아래와 같이 BINARY 키워드를 사용한다.( BINARY x = y 꼴 )
SELECT 'abc' = 'ABC'; -- 1 (TRUE)
SELECT BINARY 'abc' = 'ABC'; -- 0 (FALSE)
· > : x > y 꼴에서 x 값이 y 값을 초과하는가에 대한 여부를 반환한다.
· < : x < y 꼴에서 x 값이 y 값 미만인가에 대한 여부를 반환한다.
· >= : x >= y 꼴에서 x 값이 y 값 이상인가에 대한 여부를 반환한다.
· <= : x <= y 꼴에서 x 값이 y 값 이하인가에 대한 여부를 반환한다.
· != 혹은 <> : x != y 꼴 혹은 x <> y 꼴에서 x 값이 y 값과 다른가에 대한 여부를 반환한다.
- 논리 연산
· && 혹은 AND : x && y 꼴 혹은 x AND y 꼴에서 x 조건과 y 조건이 모두 참인가에 대한 여부를 반환한다.
· || 혹은 OR : x || y 꼴 혹은 x OR y 꼴에서 x 조건과 y 조건 중 하나라도 참인가에 대한 여부를 반환한다.
- 기타 연산
· IS NULL : x IS NULL 꼴에서 x 값이 NULL 인가의 여부를 반환한다.
· IS NOT NULL : x IS NOT NULL 꼴에서 x 값이 NULL 이 아닌가에 대한 여부를 반환한다.
· BETWEEN ... AND ... : x BETWEEN n AND x 꼴에서 x 의 값이 n 값 이상 x 값 이하인가에 대한 여부를 반환
한다. 당연히 x >= n && x <= x 랑 결과는 같음.
· NOT BETWEEN ... AND ... : x NOT BETWEEN n AND x 꼴에서 x 값이 n 미만 이거나 x 값 초과인가에
대한 여부를 반환한다.
· IN (,...) : x IN (v, ...) 꼴에서 값 x 가 한 개 이상의 값(들) v 중 일치하는 것이 있는가에 대한 여부를 반환한다.
SELECT 3 IN (1, 3, 5, 7, 9); -- 1(TRUE)
SELECT 4 IN (1, 3, 5, 7, 9); -- 0(FALSE)
· NOT IN (, ...) : x NOT IN (v, ...) 꼴에서 값 x 가 한 개 이상의 값(들) v 중 일치하는 것이 하나도 없는가에 대한 여부를 반환한다.
· LIKE ... : x LIKE y 꼴에서 값 x 가 한 개 이상의 값(들) v 중 일치하는가에 대한 여부를 반환한다.
- 패턴은 문자열로 작성한다.
- 패턴에서 퍼센트 기호(%)는 '아무거나'라는 뜻으로 사용된다.
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE '괌%'; -- 0(FALSE)
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE '%괌'; -- 0(FALSE)
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE '%괌%'; -- 1(TRUE)
SELECT '괌 여행 다녀왔어요' LIKE '%괌%'; -- 1(TRUE)
SELECT '괌' LIKE '%괌%'; -- 1(TRUE)
· NOT LIKE ... : LIKE 반대임.
함수
- NOW() 혹은 NOW(n) : 현재 일시를 반환하는 함수이다. n 값은 밀리초 길이이며 생략시 없는 것으로 한다. n의 최대 길이는 6이다.
- DATE_ADD(t, INTERVAL a i) : 일시값 t 에 i 주기의 a 만큼의 날짜 혹은 시간을 더한다.
· 주기
- SECOND : 초
- MINUTE : 분
- HOUR : 시
- DAY : 일
- WEEK : 주
- MONTH : 월
- QUARTER : 분기
- YEAR : 년
· 가령 현재 시간에서 1시간 미래의 시간을 선택하기 위해 아래와 같이 실행한다.
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR);
- DATE_SUB(t, INTERVAL a i) : 일시값 t 에 i 주기의 a 만큼 날짜 혹은 시간을 뺀다.(과거로 간다.)
· 주기는 위와 같다.
- IF(c, t, f) : 조건 c가 참이면 t를, 거짓이면 f를 반환한다.
SELECT IF(10 % 2 = 0, '짝수', '홀수');
- IFNULL(t, a) : 값 t가 NULL 이라면 a 를 반환하고, 그렇지 않다면 t를 반환한다. IF(t IS NULL, a, t)와 같다.
- CONCAT(s1, s2, s3, ... ) : 주어진 매개변수 s1, s2, s3, ...을 모두 이어 붙인다.
SELECT CONCAT(2022, '10', 04); -- '2022104'
SELECT CONCAT(2022, '10', '04'); -- '20221004'
- CONCAT_WS(s, v1, v2, v3, ...) : 주어진 매개변수 v1, v2, v3,...를 이어 붙이는데 사이사이에 s를 넣는다.
SELECT CONCAT_WS('/', '2022', '10', '04'); -- '2022/10/04'
- LEFT(s, l) : 주어진 문자열 s의 앞 l 자리 만큼의 문자열을 잘라 반환한다.
SELECT LEFT('Hello World', 5); -- 'Hello'
- RIGHT(s, l) : 주어진 문자열 s의 끝 l 자리 만큼의 문자열을 잘라 봔한한다.
SELECT RIGHT('Hello world', 5); -- 'world'
- LCASE(s) 혹은 LOWER(s) : 주어진 문자열 s를 모두 소문자화 하여 반환한다.
- UCASE(s) 혹은 UPPER(s) : 주어진 문자열 s를 모두 대문자화 하여 반환한다.
SELECT LOWER('Hello World'); -- 'hello world'
SELECT UPPER('Hello World'); -- 'HELLO WORLD'
- LTRIM(s) : 주어진 문자열 s에서 선행하는 공백을 모두 제거하여 반환한다.
SELECT LTRIM(' Hello'); -- 'hello'
- RTRIM(s) : 주어진 문자열 s에서 후행하는 공백을 모두 제거하여 반환한다.
SELECT RTRIM('Hello '); -- 'hello'
- TRIM(s) : 주어진 문자열 s에서 양쪽의 공백을 모두 제거하여 반환한다.
SELECT TRIM(' Hello '); -- 'hello'
- REPEAT(s, t) : 주어진 문자열 s를 t번 반복한다.
SELECT REPEAT('ha', 3); -- 'hahaha'
- REPLACE(s, f, t) : 주어진 문자열 s 에서 f 문자열을 모두 찾아 t 로 치환한다.
SELECT REPLACE('Hello World', 'Hello', 'Hi'); -- 'Hi world'
- REVERSE(s) : 주어진 문자열 s의 순서를 뒤집는다.
SELECT REVERSE('Hello'); -- 'olleH'
- SUBSTRING(s, f, l) : 주어진 문자열 's' 에서 'f' 번째 문자 부터 'l' 개의 문자열을 반환한다.
· 'f' 값은 1부터 시작함에 유의한다.
· 'l' 값은 까지의 의미를 가지는 문자열의 인덱스 번호가 아닌 'f'번 부터 선택할 문자열의 개수임에 유의한다.
SELECT SUBSTRING('Hello World', 7, 5); -- 'World'
- SPACE(n) : n번 만큼의 공백을 반환한다.
SELECT SPACE(3); -- ' '
- CHAR_LENGTH(s) : 주어진 문자열 s의 길이를 반환한다.
SELECT LENGTH('Hello'); -- 5
- ABS(n) : 주어진 숫자 n의 절댓값을 반환한다.
- ROUND(n) 혹은 ROUND(n, d) : 주어진 숫자 n에 대해 소수점 d 자리까지 반올림한다. d 생략시 정수부까지 반올림한다.
- TRUNCATE(n) 혹은 TRUNCATE(n, d) : 주어진 숫자 n에 대해 소수점 d 자리까지 버린다. d 생략시 소수부 전체를 버린다.
- CEIL(n) 혹은 CEILING(n) : 주어진 숫자 n 에 대해 소수부를 올림한다.
- FLOOR(n) : 주어진 숫자 n 에 대해 소수부를 버린다.
- POW(n, t) : 주어진 숫자 n의 t승을 구한다.
SELECT POW(2, 10); -- 1024
- SQRT(n) : 주어진 숫자 n의 제곱근을 구한다.
SELECT SQRT(16); -- 4
통계함수
- 통계함수 사용시 별도로 정해진 GROUP BY가 없을 경우 SELECT 될 모든 레코드가 통합됨으로 유의한다.
- AVG(c) : 주어진 열 c 에 대한 평균값을 구한다.
- MAX(c) : 주어진 열 c 에 대한 최대값을 구한다.
- MIN(c) : 주어진 열 c 에 대한 최소값을 구한다.
- SUM(c) : 주어진 열 c 에 대한 합을 구한다.
- COUNT(c) : 주어진 열 c 에 대한 개수를 구한다.
- STDDEV(c) : 주어진 열 c 에 대한 표준편차(Standard Deviation)를 구한다.
기타
- 서브 쿼리
- 윈도우 함수
- 사용자 함수
- 프로시저
- 'Hello' 를 이용하여 'Oh hell' 만들기
SELECT CONCAT(
UPPER(RIGHT('Hello', 1)),
LOWER(LEFT('Hello', 1)),
SPACE(1),
LEFT('Hello', 4)
);
-- Oh Hell
- `study`.`reviews` 테이블에서 다음과 같이 만들기
(★★★★★) 김갑*님 : 맛있읍니다.
(★★★★☆) 이말*님 : 호방한 맛
(★★★★☆) 풍월*님 : 풍또먹
(★☆☆☆☆) 신도*****님 : 탕수육 서비스 부탁드렸는데 안주셨네요
(★★★★☆) 박찬*님 : 제가 LA에 있었을 때 어쩌고 저쩌고
SELECT CONCAT('(', REPEAT('★',`rating`), REPEAT('☆',5-`rating`), ')',
SPACE(1), LEFT(`nickname`,2), REPEAT('*',CHAR_LENGTH(`nickname`)-2), '님 ', ': ', `text`) AS '리뷰'
FROM `study`.`reviews`;