MariaDB / 연산자 / 비교 연산자

MariaDB의 비교 연산자에 대하여 알아보겠습니다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_1이라는 테이블입니다. 각 열의 데이터 형식은 다음과 같습니다.

  • C_1 : 정수
  • C_2 : 문자
  • C_3 : 날짜
+----+------+------+------------+
| ID | C_1  | C_2  | C_3        |
+----+------+------+------------+
|  1 |    1 | A    | 2022-01-01 |
|  2 |    2 | B    | 2022-01-02 |
|  3 |    3 | C    | 2022-01-03 |
|  4 | NULL | A    | 2022-01-04 |
|  5 | NULL | NULL | 2022-01-05 |
|  6 |    1 | NULL | NULL       |
|  7 |    2 | B    | 2022-01-07 |
|  8 |    3 | C    | 2022-01-08 |
+----+------+------+------------+

같다

같은 것을 찾을 때는 =를 사용합니다. 데이터 형식이 숫자인 경우 따옴표를 해도 되고 안 해도 되나, 문자인 경우 따옴표를 해야 합니다.

  • C_1의 값이 3이면 1을 반환합니다.
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    0 |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+
  • C_2의 값이 A이면 1을 반환합니다.
SELECT
  *,
  C_2 = 'A' AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    1 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    0 |
|  4 | NULL | A    | 2022-01-04 |    1 |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    0 |
+----+------+------+------------+------+

같지 않다

같지 않을 것을 찾을 때는 != 또는 <>를 사용합니다.

  • C_2의 값이 존재하고 A가 아니면 1을 반환합니다.
SELECT
  *,
  C_2 != 'A' AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 |    0 |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+

크다 / 작다 / 크거나 같다 / 작거나 같다

크다는 >, 작다는 <, 크거나 같다는 >=, 작거나 같다는 <=를 사용합니다.

  • C_1의 값이 존재하고 2보다 크면 1을 반환합니다.
SELECT
  *,
  C_1 > 2 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    0 |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+
  • C_1의 값이 존재하고 2보다 크거나 같으면 1을 반환합니다.
SELECT
  *,
  C_1 >= 2 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    0 |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+
  • C_1의 값이 존재하고 2보다 작으면 1을 반환합니다.
SELECT
  *,
  C_1 < 2 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    1 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    0 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    1 |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    0 |
+----+------+------+------------+------+
  • C_1의 값이 존재하고 2보다 작거나 같으면 1을 반환합니다.
SELECT
  *,
  C_1 <= 2 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    1 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    0 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    1 |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    0 |
+----+------+------+------------+------+
  • 데이터 형식이 문자인 경우 알파벳순으로 대소를 비교합니다.
SELECT
  *,
  C_2 >= 'B' AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 |    0 |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+
  • 데이터 형식이 날짜인 경우 날짜순으로 대소를 비교합니다.
SELECT
  *,
  C_3 >= '2022-01-03' AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 |    1 |
|  5 | NULL | NULL | 2022-01-05 |    1 |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+

BETWEEN / NOT BETWEEN

BETWEEN A AND B라 하면 A 이상 B 이하의 데이터를 추출합니다.

  • C_1의 값이 존재하고 2 이상 3 이하이면 1을 반환합니다.
SELECT
  *,
  C_1 BETWEEN 2 AND 3 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    0 |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+

NOT BETWEEN A AND B라 하면 A 이상 B 이하가 아닌 데이터를 추출합니다.

  • C_1의 값이 존재하고 2 이상 3 이하가 아니면 1을 반환합니다.
SELECT
  *,
  C_1 NOT BETWEEN 2 AND 3 AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    1 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    0 |
|  4 | NULL | A    | 2022-01-04 | NULL |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       |    1 |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    0 |
+----+------+------+------------+------+

COALESCE

  • 목록 안의 값 중 NULL이 아닌 첫 번째 값을 출력합니다. 모든 값이 NULL이면 NULL을 출력합니다.
SELECT
  C_2,
  C_3,
COALESCE( C_2, C_3 ) AS R
FROM T_1
;
+------+------------+------------+
| C_2  | C_3        | R          |
+------+------------+------------+
| A    | 2022-01-01 | A          |
| B    | 2022-01-02 | B          |
| C    | 2022-01-03 | C          |
| A    | 2022-01-04 | A          |
| NULL | 2022-01-05 | 2022-01-05 |
| NULL | NULL       | NULL       |
| B    | 2022-01-07 | B          |
| C    | 2022-01-08 | C          |
+------+------------+------------+

GREATEST / LEAST

  • GREATEST는 목록에서 가장 큰 값을 선택합니다.
SELECT GREATEST( 1, 2, 3, 4, 5 );
+---------------------------+
| GREATEST( 1, 2, 3, 4, 5 ) |
+---------------------------+
|                         5 |
+---------------------------+
  • 데이터가 문자인 경우 알파벳순으로 크기를 따집니다.
SELECT GREATEST( 'A', 'B', 'C' );
+---------------------------+
| GREATEST( 'A', 'B', 'C' ) |
+---------------------------+
| C                         |
+---------------------------+
  • LEAST는 목록에서 가장 작은 값을 선택합니다.
SELECT LEAST( 1, 2, 3, 4, 5 );
+------------------------+
| LEAST( 1, 2, 3, 4, 5 ) |
+------------------------+
|                      1 |
+------------------------+
  • 데이터가 문자인 경우 알파벳순으로 크기를 따집니다.
SELECT LEAST( 'A', 'B', 'C' );
+------------------------+
| LEAST( 'A', 'B', 'C' ) |
+------------------------+
| A                      |
+------------------------+

IN / NOT IN

IN을 사용하면 여러 값 중 하나에 해당하는 데이터를 추출할 수 있습니다.

  • C_2의 값이 A 또는 C이면 1을 반환합니다.
123
SELECT
  *,
  C_2 IN ( 'A', 'C' ) AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    1 |
|  2 |    2 | B    | 2022-01-02 |    0 |
|  3 |    3 | C    | 2022-01-03 |    1 |
|  4 | NULL | A    | 2022-01-04 |    1 |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    0 |
|  8 |    3 | C    | 2022-01-08 |    1 |
+----+------+------+------------+------+

NOT IN을 사용하면 여러 값에 해당하지 않는 데이터를 추출할 수 있습니다.

  • C_2의 값이 존재하고 A가 아니고 C가 아니면 1을 반환합니다.
SELECT
  *,
  C_2 NOT IN ( 'A', 'C' ) AS R
FROM T_1
;
+----+------+------+------------+------+
| ID | C_1  | C_2  | C_3        | R    |
+----+------+------+------------+------+
|  1 |    1 | A    | 2022-01-01 |    0 |
|  2 |    2 | B    | 2022-01-02 |    1 |
|  3 |    3 | C    | 2022-01-03 |    0 |
|  4 | NULL | A    | 2022-01-04 |    0 |
|  5 | NULL | NULL | 2022-01-05 | NULL |
|  6 |    1 | NULL | NULL       | NULL |
|  7 |    2 | B    | 2022-01-07 |    1 |
|  8 |    3 | C    | 2022-01-08 |    0 |
+----+------+------+------------+------+

INTERVAL

 

IS / IS NOT

 

IS NULL / IS NOT NULL

IS NULL로 값이 NULL인지 확인할 수 있습니다.

  • C_1의 값이 NULL이면 1을 반환합니다.
SELECT
  *,
  C_1 IS NULL AS R
FROM T_1
;
+----+------+------+------------+---+
| ID | C_1  | C_2  | C_3        | R |
+----+------+------+------------+---+
|  1 |    1 | A    | 2022-01-01 | 0 |
|  2 |    2 | B    | 2022-01-02 | 0 |
|  3 |    3 | C    | 2022-01-03 | 0 |
|  4 | NULL | A    | 2022-01-04 | 1 |
|  5 | NULL | NULL | 2022-01-05 | 1 |
|  6 |    1 | NULL | NULL       | 0 |
|  7 |    2 | B    | 2022-01-07 | 0 |
|  8 |    3 | C    | 2022-01-08 | 0 |
+----+------+------+------------+---+

IS NOT NULL로 값이 NULL이 아닌지 확인할 수 있습니다.

  • C_1의 값이 NULL이 아니면 1을 반환한다.
SELECT
  *,
  C_1 IS NOT NULL AS R
FROM T_1
;
+----+------+------+------------+---+
| ID | C_1  | C_2  | C_3        | R |
+----+------+------+------------+---+
|  1 |    1 | A    | 2022-01-01 | 1 |
|  2 |    2 | B    | 2022-01-02 | 1 |
|  3 |    3 | C    | 2022-01-03 | 1 |
|  4 | NULL | A    | 2022-01-04 | 0 |
|  5 | NULL | NULL | 2022-01-05 | 0 |
|  6 |    1 | NULL | NULL       | 1 |
|  7 |    2 | B    | 2022-01-07 | 1 |
|  8 |    3 | C    | 2022-01-08 | 1 |
+----+------+------+------------+---+

= ''일 때 null은 제외됩니다. != ''일 때도 null은 제외됩니다.

ISNULL

ISNULL은 값이 NULL이면 1을, NULL이 아니면 0을 반환합니다.

SELECT
  C_1,
  ISNULL( C_1 ) 
FROM T_1
;
+------+---------------+
| C_1  | ISNULL( C_1 ) |
+------+---------------+
|    1 |             0 |
|    2 |             0 |
|    3 |             0 |
| NULL |             1 |
| NULL |             1 |
|    1 |             0 |
|    2 |             0 |
|    3 |             0 |
+------+---------------+