MySQL数据库的查找
一.聚合函数(统计函数)
聚合函数也称为分组函数,因为这些函数都是对某一组数据进行操作的
1.聚合函数只有5个
-
count() 计数
-
sum 求和
-
avg 平均值
-
max() 最大值
-
min() 最小值
-
多行处理函数:
聚合函数是
多行处理函数:其特点是输入多行,结果输出一行
分组函数自动忽略NULL
- 单行处理函数:
单行处理函数:输入一行,输出一行
只要有NULL参与的运算结果都为NULL
如:select ename,(sal+comm)*12 from emp;
- 空数据的处理
ifnull处理可能为空的数据,即将null数据当做指定数据处理的方式
select ename , ifnull(comm,0) from emp;
二:查询的简单分类(单表)
一条简单查询语句的先后顺序:
select:-------------开始
from table:----------首先找到表
where : ---------------按照指定的条件进行过滤
group by:------------按照where过滤后的指定字段分组
having:---------------先where 后进行分组后在对分组后的数据进行指定条件的过滤
order by: -----------对前面的数据进行排序,默认是升序,desc是降序
limit : -----------------对前面得到的表进行分页查询,
select 后面要求输出的数据----------------最后将数据输出
1:分组查询(重要)
当一条语句有group by 的话,那么select 后面只能跟所参与分组的字段和聚合函数!!!
group by:按照指定字段分组
- 一次对一个字段进行分组
select count(dID) from work group by dID;
- 多个字段进行分组
select count(dID) from work group by dID,salary;
先按照前面那个进行分组,分完后再按照第二个字段进行再分组
2:子查询(重要)
3:where 和 having 区别
他们都是用来筛选过滤指定条件的关键字
where 是在select 之后的语句,是在分组前就需要筛选出来
having 是需要在where筛选后再分组后再进行重新过滤筛选的
4.order by 数据排序:
- 升序排序:
order by salary ; 默认是升序排序
也可以这么写:
order by salary asc; 升序
- 降序排序
order by salary desc; 降序
-
多行排序:
实际上是指,当第一个排序出现相同值时触发第二个条件对这几个相同值按照另一种排序条件进行排序
案例:按照工资排序,如果工资相同按照姓名排序
order by salary desc ,ename desc;
5.limit n,m:分页查询
m代表每一页显示m调数据
n代表从第几条数据开始输出,第一条数据是0;
- 分页公式:
pageSize: 3 ---》每页大小
page: ----->当前页
分页公式:
(page-1)*pageSize,pageSize;
6.模糊查询:like();
模糊查询中的两个特殊符号 ‘__’ , ‘%’
‘__’:代表一个字符
‘%’:代表任意字符,%出现在需要查询的字’o’的左边,代表查询的值是xxxxo;
%出现在右边代表值为:oxxxxx;两边都出现,代表存在o的值
7.正则表达式查询:regexp
select * from student where adde regexp '[a-zA-Z]';
8.一些简单的查询的运算符
=:等于
<> 或者 !=:不等于
<:小于
>:大于
<=:小于等于
>=:大于等于
between ...and....:两个字之间,相当于 >= and <=;
is null:为空
is not null:不为空
and:并且
or:或者
in: 包含,相当于多个or(a = 1 or a = 2...)
not in :不包含
like:模糊查询'-' '%'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPK30mct-1600316272377)(MYSQL%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%9F%A5%E6%89%BE.assets/1.png)]
三:连接查询(重要)
1.表连接查询的划分
1. 内连接:
等值连接---------->就是连接条件左右两边相等
非等值连接--------->就是连接条件是在一个区间(between...and..)
自连接------------->自己连自己进行查询
2. 外连接
左连接----------->以左表为主,左表的数据在右表没有那么右显示null
右连接----------->以右表为主,右表的数据在左表没有那么左显示null
3.全连接(用很少)
2.笛卡尔乘积现象
当左右两边的表没有进行任何限制时,其组合出来是他们的成积的数据
select * from student join score; #笛卡尔乘积
3.内连接查询
- 等值查询
方法一:使用老式的写法from .... where
select cla.classname,avg(score) from classes cla , course cou,studentcourse scou,student stu where cla.classno = stu.classno and stu.stuno=scou.stuno and scou.cno = cou.cno;
方法二:新式写法 join....in....where...
select cla.classname,avg(score) from classes cla
join student stu on cla.classno = stu.classno
join studentcourse scou on stu.stuno=scou.stuno
join course cou on scou.cno = cou.cno;
4.外连接查询
- 左外连接(左连查询)
select stuname,classname,cname,score from student stu join course cou left join studentcourse scou on cou.cno = scou.cno and scou.stuno = stu.stuno join classes cla on stu.classno = cla.classno where score is null;
- 右外连接(右连接)
select stuname,classname,cname,score from student stu join course cou right join studentcourse scou on cou.cno = scou.cno and scou.stuno = stu.stuno join classes cla on stu.classno = cla.classno where score is null;
四:MYSQL中存储过程定义与使用
无参存储过程一定先将界定父修改为’//’ :delimiter
1.无参的存储过程
delimiter // 修改界定符
创建函数过程:
create procedure proc01()
begin
select count(id) from student;
end
// 界定符
调用过程:
call proc()//
2.带输入参数的存储过程
创建函数的过程
create procedure proc02(str char(2)) str 是输入的形式参数 后面跟类型
begin
select * from student where sex = str;
end
//
调用过程
call proc('男')//
3.带输入输出参数的存储过程
创建函数的过程
create procedure proc03(str char(2),out count int)
begin
select count(*) into count from student where sex = str;
end
//
调用过程
call proc03('男',@count)// @创建一个全局参数接收输出值
select @count;// select
4自定义函数
create funtion func01()
returns int #规定返回值类型
begin
declare h int; #声明变量必须放在begin的第一行
select hour(now()) into h; #将值赋值到h变量
return h;
end
//
函数的调用:
select func01();//
五:数据库的备份还原
1.DOS下备份
mysqldump -uroot -p123 数据库名字>d:/xxxx.sql;
2.DOS下恢复
第一种:mysql -uroot -p123 数据库名字<d:/xxxx.sql;
第二种:先创建数据库,再切换到此数据库在恢复
create database xxxx;
use xxxx;
source d:/xxxx.sql;
nto h; #将值赋值到h变量
return h;
end
//
函数的调用:
select func01();//
## 五:数据库的备份还原
### 1.DOS下备份
mysqldump -uroot -p123 数据库名字>d:/xxxx.sql;
### 2.DOS下恢复
第一种:mysql -uroot -p123 数据库名字<d:/xxxx.sql;
第二种:先创建数据库,再切换到此数据库在恢复
create database xxxx;
use xxxx;
source d:/xxxx.sql;