MariaDB / Tutorial / 연산자 / 비교 연산자
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을 반환합니다.
SELECT *, C_1 = 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 | 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을 반환합니다.
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 | +----+------+------+------------+---+
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 | +------+---------------+