当前位置: 首页 > news >正文

【MySQL】第三章 运算符

一,算术运算符

算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加 (+)、减(-)、乘(*)、除(/)和取模(%)运算

(1)  "+" 加法逻辑运算符

对于加法逻辑运算符的示例代码:

SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 * 30, 100 + 35.5, 100 - 35.5 
FROM DUAL;
示例代码运行结果

当对于逻辑运算符+进行运算的时候,如果两边为整形的时候,计算出来的为整形,当由一个为浮点型的时候,计算出来的必为浮点型,可以观察下面多加的100 + 100.0

对于加法的特殊案例

SELECT 1 + '1', 1 + 'a', 1 + NULL
FROM DUAL;


当1 + '1'的时候,sql会将字符串1隐式转换为整形1参与逻辑运算符的计算
当1 + ‘a’的时候,sql会将字符串a隐式转换为整型0参与逻辑运算符的计算(写成任何的字符串都是如此)
当1 + NULL的时候,依据sql的的规范,计算出来的为NULL

(2)  "*"和"%"逻辑运算符

SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2,
100 + 2 * 5 / 2,100 / 3, 100 DIV 0  # 分母如果为0,则结果为null
FROM DUAL;

示例代码运行结果

当进行乘法的时候,只要在进行乘法计算的时候,出现了浮点型的话,那么结果必为浮点型,当进行取模运算的时候,只要前面的数字为负数的话,取模的数字才可以为负数

二,比较运算符

比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录
比较运算符的种类

示例代码

SELECT 1 = 1, 1 = 2, 1 != 2, 1 = '1', 1 = 'a', 0 = 'a'
FROM DUAL;


= 和 != 的使用都很简单,这里需要注意的是,上面说过,当进行算术运算的时候,sql会将字符串1隐式转换为整形1,至此在这里也是一样的,当利用1去判断字符串1是否相等的时候,sql也会将其隐式转换,可以看到这里显示的是1,但是当与'a'进行逻辑判断的时候,这里显示了0,但是后面与0进行判断的时候,显示的为1,那么可以看出就是sql将'a'隐式转换了0

特殊情况

#两边都是字符串的话,则按照ANSI的比较规则进行比较
SELECT 'a' = 'a','ab' = 'ab','a' = 'b' 
FROM DUAL;SELECT 1 = NULL,NULL = NULL # 只要有null参与判断,结果就为null
FROM DUAL;


这里需要注意的是,当两边都是字符串的时候,sql会将两边的字符串都转换为ASCII值进行比较,当两边都是NULL的时候,这里判断的结果还是NULL,不是1,所以=运算符号不可以用来判断NULL,至此引出了安全等于<=>逻辑运算符


所以安全运算符<=>跟=的区别就是,可以用来判断NULL值


不等于也是很简单使用,剩下的都很简单,直接使用就ok这里就跳过了

三,关键字比较运算符

关键字比较运算符的分类

(1)IS NOT NULL \ IS NULL\ ISNULL

IS NOT NULL

SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;


当commission_pct 为NULL的时候,然后就可以利用前面所学的WHERE来进行过滤一下数据,IS NULL就是可以过滤出这commission_pct为NULL的数据

SELECT last_name,salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);

这个ISNULL就是一个函数,利用函数的使用方法就可以使用这个方法了

(2)  LEAST和GREATEST

示例代码

SELECT LEAST('a','b','c'), GREATEST('a','b','c')
FROM DUAL


这个就是比较其中的每一个字母的ASCII码值

SELECT LEAST(first_name,last_name),LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;

代码结果

这个第一个的作用是逐个比较每一个字符串的字母判断ASCII值,第二个是比较字符串的长度

(3)  BETWEEN  A  AND  B

示例代码

#③ BETWEEN 条件下界1 AND 条件上界2  (查询条件1和条件2范围内的数据,包含边界)
#查询工资在6000 到 8000的员工信息
SELECT employee_id,last_name,salary
FROM employees
#where salary between 6000 and 8000;
WHERE salary >= 6000 && salary <= 8000;#交换6000 和 8000之后,查询不到数据
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 8000 AND 6000;#查询工资不在6000 到 8000的员工信息
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
#where salary < 6000 or salary > 8000;

这里只需要注意一下这个NOT的使用就好了,这个NOT就是用到这个BETWEEN的前面的,然后用到这个表的后面

(4)  IN(A)和NOT IN(A) 

这两个适用于其离散化查找,上面的BETWEEN A  AND  B是用来查找一个范围,这里是查找这个就是比如只找15这个值的对应的数据的,而不是一个范围

#④ in (set)\ not in (set)#练习:查询部门为10,20,30部门的员工信息
SELECT last_name,salary,department_id
FROM employees
#where department_id = 10 or department_id = 20 or department_id = 30;
WHERE department_id IN (10,20,30);

(5)  LIKE

这个是用在模糊查找里面的,就比如我要找一个人,但是当时就记得姓杨,但是叫啥忘记了,这个时候就可以用LIKE进行找出所有性杨的数据

#⑤ LIKE :模糊查询
# % : 代表不确定个数的字符 (0个,1个,或多个)#练习:查询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'的员工信息
#写法1:
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
#写法2:
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';# _ :代表一个不确定的字符#练习:查询第3个字符是'a'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';#练习:查询第2个字符是_且第3个字符是'a'的员工信息
#需要使用转义字符: \ 
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%';#或者  (了解)
SELECT last_name
FROM employees
WHERE last_name LIKE '_$_a%' ESCAPE '$';

这里使用%来识别是哪里未知,然后可以结合AND的关键字来判断共同出现的a和b字符的数据,然后可以用下划线"_"来准确定位这个字母在第几个,然后如果是字符就是_的话,那么就会结合转义字符一起使用了

(6)  正则表达式

由于这个知识覆盖太广,这里列出一些常用的,剩下的用法可以在开发中学习

#⑥ REGEXP \ RLIKE :正则表达式SELECT 'shkstart' REGEXP '^shk', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk'
FROM DUAL;SELECT 'atguigu' REGEXP 'gu.gu','atguigu' REGEXP '[ab]'
FROM DUAL;

第一个代码的意思
就是判断首字母是否为shk开头,如果是就是标记为1,^这个是用来表示开头用的,然后$就是表示是否以t进行结尾,然后如就是单纯的一个字符串,那就判断这个里面是否包含这个字符串

第二个代码的意思
就是判断这个字符串是否包含gu[X]gu,这个字符串,中间的X可以为任意值,这里就用.来进行表示,然后后面的[ab]就是判断这个字符串是否包含a或者b

四,逻辑运算符

#3. 逻辑运算符: OR ||  AND && NOT ! XOR# or  and 
SELECT last_name,salary,department_id
FROM employees
#where department_id = 10 or department_id = 20;
#where department_id = 10 and department_id = 20;
WHERE department_id = 50 AND salary > 6000;# not 
SELECT last_name,salary,department_id
FROM employees
#where salary not between 6000 and 8000;
#where commission_pct is not null;
WHERE NOT commission_pct <=> NULL;# XOR :追求的"异"
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 50 XOR salary > 6000;#注意:AND的优先级高于OR#4. 位运算符: & |  ^  ~  >>   <<SELECT 12 & 5, 12 | 5,12 ^ 5 
FROM DUAL;SELECT 10 & ~1 FROM DUAL;#在一定范围内满足:每向左移动1位,相当于乘以2;每向右移动一位,相当于除以2。
SELECT 4 << 1 , 8 >> 1
FROM DUAL;

这里的逻辑运算符都很简单,由于博主前面学习过了计组和C这里就不在阐述

五,总结

http://www.dtcms.com/a/503369.html

相关文章:

  • 智能机器人梯控系统(含二维码/刷卡/人脸识别)安装布线指南,结合工程规范与安全要点进行结构化优化,内容清晰、可操作性强
  • 突破 @Valid 局限!Spring Boot 编程式验证深度解析与复杂场景实战
  • 盐城市规划建设局网站做北美市场用哪个网站
  • 【攻防实战】系列二-使用metasploit打穿某集团(下)
  • 单词搜索 II · Word Search II
  • css `dorp-shadow`
  • 做网站内容管理器要吗免费的网站制作
  • 有限理性的边界与超越:人类如何在认知局限中走向更明智的决策
  • 【参赛心得】从“碰一碰”到“服务流转”:HarmonyOS创新赛金奖作品“智游文博”全流程复盘!
  • 网站推广服务报价表动态门户网站建设价格
  • 网站建设公司的排名濮阳市做网站
  • 【金仓数据库产品体验官】实战测评:电科金仓数据库接口兼容性深度体验
  • RabbitMQ 入门:基于 AMQP-CPP 的 C++ 实践指南与二次封装
  • google外贸网站推广企业的网站公告怎么制作
  • Spring 源码学习(十四)—— HandlerMethodArgumentResolver
  • Git拉取代码报无权限的错误处理方案
  • 棋牌网站管理后台嗅探查找方法(2025最新)
  • 沈阳微信网站建设大连网站建设开发
  • 中英文企业网站模板wordpress插件 标签
  • 生成式引擎优化(GEO):五大 AI 引擎赋能多场景的技术与实践指南
  • 从邮票到Labubu:四十年中国收藏与潮流风潮的演变逻辑
  • 天猫网站左侧导航是怎么做的青岛建站推广
  • Linux中I2C常见问题三
  • C++初阶(14)list
  • python进阶刷题8
  • 完成职教集团网站建设唐山市做网站
  • 19.7 ChatPPT v2.0语音识别实战:3秒极速响应+88.7%准确率的Whisper模型黑科技
  • Cortex-M3 内核 MCU-STM32F1 开发之路:(二)寄存器地址的计算
  • 完整开发网站需要什么访问域名
  • Photoshop - Photoshop 工具栏(14)抓手工具