http://www.tcpschool.com/mysql/mysql_operator_arithmetic
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
연산자
연산자의 우선순위
수식 안에서 여러 연산자를 사용할 때, 어느 연산자 먼저 처리되느냐를 정리한 표이다.
TCPSchool에서도 외우지 말고 필요할 때 참조하라고 하니 나중을 위해 정리해두겠다
우선순위 | 연산자 |
1 | INTERVAL |
2 | BINARY, COLLATE |
3 | ! |
4 | - (단항 연산자), ~ (비트 연산자) |
5 | ^ |
6 | *, /, DIV, %, MOD |
7 | - (이항 연산자), + |
8 | <<, >> |
9 | & |
10 | | |
11 | = (관계 연산자), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN |
12 | BETWEEN, CASE, WHEN, THEN, ELSE |
13 | NOT |
14 | AND, && |
15 | XOR |
16 | OR, || |
17 | = (대입 연산자), := |
산술 연산자
기초 수학을 배웠다면 당연히 알아야하는 가장 기본적이면서 많이 사용하는 연산자이다.
산술 연산자 | 설명 |
+ | 왼쪽 피연산자에 오른쪽 피연산자를 더함 |
- | 왼쪽 피연산자에서 오른쪽 피연산자를 뺌 |
* | 왼쪽 피연산자에 오른쪽의 피연산자를 곱함 |
/ | 왼쪽 피연산자를 오른쪽 피연산자로 나눔 |
DIV | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림 |
%또는 MOD | 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 나머지를 반환함 |
비교 연산자
이름에서 알 수 있듯이 연산자 양 옆의 값을 비교하는 데에 사용하는 연산자이다.
참(true)이면 1을 반환하고 거짓(false)이면 0을 반환한다.
비교 | 연산자설명 |
= | 왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환함 |
!=, <> | 왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환함 |
< | 왼쪽 피연산자가 오른쪽 피연산자보다 작으면 참을 반환함 |
<= | 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 참을 반환함 |
> | 왼쪽 피연산자가 오른쪽 피연산자보다 크면 참을 반환함 |
>= | 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참을 반환함 |
<=> | 양쪽의 피연산자가 모두 NULL이면 참을 반환하고, 하나의 피연산자만 NULL이면 거짓을 반환함 |
IS | 왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환함 (오른쪽 피연산자가 불리언 값인 TRUE, FALSE, UNKNOWN 값일 때 사용함) |
IS NOT | 왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환함 (오른쪽 피연산자가 불리언 값인 TRUE, FALSE, UNKNOWN 값일 때 사용함) |
IS NULL | 피연산자의 값이 NULL이면 참을 반환함 |
IS NOT NULL | 피연산자의 값이 NULL이 아니면 참을 반환함 |
BETWEEN min AND max | 피연산자의 값이 min 값보다 크거나 같고, max 값보다 작거나 같으면 참을 반환함 |
NOT BETWEEN min AND max | 피연산자의 값이 min 값보다 작거나 max 크면 참을 반환함 |
IN() | 피연산자의 값이 인수로 전달받은 리스트에 존재하면 참을 반환함 |
NOT IN() | 피연산자의 값이 인수로 전달받은 리스트에 존재하지 않으면 참을 반환함 |
나름 직관적으로 되어있어서 알고 사용하기 쉬운 것 같다.
대입 연산자
변수에 대입할 때 사용하는 연산자이다.
대입 | 연산자설명 |
= | 왼쪽 피연산자에 오른쪽 피연산자를 대입함. (SET문이나 UPDATE문의 SET절에서만 대입연산자로 사용됨) |
:= | 왼쪽 피연산자에 오른쪽 피연산자를 대입함. |
그런데 =
는 비교 연산자 아닌가?!
표에 적혀있듯이 대입 연산자 =
는 SET문이나 UPDATE문의 SET절에서만 대입 연산자로 해석된다.
예를 들어
UPDATE user
SET name = '븨나네'
WHERE id = 10;
위와 같은 쿼리에서 SET절에 있는 name = '븨나네'의 =
는 대입 연산자이고,
WHERE절에 있는 id = 10의 =
는 비교 연산자이다.
이렇게 헷갈리는 경우를 위해 MySQL에서는 절대로 비교 연산자로 해석되지 않는 :=
연산자를 제공한다.
논리 연산자
논리 연산자는 논리식을 판단하는 연산자로 비교 연산자와 마찬가지로 참(true)이면 1을 반환하고 거짓(false)이면 0을 반환한다.
논리 연산자 | 설명 |
AND | 논리식이 모두 참이면 참을 반환함. |
&& | 논리식이 모두 참이면 참을 반환함. |
OR | 논리식 중에서 하나라도 참이면 참을 반환함. |
|| | 논리식 중에서 하나라도 참이면 참을 반환함. |
XOR | 논리식이 서로 다르면 참을 반환함. |
NOT | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. |
! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. |
이미 익숙한 연산자이므로 간단하게 넘어가자.
함수: 흐름제어
다른 언어의 제어문과 비슷한 역할을 하는 함수이다.
MySQL에서 제공하는 제어문은 다음과 같다
- CASE
- IF()
- IFNULL()
- NULLIF()
CASE
CASE는 값을 서로 비교하거나, 논리식으로 값을 도출할 때 사용한다
// 1.
CASE value
WHEN conpare_value THEN result
WHEN conpare_value2 THEN result2
...
ELSE result
END;
// 2.
CASE
WHEN condition THEN result
WHEN condition2 THEN result2
ELSE result
END
첫번째 CASE문에서는 value와 compare_value가 같으면 THEN절의 result값을 반환하고, 서로 같지 않으면 ELSE절의 result값을 반환한다.
이때, ELSE절이 없으면 NULL을 반환한다.
두번째 CASE문에서는 condition의 논리값이 참이면 THEN절의 result값을 반환하고, 거짓이면 ELSE문의 result를 반환한다.
마찬가지로 ELSE절이 없으면 NULL을 반환한다.
예를 들어
SELECT CASE 0
WHEN 0 THEN 'zero'
WHEN 1 THEN 'one'
ELSE 'more'
END;
위 쿼리에서 결과값은 zero이다.
IF()
IF() 함수는 첫번째로 전달반은 표현식의 논리값에 따라 다른 값을 반환한다.
IF(표현식, 참일때, 거짓일때)
예를 들어
SELECT IF(0 < 1, 'yes', 'no');
위 쿼리에서 표현식이 참이기 때문에 yes를 반환한다.
IFNULL()
IFNULL()은 null인지 검사하는 함수로, 첫번째 인수로 전달받은 값이 NULL인지 아닌지를 판별한다.
값이 NULL이면 그 자체를 반환하고, NULL이면 두번째 인자를 반환한다.
IFNULL(값 , NULL일 때 반환할 값);
예를 들어
SELECT IFNULL(NULL, '전달받은 값이 null입니다')
위의 쿼리에서 값이 NULL이므로 '전달받은 값이 null입니다'를 반환한다.
SELECT IFNULL(1, '전달받은 값이 null입니다');
이 쿼리에서는 값이 null이 아니므로 그 자체인 1을 반환한다.
NULLIF()
NULLIF() 함수는 두 값이 서로 같은지를 검사하여 null 또는 값을 반환한다.
NULLIF(값1, 값2)
만약 값1과 값2가 서로 같으면 null을 반환하고, 같지 않으면 값1을 반환한다.
예를 들어
SELECT NULLIF(3, 3);
위 쿼리에서 값1인 3과 값2인 3은 같으므로 null을 반환한다.
함수: 패턴매칭
MySQL에서 제공하는 특정 패턴을 검색하기 위한 패턴 매칭 연산자에는 다음과 같다
- LIKE
- REGEXP
또, 패턴 매칭 연산자에는 임의의 문자나 문자열을 대체하기 위해서 와일드카드(wildecard)문자를 사용할 수 있다.
와일드카드(wildcard)
와일드카드란 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호를 의미한다.
MySQL에서 사용할 수 있는 와일드카드 문자는 다음과 같다.
와일드카드 | 설명 |
% | 0개 이상의 문자를 대체함. |
_(언더바) | 1개의 문자를 대체함. |
LIKE
LIKE연산자는 특정 패턴을 포함하는 데이터만을 검색하기 위해 사용한다.
예를 들어 user테이블에서 '테'로 시작하는 이름(name)을 검색해보자
SELECT * FROM user
WHERE name LIKE '테%';
결과와 같이 이름이 '테'로 시작하는 데이터들이 조회되었다.
만약 특정 패턴을 포함하지 않는 데이터를 검색하고 싶을 때는 NOT LIKE 연산자를 사용하면 된다.
성공!
타입변환
CAST(), CONVERT()
CAST()와 CONVSERT() 함수는 인수로 전달받은 값을 명시된 타입으로 변환하고자 할 때 사용한다.
둘의 차이점은 사용하는 방식인데, 각각의 문법을 보자
CAST(데이터 AS 타입)
CONVERT(데이터, 타입)
or
CONVERT(데이터 USING 타입)
AS를 사용하냐 ,
를 사용하냐의 차이가 존재할 뿐 크게 다르지 않다고 한다!
+
둘의 차이가 존재하기는 한다..!!
다음 글을 참고하자
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=ohnewcokr&logNo=221207683859
MySQL / MariaDB에서의 CAST와 CONVERT함수 확인.
MySQL / MariaDB에서 형변환을 지원하는 CAST / CONVERT함수에 대해서 간략히 정리. 표...
blog.naver.com
형변환을 할 수 있는 타입은 다음과 같다.
- BINARY
- CHAR
- DATE
- DATETIME
- TIME
- DECIMAL
- JSON (MySQL 5.7.8부터 제공됨)
- NCHAR
- SIGNED [INTEGER]
- UNSIGNED [INTEGER]
몇가지 예제를 함께 봐야 이해가 편할 것 같다.
현재 시간을 SIGNED타입으로 변환
SELECT CAST(NOW() AS SIGNED);
> 20220301200736
SELECT CONVERT(NOW(), SIGNED);
> 20220301200900
숫자를 날짜 타입으로 변환
SELECT CAST(20220301 AS DATE);
> 2022-03-01
SELECT CONVERT(20220301, DATE);
> 2022-03-01
음. 굉장히 유용할 것 같은 문법이다.
데이터를 검색하거나 등록하는 경우에 컬럼에 맞는 타입으로 지정하지 않으면 원하는 결과를 얻지 못하는 경우가 생기도 하고 가져온 데이터를 가공할 때 데이터 타입에 따라 결과가 달라지는 경우도 있다고 하니 잘 숙지해두자.
'Study > Database' 카테고리의 다른 글
[MySQL] 다중 테이블 연산: JOIN, UNION, 서브쿼리 (0) | 2022.03.03 |
---|---|
[MySQL] 제약 조건 (0) | 2022.03.02 |
[MySQL] 타입: 숫자, 문자열, 날짜와 시간 (0) | 2022.03.01 |
[MySQL] MySQL문법: 2 (0) | 2022.02.27 |
[MySQL] MySQL 문법: 1 (0) | 2022.02.20 |