Developer Factory

select 문의 비교 연산자 본문

Developer/DBMS

select 문의 비교 연산자

Jeremy.Park 2014. 6. 18. 19:49

select 문의 비교 연산자 


두 숫자 또는 두 문자를 비교하여 TRUE(1), FALSE(0), NULL로 그 결과를 출력한다. 
비교할 둘 중의 한쪽이 다를 경우, 다른 한쪽을 숫자나 문자로 자동으로 변환하여 비교한다. 
NULL을 포함하는 비교의 결과는 NULL이 출력되고, 
문자, 정수 등 모든 비교는 실수(real)로 취급하며, 
TIMESTAMP나 DATETIME와 상수가 비교될 때는 상수가 먼저 TIMESTAMP로 바뀐 후에 비교 된다.  

NULL이란 a missing unknown value를 의미하며, 경우에 따라서는 특별히 취급해야한다. NULL을 이해하기 위해서 비교연산자(=, <, < >)를 사용해 보기로 하자.
좀 어렵기 때문에 이제 IS NULL과 IS NOT NULL연산자를 사용하면 이해가 좀 될 것이다. 결과가 0 또는 NULL이면 이는 false이고 그렇지 않으면 true를 의미하기 때문이다. 그러므로 때로는 NULL이 not having a value를 의미하기도 한다.

 

= : 같다. 【예제】 mysql> SELECT 1=0, '0'=0, '0.0'=0, '0.01'=0, '.01'=0.01; +-----+-------+---------+----------+------------+ | 1=0 | '0'=0 | '0.0'=0 | '0.01'=0 | '.01'=0.01 | +-----+-------+---------+----------+------------+ | 0 | 1 | 1 | 0 | 1 | +-----+-------+---------+----------+------------+
<> 또는 != : 같지 않다. 【예제】 mysql> SELECT '.01' <> '0.01', .01 <> '0.01', 'zapp' <> 'zappp'; +-----------------+---------------+-------------------+ | '.01' <> '0.01' | .01 <> '0.01' | 'zapp' <> 'zappp' | +-----------------+---------------+-------------------+ | 1 | 0 | 1 | +-----------------+---------------+-------------------+
<= : 이하 【예제】 mysql> SELECT 0.1 <= 2; +----------+ | 0.1 <= 2 | +----------+ | 1 | +----------+
< : 미만 【예제】 mysql> SELECT 2 < 2; +-------+ | 2 < 2 | +-------+ | 0 | +-------+
>= : 이상 【예제】 mysql> SELECT 2 >= 2; +--------+ | 2 >= 2 | +--------+ | 1 | +--------+
> : 보다 큰 【예제】 mysql> SELECT 2 > 2; +-------+ | 2 > 2 | +-------+ | 0 | +-------+
<=> : Null-safe equal 【예제】 mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; +---------+---------------+------------+ | 1 <=> 1 | NULL <=> NULL | 1 <=> NULL | +---------+---------------+------------+ | 1 | 1 | 0 | +---------+---------------+------------+ mysql> select 3 <=> 3, null <=> null, 'a' <=> 'a', 5 <=> null; +---------+---------------+-------------+------------+ | 3 <=> 3 | null <=> null | 'a' <=> 'a' | 5 <=> null | +---------+---------------+-------------+------------+ | 1 | 1 | 1 | 0 | +---------+---------------+-------------+------------+ 1 row in set (0.00 sec) mysql>
IS NULL : NULL이다. 【예제】 mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL; +-----------+-----------+--------------+ | 1 IS NULL | 0 IS NULL | NULL IS NULL | +-----------+-----------+--------------+ | 0 | 0 | 1 | +-----------+-----------+--------------+
IS NOT NULL : NULL이 아니다. 【예제】 mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL; +---------------+---------------+------------------+ | 1 IS NOT NULL | 0 IS NOT NULL | NULL IS NOT NULL | +---------------+---------------+------------------+ | 1 | 1 | 0 | +---------------+---------------+------------------+ mysql> select 1 = null, 1 <> NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = null | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+ 1 row in set (0.00 sec) mysql> select 1 is null, 1 is not null; +-----------+---------------+ | 1 is null | 1 is not null | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ 1 row in set (0.00 sec) mysql> select 0 is null, 0 is not null, '' is null, '' is not null; +-----------+---------------+------------+----------------+ | 0 is null | 0 is not null | '' is null | '' is not null | +-----------+---------------+------------+----------------+ | 0 | 1 | 0 | 1 | +-----------+---------------+------------+----------------+ 1 row in set (0.00 sec)
expr BETWEEN min AND max : expr이 min과 max 사이 값이다. 【예제】 mysql> SELECT 1 BETWEEN 2 AND 3, 'b' BETWEEN 'a' AND 'c'; +-------------------+-------------------------+ | 1 BETWEEN 2 AND 3 | 'b' BETWEEN 'a' AND 'c' | +-------------------+-------------------------+ | 0 | 1 | +-------------------+-------------------------+
expr NOT BETWEEN min AND max : expr이 min과 max 사이의 값이 아니다. 【예제】 mysql> select 2 not between 3 and 6; +-----------------------+ | 2 not between 3 and 6 | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec) mysql> select 4 not between 3 and 6; +-----------------------+ | 4 not between 3 and 6 | +-----------------------+ | 0 | +-----------------------+ 1 row in set (0.00 sec) mysql>
expr IN (value, ...) : expr이 value 값중의 하나에 속하는 경우 【예제】 mysql> SELECT 2 IN (0,3,5,'wefwf'), 'wefwf' IN (0,3,5,'wefwf'); +----------------------+----------------------------+ | 2 IN (0,3,5,'wefwf') | 'wefwf' IN (0,3,5,'wefwf') | +----------------------+----------------------------+ | 0 | 1 | +----------------------+----------------------------+
expr NOT IN (value, ...) : expr이 value 값중의 하나에 속하지 않는 경우 【예제】 mysql> SELECT 2 NOT IN (0,3,5,'joe'); +------------------------+ | 2 NOT IN (0,3,5,'joe') | +------------------------+ | 1 | +------------------------+
ISNULL(expr) : expr이 NULL이면 true임 【예제】 mysql> SELECT ISNULL(1+1), ISNULL(1/0); +-------------+-------------+ | ISNULL(1+1) | ISNULL(1/0) | +-------------+-------------+ | 0 | 1 | +-------------+-------------+
COALESCE(list) : list중에서 NULL이 아닌 첫 번째 것을 출력 【예제】 mysql> SELECT COALESCE(NULL,3,2), COALESCE(NULL,NULL,NULL); +--------------------+--------------------------+ | COALESCE(NULL,3,2) | COALESCE(NULL,NULL,NULL) | +--------------------+--------------------------+ | 3 | NULL | +--------------------+--------------------------+
INTERVAL(N,N1,N2,N3,...) : N1 < N2 < N3,...인 조건에서 N이 N1과N2, N2와N3등
몇 번째 그룹에 속하는지 알림.
【예제】 
mysql> SELECT INTERVAL(23,1,15,17,30,44),INTERVAL(10,1,10,100); 
+----------------------------+-----------------------+ 
| INTERVAL(23,1,15,17,30,44) | INTERVAL(10,1,10,100) | 
+----------------------------+-----------------------+ 
|                          3 |                     2 | 
+----------------------------+-----------------------+ 
mysql> SELECT INTERVAL(22,23,30,44,200); 
+---------------------------+ 
| INTERVAL(22,23,30,44,200) | 
+---------------------------+ 
|                         0 | 
+---------------------------+ 
select와 where절에 쓰이는 함수