MySQL比较运算符使用详解及注意事项

来自:网络
时间:2024-03-30
阅读:

一、常用的比较运算符

MySQL提供了一系列的比较运算符,用于比较两个表达式的值。比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。 下面是常用的比较运算符及其说明:

  • 等于运算符(=):用于判断两个表达式的值是否相等。
  • 不等于运算符(<>或!=):用于判断两个表达式的值是否不相等。
  • 大于运算符(>):用于判断一个表达式的值是否大于另一个表达式的值。
  • 小于运算符(<):用于判断一个表达式的值是否小于另一个表达式的值。
  • 大于等于运算符(>=):用于判断一个表达式的值是否大于或等于另一个表达式的值。
  • 小于等于运算符(<=):用于判断一个表达式的值是否小于或等于另一个表达式的值。
  • 安全等于运算符(<=>): 用于对NULL进行判断,与等于运算符(=)作用相似。

MySQL比较运算符使用详解及注意事项

二、比较运算符的使用方法

比较运算符可以用于各种查询条件和筛选操作,以及在WHERE子句中进行条件过滤。下面是一些使用比较运算符的示例:

2.1 等于运算符(=)

等于运算符用于判断判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。

下面是一些使用等于运算符(=)的示例:

SELECT * FROM users WHERE age = 25;
SELECT 10 = 10;  -- 返回结果为1
SELECT 10 = 0;   -- 返回结果为0
SELECT NULL = NULL;   -- 返回结果为NULL
SELECT ''=> NULL;   -- 返回结果为NULL

在使用等号运算符时,遵循如下规则:

1、如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
2、如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
3、如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
4、如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。

2.2 不等于运算符(<>或!=)

不等于运算符用于用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。

如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL

SELECT 10 <> 10;  -- 返回结果为0
SELECT 10 != 20;  -- 返回结果为1
SELECT 'a' != 'b';  -- 返回结果为1
SELECT'a' != NULL; -- 返回结果为 NULL
SELECT NULL <> NULL;   -- 返回结果为NULL

2.3 大于运算符(>)

大于运算符用于判断一个表达式的值是否大于另一个表达式的值。

如果为真则返回1,否则返回0。

如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL

SELECT 10 > 10;  -- 返回结果为0
SELECT 20 > 10;  -- 返回结果为1
SELECT 'a' > 'b';  -- 返回结果为0
SELECT 'a' < 'b';  -- 返回结果为1
SELECT'a' > NULL; -- 返回结果为 NULL
SELECT NULL > NULL;   -- 返回结果为NULL

2.4 小于运算符(<)

小于运算符用于判断一个表达式的值是否小于另一个表达式的值。

如果为真则返回1,否则返回0。

如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL

SELECT 10 < 20;  -- 返回结果为1
SELECT 20 < 10;  -- 返回结果为0
SELECT 'a' < 'b';  -- 返回结果为1
SELECT'a' < NULL; -- 返回结果为 NULL
SELECT NULL < NULL;   -- 返回结果为NULL

2.5 大于等于运算符(>=)

大于等于运算符用于判断一个表达式的值是否大于或等于另一个表达式的值。

如果为真则返回1,否则返回0。

如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL

SELECT 10 >= 20;  -- 返回结果为0
SELECT 20 >= 10;  -- 返回结果为1
SELECT 'a' >= 'b';  -- 返回结果为0
SELECT'a' >= NULL; -- 返回结果为 NULL
SELECT NULL >= NULL;   -- 返回结果为NULL

2.6 小于等于运算符(<=)

小于等于运算符用于判断一个表达式的值是否小于或等于另一个表达式的值。

如果为真则返回1,否则返回0。

如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL

SELECT 10 <= 20;  -- 返回结果为1
SELECT 20 <= 10;  -- 返回结果为0
SELECT 'a' <= 'b';  -- 返回结果为1
SELECT'a' <= NULL; -- 返回结果为 NULL
SELECT NULL <= NULL;   -- 返回结果为NULL

2.7 安全等于运算符(<=>)

安全等于运算符(<=>)与等于运算符(=)作用相似,区别在于 <=> 可以对NULL进行判断。

安全等于运算符(<=>)通常用于在排序和比较操作中,特别是在处理NULL值时非常有用。它可以帮助我们准确地比较包含NULL值的表达式。

下面是一些使用安全等于运算符(<=>)的示例:

SELECT 10 <=> 10;  -- 返回结果为1
SELECT 5 <=> 10;   -- 返回结果为0
SELECT 10 <=> 5;    -- 返回结果为0
SELECT NULL <=> NULL;   -- 返回结果为1,L,其他返回结果与等于运算符相同。
SELECT 10 <=> NULL;   -- 返回结果为0,而不是NULL

需要注意的是,安全等于运算符(<=>)只能用于比较两个表达式的值,不能用于比较列和表达式之间的关系。如果需要比较列和表达式之间的关系,应使用其他比较运算符,如等于运算符(=)、大于运算符(>)等。

三、非符号类型的运算符

3.1 空运算符(IS NULL或者ISNULL)

用于判断一个值是否为NULL,如果为NULL则返回1,否则返回0。

示例如下:

SELECT NULL IS NULL;  -- 返回结果为1
SELECT ISNULL(NULL);  -- 返回结果为1
SELECT ISNULL('a');  -- 返回结果为0
SELECT 10 IS NULL;   -- 0

查询用户名为NULL的四种sql写法:

SELECT * FROM users WHERE username IS NULL;
SELECT * FROM users WHERE ISNULL(username);
SELECT * FROM users WHERE username <=> NULL;
SELECT * FROM users WHERE username = NULL;

3.2 非空运算符 (IS NOT NULL)

用于判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。

示例如下:

SELECT NULL IS NOT NULL;  -- 返回结果为0
SELECT 10 IS NOT NULL;   --  返回结果为1

查询用户名为不为NULL的三种sql写法:

SELECT * FROM users WHERE username IS NOT NULL;
SELECT * FROM users WHERE NOT username <=> NULL;
SELECT * FROM users WHERE  NOT ISNULL(username );

3.3 最小值运算符 LEAST()

语法格式为:

LEAST(值1,值2,...,值n)。

其中,“值n”表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值。

 SELECT LEAST (10,0,20); -- 返回结果为0
 SELECTLEAST('b','a','c'); -- 返回结果为a
 SELECT LEAST(10,NULL,20); -- 返回结果为NULL

当参数是整数或者浮点数时,LEAST将返回其中最小的值;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL。

3.4 最大值运算符 GREATEST()

语法格式为:

GREATEST(值1,值2,...,值n)。

其中,n表示参数列表中有n个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。

 SELECT GREATEST (10,0,20); -- 返回结果为20
 SELECT GREATEST('b','a','c'); -- 返回结果为c
 SELECT GREATEST(10,NULL,20);  -- 返回结果为NULL

当参数中是整数或者浮点数时,GREATEST将返回其中最大的值;当参数为字符串时,返回字母表中顺序最靠后的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL。

3.5 BETWEEN AND运算符

BETWEEN AND运算符使用的格式通常为:

SELECT * FROM TABLE WHERE C BETWEEN A AND B

此时,当C大于或等于A,并且C小于或等于B时,结果为1,否则结果为0。

SELECT 1 BETWEEN 0 AND 1; -- 返回结果为1
SELECT 10 BETWEEN 11 AND 12; -- 返回结果为0
SELECT 'b' BETWEEN 'a' AND 'c'; -- 返回结果为1

3.6 IN运算符

IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。

SELECT 'a' IN ('a','b','c');  -- 返回结果为1
SELECT 1 IN (2,3);  -- 返回结果为0
SELECT NULL IN ('a','b');   -- 返回结果为NULL
SELECT 'a' IN ('a', NULL);   -- 返回结果为1

3.7 NOT IN运算符

NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。

SELECT 'a' NOT IN ('a','b','c');  -- 返回结果为0
SELECT 1 NOT IN (2,3);  -- 返回结果为1

3.8 LIKE运算符

LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。

LIKE运算符通常使用如下通配符:

  • “%”:匹配0个或多个字符。
  • “_”:只能匹配一个字符。
SELECT NULL LIKE 'abc';  -- 返回结果为NULL
SELECT 'abc' LIKE NULL; -- 返回结果为NULL

SELECT * FROM table WHERE username LIKE '%zyl%';  --匹配含有zyl三个字母的username 
SELECT * FROM table WHERE username LIKE '_yl%';  -- 匹配第2、3个字母为yl的username 

3.9 REGEXP运算符

REGEXP运算符用来匹配字符串,语法格式为: expr REGEXP 匹配条件 。如果expr满足匹配条件,返回1;如果不满足,则返回0。若expr或匹配条件任意一个为NULL,则结果为NULL。

REGEXP运算符在进行匹配时,常用的有下面几种通配符:

(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘$’匹配以该字符前面的字符结尾的字符串。
(3)‘.’匹配任何一个单字符。
(4)“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围,使用一
个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
(5)‘*’匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,
而“*”匹配任何数量的任何字符。

四、注意事项

在使用比较运算符时,需要注意以下几点:

1、字符串比较: 当比较字符串时,MySQL会根据ANSI字符串的字典顺序进行比较。例如,‘abc’大于’ab’,‘abc’小于’abd’。

SELECT * FROM table_name WHERE column_name > 'ab';
SELECT * FROM table_name WHERE column_name < 'abd';

2、NULL值比较: 与NULL进行比较的结果都将是NULL 。 如果需要处理NULL值的情况,可以使用IS NULL或IS NOT NULL来判断。

3、多个条件的组合: 可以使用逻辑运算符(AND、OR、NOT)来组合多个比较条件,以实现更复杂的查询条件。

总结

返回顶部
顶部