IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL进阶语句二(内左右连接查询、数据库函数) -> 正文阅读

[大数据]MySQL进阶语句二(内左右连接查询、数据库函数)

MySQL进阶语句二(内/左/右连接查询、数据库函数)

1正则表达式

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

查询以  ^A 开头的信息
select id,name from 表名 where name regexp '^A  ';

查询以  B$ 结尾的信息
select id,name from 表名 where name regexp ' B$';

查询名字中包含  的信息
select id,name from 表名 where name regexp '  ';

查询名字是  C开头,  D结尾,中间不知道是一个什么字符的信息
select id,name from 表名 where name regexp ' C.D';

查询名字中包含  E或者 F 的学生信息
select id,name from 表名 where name regexp ' E | F  ';

查询名字中有 G, 可有可无的学生信息
必须要有的部分是' ’而' '可有可无
select id,name from 表名 where name regexp '  *' ;

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

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

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

查询学生名字不以 ... 开头的学生信息
select id,name from 表名 where name regexp '^[^  ]';

2运算符

MySQL的运算符用于对记录中的字段值进行运算。MySQL的运算符共有四种,分别是:算术运算符、比较运算符、逻辑运算符和位运算符。

2.1算术运算符

以 select 命令来实现最基础的加减乘除运算,MySQL支持使用的算术运算符。

运算符描述
+加法
-减法
*乘法
/除法
%取余

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

image-20220923172414722

2.2比较运算符

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

运算符 描述
= 等于

  	大于
  <    	小于
  =    	大于等于
  <=    	小于等于
  !=或< >    	不等于
  is null    	判断一个值是否为null
  is not null    	判断一个值是否不为null
  between and    	两者之间
  in    	在集合中
  like    	通配符匹配
  greatest    	两个或多个参数时返回最大值
  least    	两个或多个参数时返回最小值
  regexp    	正则表达式

等号 (=)是用来判断数字、字符串和表达式是否相等的,如果相等则返回1,如果不相等则返回0。如果比较的两者有一个值是NULL, 则比较的结果就是NULL。 其中字符的比较是根据ASCII 码来判断的,如果ASCII码相等,则表示两个字符相同:如果ASCII 码不相等,则表示两个字符不相同。

字符串(字母)比较:(‘a’>‘b’)其实比较的就是底层的ASCII码
需要关注的是ascii码有: a、A、0 (97、 65、48 )。
与linux返回值表达相反,linux中运行正常返回值是0,运行异常返回值是非0
image-20220923173025604

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

不等于(<>, !=)

? 不等于号有两种写法,分别是<>或者!=,用于针对数字、字符串和表达式不相等的比较。如果 不相等则返回1,如果相等则返回0,这点正好跟等于的返回值相反。需要注意的是不等于运算符不能用于判断NULL。

select ‘ab’<>‘ba’;

select 1!=2;

image-20220923173201061

大于(>)运算符

   用来判断左侧的操作数是否大于右侧的操作数,若大于返回1,否则返回0,同样不能用于判断NULL。

小于(<)运算符

    用来判断左侧的操作数是否小于右侧的操作数,若小于返回1,否则返回0,同样不能用于判断NULL。

大于等于| (>=)

    判断左侧的操作数是否大于等于右侧的操作数,若大于等于返回1,否则返回0,不能用于判断NULL。

小于等于(<=)

    判断左侧的操作数是否小于等于右侧的操作数,若小于等于返回1,否则返回0,不能用于判断NULL。

between and 比较运算通常用于判断一个值是否落在某两个值之间。
判断某数字是否在另外两个数字之间,也可以判断某英文字母是否在另外两个字母之间。

image-20220923173512447

least 和greatest (取最小值、取最大值)

least: 当有两个或者多个参数时,返回其中的最小值。如果其中一个值为NULL, 则返回结果就为NULL。
greatest: 当有两个或者多 个参数时,返回其中的最大值。如果其中一 个值为NULL,则返回结果就为NULL。
若要判断一组数字或字母中哪个最小、哪个最大,可以通过使用LEAST和GREATEST 来实现。
select least (1,2,3);

select greatest(1,2,3);

select least(‘a’,‘b’,‘c’);

select greatest(‘a’,‘b’,‘c’);

image-20220923173630248

2.3逻辑运算符(布尔值)

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

运算符描述
not或!逻辑非
and 或 &&逻辑与
or逻辑或
xor逻辑异或

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

select not 2;
select !2;

2.逻辑与(and)
当所有的操作数都为非0值且不为null时,返回值为1,否则为0(null与0比较特殊)

逻辑与使用and 或者 &&表示

image-20220926160541381

3.逻辑或(or)
逻辑或通常使用or。
逻辑或表示包含的操作数,任意一个为非零值并且不是NULL值时,返回1,否则返回0。
当有一个操作数为nul1时,如果另一个操作数为非0值,则返回值为1,否则为null。
如两个操作数均为null,则返回值为null。
使用或运算符or进行逻辑判断,运行:

select 2 or 3;

select 2 or null;

image-20220926160724343

2.4位运算符

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

位运算符描述
&按位与
|按位或
~按位取反
^按位异或
<<按位左移
>>按位右移

10转换为二进制数是1010, 15转换为二进制数是1111。

    按位与运算(&),是对应的二进制位都是1的,它们的运算结果为1,否则为0,所以10 & 15的结果为10。

    按位或运算(1),是对应的二进制位有一个或两个为1的,运算结果为1,否则为0,所以10 |15的结果为15。
   按位异或运算(^),是对应的二进制位不相同时,运算结果1,否则为0,所以10^15的结果为5。
   按位取反(~),是对应的二进制数逐位反转,即1取反后变为0,0取反后变为1。数字1的二进制是0001,取反后变为1110,数字5的二进制是0101, 将1110 和0101进行求与操作,其结果是_二进制的0100,转换为十进制就是4。
     以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运

算符在计算过程中的先后顺序。级别高的运算符会先进行计算,如果运算符的级别相同,MySQL会按照顺序从左到右依次进行计算优先级。

优先级运算符
1!
2~
3^
4*、/、%
5+,-
6>>,<<
7&
8|
9=,<=>,>=,>,<=,<,< >,!=,is,like,regexp,in
10between, case, when, then, else
11not
12&&,and
13||,or,xor
14:=

3连接查询

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

3.1内连接

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

select * from test1;

select * from test2;

select test2.name,test2.age,test2.score from test2 inner join test1 on test2.name=test4.name;

image-20220926162206269

3.2左连接

左连接也可以被称为左外连接,在FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示。

左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。

select * from test2 left join test1 on test2.name=test1.name;

image-20220926163239413

3.3右连接

右连接也被称为右外连接,在FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。

右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配。

select * from test2 right join test1 on test2.name=test1.name;

image-20220926163616158

4数据库函数

4.1数学函数

数学函数    	描述
abs (x)    	返回x的绝对值
rand()    	返回0到1的随机数
mod(x,y)  	 返回x除以y以后的余数
power (x,y)    	返回x的y次方
round (x)    	返回离x最近的整数
round(x,y)    	返回数字x截断为y位小数的值
sqrt (x)    	返回x的平方根
truncate (x, y)    	返回数字x截断为y位小数的值
ceil (x)    	返回大于或等于x的最小整数
floor (x)    	返回小于或等于x的最大整数
greatest (x1, x2...)  	 返回集合中最大的值
least (x1, x2...)  	 返回集合中最小的值

-2的绝对值
select abs(-2);

0-1的随机数(0<-x<1)
select rand();

可以搭配运算符
select rand() *100;

除以2的余数
select mod(5,2);

2的3次方
select power(2,3);

离1.89最近的整数
select round(1.49);
select round(1.5);

1.893保留小数点后2位,1.896保留小数点后2位,这里会四舍五入
select round(1.893,2);
select round(1.896,2);

返回平方根
select sqrt(4);
select sqrt (5);

保留小数点后2位,但truncate函数不会四舍五入(截断)
select truncate(1.896,2);

返回大于或等于5.2的最小整数
select ceil(5.2);

返回小于或等于5.2的最大整数
select floor(5.2);

返回最大值
select greatest(1,2,3);

返回最小值.
select least (1,2,3);

4.2聚合函数

MySQL数据库函数中专门有一组函数是特意为库内记录求和或者对表中的数据进行集中概括而设计的,这些函数被称作聚合函数。

聚合函数描述
avg ()返回指定列的平均值
count()返回指定列中非NULL值的个数
min()返回指定列的最小值
max ()返回指定列的最大值
sum(x)返回指定列的所有值之和

返回分数的总和
select sum(score) from 表名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iIIYRzlw-1664238290014)(https://linhaoyang.oss-cn-shanghai.aliyuncs.com/image-20220926170824892.png)]

返回分数的最大值
select max(score) from 表名;

image-20220926171056726

返回分数的平均值
select avg (score) from 表名;

image-20220926171154025

4.3字符串函数

字符串函数    	描述
length (x)    	返回字符串x的长度
trim()    	返回字符串x的长度
concat (x,y)  	 将字符串x的所有字母变成大写字母
upper (x)  	 将字符串x的所有字母变成大写字母
lower (x)    	将字符串x的所有字母变成小写字母
left (x,y)  	 将字符串x的所有字母变成小写字母
right (x,y)    	返回字符串x的后y个字符
repeat (x,y)    	将字符串x重复γ次
space (x)    	返回x个空格
replace(x,y,z)    	将字符串z替代字符串x中的字符串y
strcmp(x, y)    	比较x和y,返回的值可以为 -1,0,1
substring(x,y,z)    	获取从字符串x中的第y个位置开始长度为z的字符串
reverse (x)    	将字符串x反转

4.4日期时间函数

字符串函数    	描述
curdate()    	返回当前时间的年月日
curt ime{)    	返回当前时间的时分秒
now()    	返回当前时间的日期和时间
month (x)    	返回日期x中的月份值
week (x)    	返回日期x是年度第几个星期
hour (x)    	返回x中的小时值
minute (x)  	 返回x中的分钟值
second (x)    	返回x中的秒钟值
dayofweek(x)    	返回x是星期几,1星期日,2星期一
dayo fmonth (x)    	计算日期x是本月的第几天
dayofyear (x)    	计算日期x是本年的第几天


5存储过程

5.1概述

MySQL相关知识都是针对一个表或几个表的单条SQL语句,使用这样的SQL语句虽然可以完成需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条SQL语句一起去处理才能够完成,使用存储过程轻松而高效的去完成这个需求,类似shell脚本里的函数。

5.2简介

存储过程是一组为了完成特定功能的SQL语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

作用:

在于封装一组sql 语句,作为函数,等待锋调用(传参调用)

执行过一次的存储过程,会将二进制代码保存在缓冲区中,以便复用

也是一种常规操作,可以相对灵活的定义,和减少数据库本身的资源消耗

5.3存储过程的优点

(1)执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。
(2) SQL 语句加上控制语句的集合,灵活性高。
(3)在服务器端存储,客户端调用时,降低网络负载。
(4) 可多次重复被调用,可随时修改,不影响客户端调用。
(5)可完成所有的数据库操作,也可控制数据库的信息访问权限。

创建存储过程

delimiter 将语句的结束符号从分号 ; 临时改为两个 将语句的结束符号从分号;临时改为两个 将语句的结束符号从分号;临时改为两个(可以自定义)
create procedure Proc() 创建存储过程,过程名为Proc,不带参数
→begin 过程体以关键字begin开始
→select * from store_info; 过程体语句
→end $$ 过程体以关键字END结束
→delimiter; 将语句的结束符号恢复为分号

5.4创建存储过程

创建存储过程语法格式:

delimiter @@ 将语句的结束符从分号; 临时改为2个$$(可以自定义)

create procedure proc() 创建存储过程,过程名为proc, 不带参数

begin 过程体以关键字 begin 开始

select * from store_info; 过程体语句

end @@ 过程体以关键字end结束

delimiter ; 将语句的结束符号恢复为分号;

实例:

delimiter @@ 自定义结束符
select * from test2; 用原结束符查看,发现无法查看

select * from test2@@ 用自定义结束符查看

image-20220926172834107

create procedure proc1 (in proc_name varchar(20))
-> begin
-> select *from test2 where name=proc_name;
-> end@@

delimiter ; 改回原结束符

image-20220926173140253

调用存储过程
格式 call proc();

call proc1(‘美女’);

image-20220926173254156

查看某个存储过程的具体信息

show create procedure proc1\G

image-20220926173430203

查看当前库存储过程信息

show procedure status like ‘%proc%’\G

image-20220926173529768

5.5删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程

drop procedure if exists proc1; 删除存储过程

show create procedure proc1\G 查看确认

show procedure status like ‘%proc%’\G 查看确认
调用存储过程
格式 call proc();

call proc1(‘美女’);

[外链图片转存中…(img-3AfbKcdZ-1664238290015)]

查看某个存储过程的具体信息

show create procedure proc1\G

[外链图片转存中…(img-7EEQpqwE-1664238290015)]

查看当前库存储过程信息

show procedure status like ‘%proc%’\G

[外链图片转存中…(img-13V6J4gf-1664238290016)]

5.5删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程

drop procedure if exists proc1; 删除存储过程

show create procedure proc1\G 查看确认

show procedure status like ‘%proc%’\G 查看确认
image-20220926173913493

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:59:31  更:2022-09-30 01:03:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:32:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码