MySQL进阶语句
Posted 再来半包
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL进阶语句相关的知识,希望对你有一定的参考价值。
MySQL进阶操作
SELECT *FROM student ; ——查询所有的信息
模糊查询
SELECT * FROM student WHERE sname ='张三' ; ——查询有where条件的信息
SELECT * FROM student WHERE sname LIKE '张%';——右模糊查询
SELECT * FROM student WHERE sname LIKE '%三';——左模糊查询
SELECT * FROM student WHERE sname LIKE '%春%';——左右都模糊查询
范围查询
2.1关系运算符 > >= < <= = < >
select *from student where sage >23; ——查询年龄大于23的全部信息
select *from student where sage <>23; ——查询年龄不等于23的全部信息
select *from student where sage <23; ——查询年龄小于23的全部信息
2.2逻辑运算符: and or not (经常与in一起连着用)
select *from student where ssex ='男' and sage='22';
select *from student where ssex ='女' or sage>30 ;
select *from student where sage not in(20,30,21) /* not 是非运算符,其意思为非*/
2.3 between … and…
select * from student where sage between 20 and 30 ;
2.4算术运算符: + - * / %
select * from student where sage+10=31;
连接
3.1内连接
关键字:inner join on
SELECT * FROM a_table a INNER JOIN b_table b ON a.a_id = b.b_id;
-- 将两个表中有相同字段的信息显示出来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCGveyrw-1622438240172)(image\\mysql\\inner.jpg)]
组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分。
3.2左连接
关键字:left join on / left outer join on
select * from a_table a left join b_table b on a.a_id = b.b_id;
-- left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlHeyzuD-1622438240173)(image\\mysql\\left.jpg)]
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
3.3右连接
关键字:right join on / right outer join on
select * from a_table a right outer join b_table b on a.a_id = b.b_id;
-- right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QM8dmvSo-1622438240174)(image\\mysql\\right.jpg)]
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
临时表
语法:
select *from sc, (select*from student where sage>= 23) linshiwhere sc.sno=linshi.sno;
通过定义条件,创建一个达到要求数据组成的临时表,在与sc表进行连接
嵌套+子查询
语法:
select*from sc where sc.sno in(select sno from student where sage>20)
以上代码表示的意思为:查询sc表中,sno 在in后面的条件中的范围,后面的范围意思为,显示学生表中年龄大于20的学号,则将给前面的范围就是返回的年龄大于20的学号的学生信息
分组
语法:
select sno
from sc
where sc.score > 55 -- 显示成绩大于55的学生信息
group by sno -- 按照学号将自己的东西归为一组
having count (sno) >=3 -- 对分好组的信息再次做进一步的条件限制
将要查看的数据信息分组查看
内聚函数
铺垫导读:在MySQL数据库中是存在一些内置的函数,这些函数有各自的功能,其中最常用的是内聚函数
1、内聚函数:count(), avg(), max(), min(), sum()
1.count() : 是mysql 的一个内聚函数,是用来统计表中记录的一个函数,返回匹配条件的行数
2.count()语法:
1)count(*):-- 包括所有列,返回表中的记录数,相当于统计表中的行数,在统计表的行数,在统计结果的时候,不会忽略列值为null的记录
2)count(列名):-- 只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不会包括空字符串和0),即列值为NULL的记录不统计在内
3)count(1) – 忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录
3.count(*)&count()&count(列名) 执行效率比较
1)如果列为主键,count(列名) 效率优于count(1)
2)如果列不为主键,count(1)效率优于 count(列名)
3)如果表中存在主键,count(主键列名) 效率最优
4)如果表中只有一列,则count(*)效率最优
5)如果表有多列,且不存在主键,则count(1)效率优于count(*)
4.因为count(*) 和count(1)统计过程中不会忽略列值为NULL的记录,所以可以通过以下两种方式来统计列值为NULL的记录数
select count(1) from student where sname is null;
select count(*) from student where sname is null;
5.特例情况
select count (' ') from student; -- 返回表中的记录数
select count (0) from student ; -- 返回表中的记录数
select count (null) from student ; -- 返回0
小结:1)当列少的时候尽量用count(*) 或者count (主键)
2)当为了提升效率的时候尽量用count(主键),因为主键事默认添加主键索引的,索引查询的时候速度快
ount (0) from student ; – 返回表中的记录数
select count (null) from student ; – 返回0
小结:1)当列少的时候尽量用count(*) 或者count (主键)
2)当为了提升效率的时候尽量用count(主键),因为主键事默认添加主键索引的,索引查询的时候速度快
以上是关于MySQL进阶语句的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL进阶学习笔记三:MySQL流程控制语句!(视频序号:进阶_7-10)
MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'