文章目录

  • 一、正则表达式
  • 二、运算符
    • 1、算术运算符
    • 2、比较运算符
    • 3、逻辑运算符(布尔值)
    • 4、位运算符
    • 5、优先级
  • 三、连接查询
    • 1、内连接
    • 2、左连接
    • 3、右连接

一、正则表达式

MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串
MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式,REGEXP 操作符所支持的匹配模式如表所示

实例

select id,name from www where name regexp '^li';       ##查询以li开头的学生信息

select id,name from www where name regexp 'i$';        ##查询以i结尾的的学生信息

select id,name from www where name regexp 'an';        ##查询名字中包含an的学生信息

字符串是一个整体
select id,name from www where name regexp 'an|ei';    ##查询名字包含an或者ei

select id,name from www where name regexp 'sag*';  ##查询名字中有sa,g可有可无的学生信息
必须要有的部分是'an' 而'g'可有可无

select id,name from www where name regexp 'ang+'; ##查询名字中含有an,g至少出现一次的学生信息

select id,name from www where name regexp '^[s-x]';    ##查询名字以s-x开头的学生信息

select id,name from www where name regexp '[^wangwu]'; ##查询名字不是wangwu的学生信息

select id,name from www where name regexp '^[^czx]';       ##查询学生名字不以czx各字母开头的学生信息

二、运算符

1、算术运算符

以 SELECT 命令来实现最基础的加减乘除运算,MySQL 支持使用的算术运算符
如表所示

在除法运算和求余数运算中,除数不能为 0,若除数是 0,返回的结果则为 NULL
需要注意的是,如果有多个运算符,按照先乘除后加减的优先级进行运算,相同优先级的运算符没有先后顺序
实例

create table qq as select 1+2,2-1,3*2,4/2,5%2;
select * from qq;

2、比较运算符

比较运算符是查询数据记录时经常使用的一类运算符
通过使用比较运算符可以判断出表中有哪些记录是符合条件的,如果比较的结果(以布尔值的方式进行返回判断)为真则返回1,如果为假则返回0,比较的结果如果不确定则返回NULL
其中字符串在进行比较的时候默认是不区分大小写的,如果要区分大小写可以通过binary关键字来实现

  • 等号(=)

    • 是用来判断数字、字符串和表达式是否相等的,如果相等则返回1,如果不相等则返回0。如果比较的两者有一个值是NULL, 则比较的结果就是NULL

    • 其中字符的比较是根据ASCII 码来判断的,如果ASCII码相等,则表示两个字符相同;如果ASCII 码不相等,则表示两个字符不相同

    • 例如:字符串(字母)比较:
      (‘a’>‘b’)其实比较的就是底层的ASCII码
      需要关注的是ascii码有: a、A、0 (97、65、48 )

    • 如果比较的是多字符串,如: ‘abc’=‘acb’,如何比较(字符个数、字符顺序)

    • 与linux返回值表达相反,linux中运行正常返回值是0,运行异常返回值是非0

    • 实例:
      select 2=4,2=2,2=‘2’,‘e’=‘e’,‘r’=null;

  1. 如果两者都是整数,则按照整数值进行比较。
  2. 如果一个整数一个字符串,则会自动将字符串转换为数字,再进行比较。(在程序中,一般是不会把这两者进行相比较的)
  3. 如果两者都是字符串,则按照字符串进行比较。
  4. 如果两者中至少有一个值是 NULL,则比较的结果是 NULL

比较的是ascii码,a的值是97,b的值是98

select 'bb'>'b';          ##仍旧是比较第一位b与b


select 97=‘a’;

  • 不等于(<>,!=)

    • 不等于号有两种写法,分别是<>或者!=
    • 用于针对数字、字符串和表达式不相等的比较。
    • 如果不相等则返回 1,如果相等则返回 0(这点正好跟等于的返回值相反);需要注意的是:不等于运算符不能用于判断 NULL
    • 也可以换个角度理解:不等于运算内,不相等即“成立不等于”即返回1,相等即“不成立不等于”即返回0
    • 实例:
select 'abc'<>'cba',2<>2,3!=2,null<>null;

  • 大于(>)

    • 运算符用来判断左侧的操作数是否大于右侧的操作数,若大于返回 1,否则返回 0,同样不能用于判断 NULL。
  • 小于(<)
    • 运算符用来判断左侧的操作数是否小于右侧的操作数,若小于返回 1,否则返回 0,同样不能用于判断 NULL。
  • 大于等于(>=)
    • 判断左侧的操作数是否大于等于右侧的操作数,若大于等于返回 1,否则返回 0,不能用于判断 NULL。
  • 小于等于(<=)
    • 判断左侧的操作数是否小于等于右侧的操作数,若小于等于返回 1,否则返回 0,不能用于判断 NULL
  • 实例
select 5>4,3<4,'a'<'b',4.4<5,'u'>=null;
select 2 is null,'a' is not null,null is null;


  • between and 比较运算

    • 通常用于判断一个值是否落在某两个值之间;即覆盖的范围是>= 和 <=关系
    • 判断某数字是否在另外两个数字之间,也可以判断某英文字母是否在另外两个字母之间
    • 实例
select 6 between 5 and 7,'c' between 'a' and 'b';      ##判断6是否在5和7之间,c是否a和b之间

select 3 between 2 and 3;

  • least(取最小值)

    • LEAST:当有两个或者多个参数时,返回其中的最小值。如果其中一个值为 NULL,则 返回结果就为 NULL。
  • greatest(取最大值)
    • GREATEST:当有两个或者多个参数时,返回其中的最大值。如果其中一个值为NULL, 则返回结果就为 NULL。
  • 实例
select least(1,2,3),greatest(1,2,3),least('a','b','c'),greatest('a','b','c');

select least (1,'a','b'),greatest(1,'a','b');

  • IN

    • 判断一个值是否在对应的列表中,如果是返回 1,否则返回 0。
  • NOT IN
    • 判断一个值是否不在对应的列表中,如果不是返回 1,否则返回 0
  • 实例
 select 3 in(1,2,3),1 not in(1,2,3);

  • LIKE

    • 用来匹配字符串,如果匹配成功则返回 1,反之返回 0
    • LIKE 支持两种通配符
      • ’%’ :用于匹配任意数目的字符(*匹配的是前面一个字符)
      • ’_’:只能匹配一个字符。
  • NOT LIKE
    • 正好跟 LIKE 相反,如果没有匹配成功则返回 1,反之返回 0
  • 实例
select 'abc' like 'ab%','abc' like 'a_c','abc' not like 'abc';

3、逻辑运算符(布尔值)

逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则 返回 0,真和假也可以用 TRUE 和 FALSE 表示
MySQL 中支持使用的逻辑运算符有四种, 具体如表所示:

  • 逻辑非

    • 逻辑运算符中最简单的运算符就是逻辑非,逻辑非使用 NOT 或!表示
    • 逻辑非将跟在它后面的逻辑测试取反,把真变为假,把假变为真
    • 如果 NOT 后面的操作数为 0 时,所得值为 1;如果操作数为非 0 时,所得值为 0;如果操作数为 NULL 时,所得值为 NULL
    • 实例
select not 0,!3,!null;

  • 逻辑与

    • 当所有的操作数都为非0值且不为null时,返回值为1,否则为0(null与0比较特殊)
    • 逻辑与使用 AND 或者&&表示
    • 实例
select 3 and 4,null and 5,0 && null,6 && 0;


由结果可以看出
and和&&的作用相同
3 and 4 :没有0或null,返回值为1
null and 5:有null,返回值null
0 && null:返回值为0
6 && 0:中有0,返回值为0

  • 逻辑或(or)

    • 逻辑或通常使用 OR
    • 逻辑或表示包含的操作数,任意一个为非零值并且不是 NULL 值时,返回 1,否则返回 0。
    • 当有一个操作数为null时,如果另一个操作数为非0值,则返回值为1,否则为null
    • 如两个操作数均为null,则返回值为null
    • 实例
select 3 or 4,null or 5,0 or null,6 or 0,0 or 0;


也可以多个值比较

select 0 or null or 2;

  • 逻辑异或(xor)

    • 两个非 NULL 值的操作数,如果两者都是 0 或者都是非 0,则返回 0
    • 如果一个为 0, 另一个为非 0,则返回结果为 1
    • 当任意一个值为 NULL 时,返回值为 NULL
    • 实例
select 0 xor 0,0 xor 5,3 xor 4,3 xor null;

4、位运算符

位运算符实际上是对二进制数进行计算的运算符
MySQL 内位运算会先将操作数变成二进制格式(1010 1111),然后进行位运算,最后在将计算结果从二进制变回到十进制格式,方便用户查看
MySQL 支持 6 种位运算符,具体如表所示:

实例:

select 10 & 15,10 | 15,10^15,5 &~1;


具体过程:
10 转换为二进制数是 1010, 15 转换为二进制数是 1111

  1. 按位与运算(&),是对应的二进制位都是 1 的,它们的运算结果为 1,否则为 0,所以 10 & 15 的结果为 10。
  2. 按位或运算(|),是对应的二进制位有一个或两个为 1 的,运算结果为 1,否则为 0, 所以 10 | 15 的结果为 15。
  3. 按位异或运算(^),是对应的二进制位不相同时,运算结果 1,否则为 0,所以 10 ^ 15 的结果为 5。
  4. 按位取反(~),是对应的二进制数逐位反转,即 1 取反后变为 0, 0 取反后变为 1。数字 1 的二进制是 0001,取反后变为 1110, 数字 5 的二进制是 0101,将 1110 和 0101进行求与操作,其结果是二进制的 0100,转换为十进制就是 4

5、优先级

以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运算符在计算过程中的先后顺序
级别高的运算符会先进行计算,如果运算符的级别相同, MySQL 会按照顺序从左到右依次进行计算
优先级如下表所示

三、连接查询

MySQL的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接

  • 以左边表格为主表,叫左连查询
  • 以右边表格为主表,叫右连查询
select 左表 left join 右表信息
select 左表 right join 右表信息

1、内连接

MySQL 中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合
通常在 FROM 子句中使用关键字 INNER JOIN 来连接多张表,并使用 ON 子句设置连接条件,内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN
同时有多个表时,也可以连续使用 INNER JOIN 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
简而言之:内连查询:通过inner join 的方式将两张表指定的相同字段的记录行输出出来

SELECT column_name(s)FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

实例

create table biao(name varchar(20),score decimal(4,2),address varchar(40));
insert into biao values('wangwu',80,'beijing'),('zhangsan',90,'shanghanghai'),('tianqi',79,'xian');


select www.id,www.name from www inner join biao on www.name=biao..name; 查询id、name字段,条件是www和biao中name字段值相同

2、左连接

左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示
左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
实例:

select * from www left join biao on www.name=biao.name; ##join左表的www表作为主表全部显示出来,右表biao只会显示符合搜索条件的记录,右表记录不足的地方均为NULL

3、右连接

右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
实例:
select * from www right join biao on www.name=biao.name; ##join右边的biao表作为主表全部显示出来,左表www只会显示符合搜索条件的记录,坐表记录不足的地方均为NULL

(六)MySQL数据库高阶语句之正则表达式、运算符、连接表达式JOIN相关推荐

  1. MYSQL sql 高阶语句 (sequel)

    sql 高阶语句 一.空值(NULL) 和 无值('') 的区别 · 无值的长度为 0,不占用空间的:而 NULL 值的长度是 NULL,是占用空间的. · S NULL 或者 IS NOT NULL ...

  2. Mysql数据库(八)——mysql高阶语句(中)

    Mysql数据库(八)--mysql高阶语句(中) 一.正则表达式(同shell脚本的正则表达式) 1.以"."代替任意一个字符 2.匹配前面字符多次 3.匹配前面字符至少一次 4 ...

  3. Mysql数据库(七)——mysql高阶语句(上)

    Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...

  4. Mysql数据库(九)——mysql高阶语句(下)

    Mysql数据库(九)--mysql高阶语句(下) 一.函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.简介 2.优点 3.语法 ①.例 ②.参数分类 ③.带参数 ...

  5. MySQL——高阶语句(中)

    MySQL--高阶语句(中) 一.正则表达式 二.运算符 三.比较运算符 四.逻辑运算符 五.位运算符 六.连接查询 1.内连接 2.左连接 3.右连接 一.正则表达式 MySQL 正则表达式通常是在 ...

  6. MySQL——高阶语句、存储过程(下)

    MySQL--高阶语句(下) 一.数据库函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.概述 2.简介 3.优点 4.创建存储过程 调用存储过程 带参数的存储过程 ...

  7. MySQL——高阶语句(上)

    MySQL高阶语句(上) 一.MySQL高级语句 1.ORDER BY----按关键字排序 单字段排序 多字段排序 2.OR/AND----或/且 3.DISTINCT----查询不重复记录 4.GR ...

  8. mysql高阶语句一

    高阶语句一 1.按关键字排序 (1)按一个字段排序: (2)多字段排序 2.区间判断及查询不重复记录 2.1 AND/OR --且/或 2.2.对结果进行分组统计 3.限制结果条目 4.设置别名(al ...

  9. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

最新文章

  1. android aidl接口初步了解
  2. IFE春季班第一阶段任务(请仔细阅读)
  3. C#.NET编程----Spring.NET NHibernate整合
  4. golang底层深入_带有Golang的GraphQL:从基础到高级的深入研究
  5. 类支付宝微信密码输入框
  6. 洛谷1196 银河英雄传说(并查集)
  7. linux lsiutil raid创建,使用MegaCli工具查看状态
  8. windows与ubuntu Centos系统下载站点整理(自用)
  9. 全新APP软件游戏应用网站源码+支持WAP/Pbootcms内核
  10. FL Studio20.9水果软件高级中文版电音编曲
  11. Centos 安装libreoffice 以及 word转pdf转html转epub转txt
  12. 场地测量的方法和程序_施工测量方案
  13. 【框架-MFC】MFC 显示和隐藏 星号密码 以及如何预防被查看
  14. matlab output()函数,MATLAB - Data Output
  15. 使用ffmpeg合并mp4文件
  16. c#断点续传下载文件
  17. md格式 linux,Linux命令基本格式以及文件处理命令.md
  18. 2021年茶艺师(中级)复审考试及茶艺师(中级)理论考试
  19. 怀旧服为什么显示服务器不兼容,《魔兽世界怀旧服》加载出错怎么办 加载出错解决方案...
  20. 总结:word2007中插入页眉页脚和页码

热门文章

  1. jsp里照片放在哪里_小说:在空无一人的灵棚地面上,有一张黑白照片被摔得粉碎...
  2. EMQ2.0 配置说明
  3. 股粮网:无协议脱欧恐慌先至 英国民众花超300亿屯粮
  4. 如何删除word文件中的空白页?
  5. 解抛物型微分方程c语言程序,偏微分方程的matlab代码_偏微分方程matlab程序,matlab偏微分代码...
  6. uni-app 小程序文件下载并分享
  7. linux secure boot(安全启动)下为内核模块签名
  8. 怎样快速把jpg图片转换成word文档?
  9. 京东商城刘强东:B2C业2012年一定会出事
  10. rust腐蚀自建服2018_腐蚀Rust新手攻略指南 腐蚀Rust怎么开始游戏