• MySQL中的运算符


    算术运算符

    算术运算符,包括 +-*/ 或者 DIV% 或者 MOD(求余或求模)。

    • MySQL中,+ 只做数值相加,如果遇到非数值类型,MySQL会先尝试将其转换为数值,如果转换失败,则当作数值0处理。也就是说,这里存在 隐式转换。
    • MySQL中,字符串拼接使用函数CONCAT(str1,str2,...)实现。
    • 空值参与运算,运算结果仍为空值。
    • MySQL中,除数为0时,结果为空值,即NULL

    + 只做数值相加

    # MySQL中,+只做数值相加,如果遇到非数值类型,MySQL会先尝试将其转换为数值,如果转换失败,则当作数值0处理。也就是说,这里存在 隐式转换。
    SELECT 100 + '2'
    FROM DUAL; -- 返回102
    
    SELECT 100 + 'A'
    FROM DUAL; -- 返回100
    
    SELECT 'A' + 'B'
    FROM DUAL; -- 返回0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    字符串拼接用函数CONCAT()

    # MySQL中,字符串拼接使用函数CONCAT()实现
    SELECT CONCAT('HEL','LO')
    FROM DUAL; -- 返回HELLO
    
    SELECT CONCAT('a','b','c')
    FROM DUAL; -- 返回abc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    空值参与运算,结果仍为空值

    SELECT 100 + NULL
    FROM DUAL; -- 返回NULL
    
    • 1
    • 2

    除数为0时,结果为空

    SELECT 100/0
    FROM DUAL; -- 返回NULL
    
    • 1
    • 2

    比较运算符

    比较运算符,包括 =<=><> 或者 !=<<=>>=
    也包括 IS NULLIS NOT NULLISNULL()LEAST()GREATEST()BETWEEN ANDIN()NOT IN()LIKEREGEXPRLIKE

    • =,等号运算符。如果一侧为数值,另一侧为非数值,则存在隐式转换。即,先尝试将非数值转换为数值,如果转换失败,则当作数值0处理。
    • =,等号运算符。如果两侧都是字符串,则比较字符串中字符的ANSI编码。
    • =,等号运算符,如果任一侧出现NULL,比较结果为NULL
    • <=>,安全等于运算符。和=类似,区别在于,<=>可以对NULL进行判断。
    • 判断字段是NULL字段<=>NULL字段 IS NULLISNULL(字段)
    • 判断字段不是NULLNOT 字段<=>NULL字段 IS NOT NULLNOT ISNULL(字段)
    • BETWEEN 条件下界 AND 条件上界,包含边界。
    • 使用LIKE进行模糊查询,其中,
      • %,代表不确定个数的字符。可以代表0个字符,可以代表1个字符,也可以代表多个字符。
      • _,代表任意一个字符。
      • \,转义字符。ESCAPE 字符,指定某个字符为转义字符。
    • REGEXP,正则匹配。常用通配符如下,
      • ^,匹配开头。
      • $,匹配结尾。
      • .,匹配任意一个字符。
      • *,匹配0个或多个在它前面的字符。比如,x*,匹配任意数量的x字符;[0-9]*,匹配任意数量的数字;*,匹配任意数量的任意字符。
      • [],匹配方括号内的任意字符。比如,[abc],匹配abc[a-zA-Z],匹配任意大小写字母;[0-9],匹配任意数字。

    = 和 <=>

    # 如果一侧为数值,另一侧为非数值,则存在隐式转换。即,先尝试将非数值转换为数值,如果转换失败,则当作数值0处理。
    SELECT 1='1',1='a',0='a','1'=1,'a'=1,'a'=0
    FROM DUAL;
    -- 返回 1	0	1	1	0	1
    
    • 1
    • 2
    • 3
    • 4
    # 如果=两侧是字符串,则比较字符串中字符的ANSI编码
    SELECT 'a'='a','ab'='ab','a'='b'
    FROM DUAL; 
    -- 返回 1	1	0
    
    • 1
    • 2
    • 3
    • 4
    # =,等号运算符,任一侧出现NULL,结果就为NULL
    SELECT 1=NULL,NULL='a',NULL=NULL
    FROM DUAL;
    -- 返回 NULL NULL NULL
    
    • 1
    • 2
    • 3
    • 4
    # <=>,安全等于运算符,和=(等号运算符)类似
    SELECT 1<=>'1',1<=>'a',0<=>'a','1'<=>1,'a'<=>1,'a'<=>0
    FROM DUAL;
    -- 返回 1	0	1	1	0	1
    
    SELECT 'a'<=>'a','ab'<=>'ab','a'<=>'b'
    FROM DUAL; 
    -- 返回 1	1	0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # <=>,安全等于运算符,可以对NULL进行判断
    SELECT 1<=>NULL,NULL<=>'a',NULL<=>NULL
    FROM DUAL;
    -- 返回 0	0	1
    
    SELECT *
    FROM employees
    WHERE commission_pct <=> NULL;
    -- 返回 72 行记录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    IS NULL、IS NOT NULL和ISNULL()

    # 查询表employees中,commission_pct为NULL的数据
    SELECT *
    FROM employees
    WHERE commission_pct <=> NULL;
    
    SELECT *
    FROM employees
    WHERE commission_pct IS NULL;
    
    SELECT *
    FROM employees
    WHERE ISNULL(commission_pct);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # 查询表employees中,commission_pct不为NULL的数据
    SELECT *
    FROM employees
    WHERE NOT commission_pct <=> NULL;
    
    SELECT *
    FROM employees
    WHERE commission_pct IS NOT NULL;
    
    SELECT *
    FROM employees
    WHERE NOT ISNULL(commission_pct);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    BETWEEN … AND …

    # 查询工资在[6000,8000]范围内的员工信息
    SELECT *
    FROM employees
    WHERE salary BETWEEN 6000 AND 8000;
    
    SELECT *
    FROM employees
    WHERE salary>=6000 AND salary<=8000;
    
    SELECT *
    FROM employees
    WHERE salary>=6000 && salary<=8000;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # 查询工资不在[6000,8000]范围内的员工信息
    SELECT *
    FROM employees
    WHERE salary NOT BETWEEN 6000 AND 8000;
    
    SELECT *
    FROM employees
    WHERE salary<6000 OR salary>8000;
    
    SELECT *
    FROM employees
    WHERE salary<6000 || salary>8000;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    IN()和NOT IN()

    # 查询department_id为10,20,30的员工信息
    SELECT *
    FROM employees
    WHERE department_id IN (10,20,30);
    
    SELECT *
    FROM employees
    WHERE department_id=10 OR department_id=20 OR department_id=30;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 查询工资不是6000,7000,8000的员工信息
    SELECT *
    FROM employees
    WHERE salary NOT IN(6000,7000,8000);
    
    SELECT *
    FROM employees
    WHERE salary<>6000 && salary<>7000 && salary<>8000;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    模糊查询:LIKE

    # 查询last_name中包含字符'a'的员工信息
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '%a%';
    
    # 查询last_name以字符'a'开头的员工信息
    SELECT last_name
    FROM employees
    WHERE last_name LIKE 'a%';
    
    # 查询last_name中既包含字符'a'又包含字符'e'的员工信息
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
    
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';
    
    # 查询last_name第二个字符为'a'的员工信息
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '_a%';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    逻辑运算符

    逻辑运算符,包括 NOT!AND&&OR||XOR (逻辑异或)。

    ANDOR可以一起使用,且AND的优先级比OR的优先级高。

    位运算符

    位运算符,包括 ~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、>>(按位右移)、<<(按位左移)。

  • 相关阅读:
    Python每日练习:使用百度AI识别表情包并抓取
    【代码随想录】刷题笔记Day32
    /usr/bin/ld: cannot find -lmysqlcllient
    interceptor和filter的区别
    vscode开发STM32(三)---调试篇
    电脑磁盘大文件扫描工具WizTree下载、使用教程
    [Java]快速入门优先队列(堆),手撕相关面试题
    R语言使用plot函数可视化数据散点图,使用log函数对X轴数据和Y轴数据进行对数变换后再进行可视化(log(x),log(y))
    MySQL主从复制与读写分离
    五秒输出和灯的亮灭
  • 原文地址:https://blog.csdn.net/qzw752890913/article/details/125997950