본문 바로가기
MySQL

MySQL 연산자

by godfeeling 2020. 7. 2.

연산자(operator)

MySQL은 대부분의 프로그래밍 언어에서 지원하는 기본적인 연산자를 모두 제공합니다.

 

이러한 연산자를 사용하여 데이터를 추출하고 처리할 수 있습니다.

 

산술 연산자(arithmetic operator)

산술 연산자는 사칙연산을 다루는 가장 기본적이면서도 많이 사용하는 연산자입니다.

 

산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자입니다.

 

+ 왼쪽 피연산자에 오른쪽 피연산자를 더함.

- 왼쪽 피연산자에서 오른쪽 피연산자를 뺌.

* 왼쪽 피연산자에 오른쪽의 피연산자를 곱함.

/ 왼쪽 피연산자를 오른쪽 피연산자로 나눔.

DIV 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림.

%또는 MOD 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 나머지를 반환함.

 

연산자의 우선순위(operator precedence)

연산자의 우선순위는 수식 내에 여러 연산자가 함께 등장할 때, 어느 연산자가 먼저 처리될 것인가를 결정합니다.

 

MySQL에서 연산자의 우선순위는 다음과 같습니다.

 

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 = (대입 연산자), :=

 

대입 연산자(assignment operator)

대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자입니다.

= 왼쪽 피연산자에 오른쪽 피연산자를 대입함. (SET 문이나 UPDATE 문의 SET 절에서만 대입연산자로 사용됨)

:= 왼쪽 피연산자에 오른쪽 피연산자를 대입함.

 

MySQL에서 '=' 연산자는 두 가지 의미로 해석됩니다.

 

우선 SET 문이나 UPDATE 문의 SET 절에서 사용되면, 왼쪽 피연산자에 오른쪽 피연산자를 대입하는 대입 연산자로 해석됩니다.

 

SET 문이나 UPDATE 문의 SET 절 이외에서 사용되면, 왼쪽 피연산자와 오른쪽 피연산자를 비교하는 비교 연산자로 해석됩니다.

 

 

 

이처럼 '=' 연산자는 상황에 따라 다르게 해석될 수 있으므로, 작성자의 의도와는 다르게 해석될 여지가 있습니다.

 

따라서 MySQL에서는 언제나 대입 연산자로만 해석되는 두 번째 대입 연산자(:=)를 별도로 제공하고 있습니다.

 

첫 번째 대입 연산자(=)와 달리 두 번째 대입 연산자(:=)는 절대로 비교 연산자로 해석되지 않습니다.

 

비교 연산자(comparison operator)

비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, (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() 피연산자의 값이 인수로 전달받은 리스트에 존재하지 않으면 참을 반환함.

 

논리 연산자(logical operator)

논리 연산자는 논리식을 판단하여, (true)이면 1을 반환하고 거짓(false)이면 0을 반환합니다.

 

AND 논리식이 모두 참이면 참을 반환함.

&& 논리식이 모두 참이면 참을 반환함.

OR 논리식 중에서 하나라도 참이면 참을 반환함.

|| 논리식 중에서 하나라도 참이면 참을 반환함.

XOR 논리식이 서로 다르면 참을 반환함.

NOT 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함.

! 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함.

 

비트 연산자(bitwise operator)

비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행합니다.

 

또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용합니다.

 

& 대응되는 비트가 모두 1이면 1을 반환함. (AND 연산)

| 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (OR 연산)

^ 대응되는 비트가 서로 다르면 1을 반환함. (XOR 연산)

~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (NOT 연산)

<< 지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산)

>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)

 

흐름 제어

MySQL은 프로그램의 순차적인 흐름을 제어해야 할 때 사용할 수 있는 다양한 연산자와 함수를 제공합니다.

 

 

 

1. CASE

 

2. IF()

 

3. IFNULL()

 

4. NULLIF()

 

CASE

CASE 연산자는 값을 서로 비교하거나, 표현식의 논리값에 따라 다른 값을 반환합니다.

 

 

CASE 연산자의 문법은 다음과 같습니다.

 

문법

1. CASE value

 

WHEN [compare_value] THEN result

 

[WHEN [compare_value] THEN result] ...

 

[ELSE result]

 

END

 

2. CASE

 

WHEN [condition] THEN result

 

[WHEN [condition] THEN result] ...

 

[ELSE result]

 

END

 

 

 

첫 번째 CASE 문법에서는 valuecompare_value 값이 같으면, THEN 절의 result 값을 반환합니다.

 

만약 서로 값이 같지 않으면, ELSE 절의 result 값을 반환합니다.

 

이때 ELSE 절이 없으면, NULL을 반환합니다.

 

 

 

두 번째 CASE 문법에서는 condition의 논리값이 참이면, THEN 절의 result 값을 반환합니다.

 

만약 논리값이 거짓이라면, ELSE 절의 result 값을 반환합니다.

 

이때 ELSE 절이 없으면, NULL을 반환합니다.

 

IF()

IF() 함수는 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환합니다.

 

 

 

IF() 함수의 원형은 다음과 같습니다.

 

문법

IF(expr1, expr2, expr3)

 

 

 

만약 expr1이 참이면 expr2를 반환하고, 거짓이면 expr3를 반환합니다.

 

IFNULL()

IFNULL() 함수는 첫 번째 인수로 전달받은 값이 NULL인지 아닌지를 검사하여 다른 값을 반환합니다.

 

 

 

IFNULL() 함수의 원형은 다음과 같습니다.

 

문법

IFNULL(expr1, expr2)

 

 

 

만약 expr1의 값이 NULL이 아니면 expr1 그 자체를 반환하고, NULL이면 expr2를 반환합니다.

 

NULLIF()

NULLIF() 함수는 인수로 전달받은 두 값이 서로 같은지를 검사하여 다른 값을 반환합니다.

 

 

 

NULLIF() 함수의 원형은 다음과 같습니다.

 

문법

NULLIF(expr1, expr2)

 

 

 

만약 expr1expr2의 값이 서로 같으면 NULL을 반환하고, 같지 않으면 expr1을 반환합니다.

 

 

 

따라서 NULLIF() 함수는 다음 예제의 CASE 문과 같은 동작을 수행합니다.

 

패턴 매칭(pattern matching)

MySQL은 데이터의 특정 패턴을 검색하기 위한 다음과 같은 패턴 매칭 연산자를 제공합니다.

 

 

 

1. LIKE

 

2. REGEXP

 

 

 

또한, 임의의 문자나 문자열을 대체하기 위해서 와일드카드(wildcard) 문자를 사용할 수도 있습니다.

 

LIKE

LIKE 연산자는 특정 패턴을 포함하는 데이터만을 검색하기 위해 사용합니다.

와일드카드(wildcard)

와일드카드(wildcard)란 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호를 의미합니다.

 

 

 

MySQL에서 사용할 수 있는 와일드카드 문자는 다음과 같습니다.

% 0개 이상의 문자를 대체함.

_ 1개의 문자를 대체함.

 

REGEXP

LIKE 연산자보다 더욱 복잡한 패턴을 검색하고 싶을 때는 REGEXP 연산자를 사용할 수 있습니다.

 

REGEXP 연산자는 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공합니다.

 

 

 

REGEXP 연산자와 함께 사용할 수 있는 패턴은 다음과 같습니다.

. 줄 바꿈 문자(\n)를 제외한 임의의 한 문자를 의미함.

* 해당 문자 패턴이 0번 이상 반복됨.

+ 해당 문자 패턴이 1번 이상 반복됨.

^ 문자열의 처음을 의미함.

$ 문자열의 끝을 의미함.

| 선택을 의미함.(OR)

[...] 괄호([]) 안에 있는 어떠한 문자를 의미함.

[^...] 괄호([]) 안에 있지 않은 어떠한 문자를 의미함.

{n} 반복되는 횟수를 지정함.

{m,n} 반복되는 횟수의 최솟값과 최댓값을 지정함.

 

타입 변환(type casting)

MySQL은 비교나 검색을 수행할 때 데이터의 타입이 서로 다를 경우, 내부적으로 타입이 같아지도록 자동 변환하여 처리합니다.

 

하지만 사용자가 명시적으로 타입을 변환할 수 있도록 다양한 연산자와 함수도 같이 제공하고 있습니다.

 

 

 

1. BINARY

 

2. CAST()

 

3. CONVERT()

 

BINARY

BINARY 연산자는 뒤에 오는 문자열을 바이너리 문자열로 변환합니다.

 

BINARY 연산자를 이용하면 문자가 아닌 바이트를 기준으로 하여 비교나 검색 작업을 수행할 수 있습니다.

 

 

 

다음 예제는 BINARY 연산자를 이용하여 문자 'a''A'를 비교하는 예제입니다.

 

예제

 

 

SELECT BINARY 'a' = 'A',

 

'a' = 'A';

위의 예제처럼 BINARY 연산자를 이용하면, 비교하려는 문자의 바이트 값을 비교합니다.

 

따라서 문자 'a''A'가 서로 다른 값으로 인식됩니다.

 

CAST()

CAST() 함수는 인수로 전달받은 값을 명시된 타입으로 변환하여 반환합니다.

 

이때 변환하고자 하는 타입을 AS 절을 이용하여 직접 명시할 수 있습니다.

 

문법

CAST(expr AS type)

 

 

 

AS 절에서 사용할 수 있는 타입은 다음과 같습니다.

 

 

 

1. BINARY

 

2. CHAR

 

3. DATE

 

4. DATETIME

 

5. TIME

 

6. DECIMAL

 

7. JSON (MySQL 5.7.8부터 제공됨)

 

8. NCHAR

 

9. SIGNED [INTEGER]

 

10. UNSIGNED [INTEGER]

 

 

 

다음 예제는 CAST() 함수를 이용하여 문자열 데이터를 UNSIGNED 타입으로 변환하는 예제입니다.

 

예제

 

 

SELECT 4 / '2',

 

4 / 2,

 

4 / CAST('2' AS UNSIGNED);

 

 

위의 예제에서 문자열 타입의 데이터를 묵시적으로 타입 변환하여 수행한 나눗셈 연산의 결과는 정수 타입으로 반환됩니다.

 

하지만 정수 타입끼리 나눗셈 연산을 한 결과는 실수 타입으로 반환됩니다.

 

따라서 문자열 타입의 데이터를 CAST() 함수를 사용하여, 명시적으로 타입 변환해야만 올바른 나눗셈 연산 결과를 얻을 수 있습니다.

 

CONVERT()

CONVERT() 함수도 CAST() 함수처럼 인수로 전달받은 값을 명시된 타입으로 변환하여 반환합니다.

 

CONVERT() 함수는 두 번째 인수로 변환하고자 하는 타입을 직접 전달할 수 있습니다.

 

문법

1. CONVERT(expr, type)

2. CONVERT(expr USING transcoding_name)

 

 

 

USING 절은 서로 다른 문자셋(character set) 간의 데이터 변환을 위해 사용됩니다.

 

이때 사용할 수 있는 타입은 CAST() 함수와 같습니다.

 

 

 

다음 예제는 CONVERT() 함수를 이용하여 문자열 데이터의 문자셋을 UTF-8로 변환하는 예제입니다.

 

예제

 

 

SELECT CONVERT('abc' USING utf8);

 

 

 

'MySQL' 카테고리의 다른 글

MySQL 연산  (0) 2020.07.02
MySQL 제약조건  (0) 2020.07.02
MySQL 타입  (0) 2020.07.02
MySQL 문법  (0) 2020.07.02
MySQL 기초  (0) 2020.07.02

댓글