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高级(进阶)SQL语句

MySQL高级(进阶)SQL语句

MySQL 查询语句使用进阶

MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'

mysql语句进阶