Mysql数据库(八)——mysql高阶语句(中)
Mysql数据库(八)——mysql高阶语句(中)
- 一、正则表达式(同shell脚本的正则表达式)
- 1、以"."代替任意一个字符
- 2、匹配前面字符多次
- 3、匹配前面字符至少一次
- 4、匹配字符串
- 5、匹配包含或者关系的记录
- 6、匹配指定字符集中的任意一个
- 二、运算符
- 1、算数运算
- 2、比较运算符
- ①、等于(=)
- ②、不等于(!=或<>)
- ③、大于、大于等于、小于、小于等于
- ④、判断一个值为/不为null(is null,is not null)
- ⑤、两者之间(between ... and ...)
- ⑥、当有两个或者多个参数时,返回其中最大/最小值,如果其中有一个为null,则返回null(least、greatest)
- ⑦、在/不在集合中(in/not in)
- ⑧、通配符匹配
- 3、逻辑运算符
- ①、逻辑非(not 或 !)
- ②、逻辑与(and 或 &&)
- ③、逻辑或(or)
- ④、逻辑异或(xor)
- 4、位运算符
- 5、优先级
- 三、连接查询
- 1、内连接
- 2、左连接
- 3、右连接
- 总结
- 1、算数运算符
- 2、比较运算符
- ①、等于
- ②、不等于、大于、大于等于、小于、小于等于
- ③、判断一个值为/不为null
- ④、两者之间
- ⑤、通配符匹配
- 3、逻辑运算符
- ①、逻辑非(not 或 !)
- ②、逻辑与(and 或 &&)
- ③、逻辑或(or)
- ④、逻辑异或(xor)
- 4、位运算符
- 5、连接查询
一、正则表达式(同shell脚本的正则表达式)
- MysQL正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串。
- MysQL的正则表达式使用REGEXP这个关键字来指定正则表达式的匹配模式
- REGEXP操作符所支持的匹配模式如下
匹配模式 | 描述 |
---|---|
^ | 匹配文本的开始字符 |
$ | 匹配文本的结束字符 |
. | 匹配任何单个字符 |
* | 匹配零个或多个在它前面的字符 |
+ | 匹配前面的字符 1 次或多次 |
字符串 | 匹配包含指定的字符串 |
p1Ip2 | 匹配 p1 或 p2 |
[…] | 匹配字符集合中的任意一个字符 |
[^…] | 匹配不在括号中的任何字符 |
{n} | 匹配前面的字符串 n 次 |
{n,m} | 匹配前面的字符串至少 n 次,至多m 次 |
1、以"."代替任意一个字符
2、匹配前面字符多次
3、匹配前面字符至少一次
4、匹配字符串
5、匹配包含或者关系的记录
6、匹配指定字符集中的任意一个
二、运算符
- MysQL的运算符用于对记录中的字段值进行运算。
- MysQL的运算符共有四种,分别是:算术运算符、比较运算符、逻辑运算符和位运算符。
1、算数运算
运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
- 在除法运算中,除数不能为0,若除数是0,则返回的结果为 null 。
- 如果有多个运算符,按照先乘除后加减的优先级进行运算,相同优先级的运算,没有先后顺序
2、比较运算符
- 字符串的比较默认不区分大小写,可使用 binary 来区分
常用比较运算符 | 说明 |
---|---|
= | 等于 |
!=或<> | 不等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
is null | 判断是否为null |
is not null | 判断是否不为null |
between and | 两者之间 |
greatest | 两个或多个参数时返回最大值 |
least | 两个或多个参数时返回最小值 |
in | 在集合中 |
①、等于(=)
- 等号(=)用来判断数字、字符串和表达式是否相等的,如果相等则返回1,如果不相等则返回0。
- 如果比较的两者有一个值是NULL,则比较的结果就是NULL。
- 其中字符的比较是根据ASCII码来判断的,如果ASCIl码相等,则表示两个字符相同;如果ASCII码不相等,则表示两个字符不相同。例如字符串(字母)比较: (‘a’ > ‘b’)其实比较的是底层ASCll码需要关注的ASCII码有:a、A、0
- 如果两者都是整数,则按照整数值进行比较。
- 如果一个整数一个字符串,则会自动将字符串转换为数字,再进行比较。
- 如果两者都是字符串,则按照字符串进行比较。
- 如果两者中至少有一个值是NULL,则比较的结果是NULL
②、不等于(!=或<>)
- 用于针对数字、字符串和表达式不相等的比较,如果不相等则返回1,如果相等则返回0
- 不等于(!=,<>)无法用于判断是否为null
③、大于、大于等于、小于、小于等于
- 大于(>)运算符用来判断左侧的操作数是否大于右侧的操作数,若大于返回1,否则返回0,同样不能用于判断NULL
- 小于(<)运算符用来判断左侧的操作数是否小于右侧的操作数,若小于返回1,否则返回0,同样不能用于判断NULL
- 大于等于(>=)判断左侧的操作数是否大于等于右侧的操作数,若大于等于返回1,否则返回0,不能用于判断NULL
- 小于等于(<=)判断左侧的操作数是否小于等于右侧的操作数,若小于等于返回1,否则返回0,不能用于判断NULL
④、判断一个值为/不为null(is null,is not null)
- IS NULL判断一个值是否为NULL,如果为NULL返回1,否则返回0
- IS NOT NULL判断一个值是否不为NULL,如果不为NULL返回1,否则返回0
⑤、两者之间(between … and …)
- 通常用于判断一个值是否在某两个值之间。例如,判断某数字是否在另外两个数字之间,也可以判断某英文字母是否在另外两个字母之间,条件符合返回1,否则返回0
⑥、当有两个或者多个参数时,返回其中最大/最小值,如果其中有一个为null,则返回null(least、greatest)
⑦、在/不在集合中(in/not in)
- in 判断一个值是否在集合中,在则返回1,否则返回0
- not in 判断一个值是否不在集合中,不在则返回1,在则返回0
⑧、通配符匹配
- LIKE用来匹配字符串,如果匹配成功则返回1,反之返回0
- LIKE支持两种通配符:‘g’用于匹配任意数目的字符,而’_'只能匹配一个字符。
3、逻辑运算符
- 逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回1,否则返回0,真和假也可以用TRUE和FALSE表示。
- MySQL中支持使用的逻辑运算符有四种
- not 或 ! :逻辑非
- and 或 && :逻辑与
- or :逻辑或
- xor :逻辑异或
①、逻辑非(not 或 !)
- 逻辑非将跟在他后面的值取反,如果NOT后面的操作数为0时,所得值为1
- 如果操作数为非0时,所得值为0
- 如果操作数为NULL时,所得值为NULL
②、逻辑与(and 或 &&)
- 当所有操作数都为非零值并且不为NULL时,返回值为1
- 当一个或多个操作数为0时,返回值为0
- 操作数中有任何一个为NULT时,返回值为NULL
③、逻辑或(or)
- 当两个操作数都为非NULL值时,如果有任意一个操作数为非零值,则返回值为1,否则结果为0
- 当有一个操作数为NULL时,如果另一个操作数为非零值,则返回值为1,否则结果为NULL
- 假如两个操作数均为NULL时,则返回值为NULL。
④、逻辑异或(xor)
- 当任意一个操作数为NULL时,返回值为NULL
- 对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回值为0
- 如果一个为0值,另一个为非0值,返回值为1
4、位运算符
- 位运算符是在二进制数上进行计算的运算符
- 位运算会先将操作数变成二进制数,进行位运算
- 然后再将计算结果从二进制数变回十进制数
位运算符 | 描述 |
---|---|
& | 按位与 |
I | 按位或 |
^ | 按位异或 |
! | 取反 |
<< | 左移 |
>> | 右移 |
- 按位与:对应的二进制位都为1,则运算结果为1,否则为0
- 按位或:对应的二进制位有一个为1则为1,否则为0
- 按位异或:对应的二进制位不同时,运算结果为1,否则为0
- 取反:对应的二进制数逐位反转,0取反为1,1取反为0
5、优先级
- !
- ~
- ^
- *、/、%
- +、-
- <<、>>
- &
- |
- =、<=>、>=、>、<=、<、<>、!=、like、regexp、in
- between、case、when、then、else
- not
- &&、and
- or、xor
- :=
三、连接查询
- MysQL的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。
- 首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。
- 使用较多的连接查询包括:内连接、左连接和右连接
1、内连接
- MySQL中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。
- 通常在 from 子句中使用关键字 inner join 来连接多张表,并使用 on 子句设置连接条件
- 内连接是系统默认的表连接,所以在 from 子句后可以省略 inner 关键字,只使用关键字 join ,同时有多个表时,也可以连续使用 inner join 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段
2、左连接
- 左连接也可以被称为左外连接,在 from 子句中用 left join 或者 left out join 关键字来表示。
- 左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
- 左连接中,左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,不足的地方均为 null
3、右连接
- 右连接也被称为右外连接,在 from 子句中用 right join 或者 right out join 关键字来表示。
- 右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
总结
1、算数运算符
- 算法运算中,除法运算/的结果类型为decimal,其余为Int
- 多个运算符时,先乘除后加减
2、比较运算符
- 判断结果正确为1,不正确则为0
①、等于
- 字母是按照ASCII码的数值来进行判断
- 有一个为NULL,则为NULL
②、不等于、大于、大于等于、小于、小于等于
- 无法判断NULL
③、判断一个值为/不为null
- 判断成立则为1,不成立则为0
④、两者之间
- 判断范围是包含范围的两个数值的
- 也可以用来判断英文字母
⑤、通配符匹配
- like支持两种通配符,‘g’ 用于匹配任意数目字符,而 ‘_’ 只能匹配一个字符
3、逻辑运算符
- 是用来判断表达式的真假,真为1,假为0
①、逻辑非(not 或 !)
- NULL则为NULL
- 非0时则为0
- 0时则为1
- 注:整体判断时需要使用单引号进行整体判断
- 例如 select !1+1 的结果为1,而 select !‘1+1’ 则为0
②、逻辑与(and 或 &&)
- 都非0,且不为NULL,则为1
- 有一个或多个0,则为0
- 非0时,有NULL,则为NULL
③、逻辑或(or)
- 有NULL时:
- 全是NULL则为NULL
- 不全是NULL时:有0则为NULL,非0则为1
- 无NULL时:
- 非0则为1
- 有0时:不全是0则为1,全是0则为0
④、逻辑异或(xor)
- 有NULL则为NULL
- 非NULL时
- 全是0或者全是非0则为0
- 不全是0则为1
4、位运算符
- 按位与:对应的二进制位都为1,则运算结果为1,否则为0
- 按位或:对应的二进制位有一个为1则为1,否则为0
- 按位异或:对应的二进制位不同时,运算结果为1,否则为0
- 取反:对应的二进制数逐位反转,0取反为1,1取反为0
5、连接查询
- 内连接是默认的表连接,可省略inner ,只用 jion ,查询的结果为两表相同字段。最好不要超过三张表。
- 左连接中主表在左边,主表内容会全部显示出来,在从表中没匹配到的以NULL显示出来
- 右连接中主表在右边,主表内容会全部显示出来,在从表中没匹配到的以NULL显示出来
Mysql数据库(八)——mysql高阶语句(中)相关推荐
- Mysql数据库基础及高阶
基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库.表.字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表的记录 DC ...
- Mysql数据库(七)——mysql高阶语句(上)
Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...
- MySQL——高阶语句(中)
MySQL--高阶语句(中) 一.正则表达式 二.运算符 三.比较运算符 四.逻辑运算符 五.位运算符 六.连接查询 1.内连接 2.左连接 3.右连接 一.正则表达式 MySQL 正则表达式通常是在 ...
- Mysql数据库(九)——mysql高阶语句(下)
Mysql数据库(九)--mysql高阶语句(下) 一.函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.简介 2.优点 3.语法 ①.例 ②.参数分类 ③.带参数 ...
- MYSQL sql 高阶语句 (sequel)
sql 高阶语句 一.空值(NULL) 和 无值('') 的区别 · 无值的长度为 0,不占用空间的:而 NULL 值的长度是 NULL,是占用空间的. · S NULL 或者 IS NOT NULL ...
- MySQL——高阶语句、存储过程(下)
MySQL--高阶语句(下) 一.数据库函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.概述 2.简介 3.优点 4.创建存储过程 调用存储过程 带参数的存储过程 ...
- MySQL——高阶语句(上)
MySQL高阶语句(上) 一.MySQL高级语句 1.ORDER BY----按关键字排序 单字段排序 多字段排序 2.OR/AND----或/且 3.DISTINCT----查询不重复记录 4.GR ...
- mysql高阶语句一
高阶语句一 1.按关键字排序 (1)按一个字段排序: (2)多字段排序 2.区间判断及查询不重复记录 2.1 AND/OR --且/或 2.2.对结果进行分组统计 3.限制结果条目 4.设置别名(al ...
- MYSQL数据库 增删改查基础语句
MYSQL数据库 增删改查基础语句 **********************DDL 语句 ********************* ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...
最新文章
- 飞桨领航团 x Datawhale联合Meetup来了!杭州的小伙伴可以见面了!
- 96. (GO)不同的二叉搜索树
- why get_expanded_entityset is not called but works in Ke's laptop
- Oracle入门(十二B)之表创建
- pipenv相关指令
- php手机端分页加载,移动端分页加载
- Java 动态代理机制详解
- 数学常用公式及规律、结论(三)
- tp5之允许跨域请求
- day9http协议
- 使用actuator优雅地停止SpringBoot应用
- java新开一个线程run_创建和启动一个Java线程
- linux环境下cmake安装及使用
- 一维码二维码的生成及打印
- Qt实现柱状图、饼状图、折线图、曲线图
- 有没有开以修改服务器游戏数据,剑网3指尖江湖第二批服务器数据互通啦 来看看有没有你所在的大区...
- h5 先加载小图_干货!高手珍藏版的H5秘密尺寸
- Thinkphp5的项目配置到西部数码虚拟主机
- Lucene 7.5.0 索引文件之liv
- 海雀口中美食遭贪吃海鸥打劫
热门文章
- 08 / LiveVideoStack主编观察:开源RTC的机会来了吗?
- FFmpeg图像处理深度应用
- 《Go语言圣经》学习笔记 第八章 Groroutines和Channels
- “秒开”浏览器实现起来有多难?
- 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践
- 口罩告急,全民互助!“口罩互助”小程序重磅上线!
- No module named yum错误的解决办法
- nginx_rtmp中解析sps和pps
- c++协程1 (boost::coroutine)
- 电信信息日志使用mapreduce统计的两种方式