持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
02、Mysql高级查询
01.SQL高级查询_排序
-
1.排序语句:order by 排序字段名 asc(默认的-升序) / desc(降序);
-
2.例如:查询所有服装类商品,将查询结果以价格升序排序:select * from product where category_id = '服装' order by price asc;
-
3.可以对数值类型、日期类型、英文字母的字符串字段进行排序;
-
4.对多列进行排序: 1).需求:查询所有的服装类商品,按价格升序排序,如果价格相同,按生产日期升序排序 select * from product where category_id = '服装' order by price asc,proDate asc;
2).排序方式:先按第一列排序,如果第一列的值相同,再按第二列排序。如果第一列的值不同,就忽略第二列的排序。
-
count:统计指定列不为NULL的记录行数;
-
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
-
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
-
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
-
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
02.SQL高级查询_聚合函数
1).count(*(建议)/字段名(不建议)):统计指定列不为NULL的记录行数 //不写where 条件的话 统计指定字段不为null 的行数 如果为*的话 count(*)只有有一个字段不为null 都会统计 // count 里面可以加其他的 如 0 1 2 3 .。。。 效果一样
例如:查询所有服装类商品有多少个?
select count(*) from product where category_id = '服装';
2).sum(字段):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0---用于:数值类型
例如:查询所有服装类商品的总价格
select sum(price) from product where category_id = '服装';
3).max(字段):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算.---用于:数值类型、日期类型
例如:查询服装类商品的最大价格
select max(price) from product where category_id = '服装';
查询服装类商品的最大生产日期
select max(proDate) from product where category_id = '服装';
4).min(字段):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算---用于:数值类型、日期类型
例如:查询服装类商品的最低价格
select min(price) from product where category_id = '服装';
查询服装类商品的最小生产日期
select min(proDate) from product where category_id = '服装';
5).avg(字段):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0----用于:数值类型
例如:查询服装类商品的平均价格
select avg(price) from product where category_id = '服装';
//#5 查询商品的最大价格和最小价格
//SELECT MAX(price),MIN(price) FROM product;
6).关于聚合函数查询的结果列:
例如:查询服装类商品的最高价格:
select max(price) from product where category_id = '服装';
如果想同时显示商品名称,你可能会这样写:
select max(price),pname from product where category_id = '服装';//pname的结果并不是与max(price)属于同一条记录。
注意:聚合函数的结果是一个"计算的结果",它与表中的任何记录无关,所以不要同时显示其它列,无意义,不是同一条记录。
所以:聚合函数的查询结果,应该只包含"聚合函数的结果"不能再包含其他列。
03.SQL高级查询_分组: 可以对多列进行分组
1).需求:一条语句查询出每类商品的最高价格是多少?
select max(price),category_id from product group by category_id;
2).分组是"手段",通常在分组后,要进行"聚合函数"查询。
3)."分组查询"的结果字段:应该只包含聚合字段、分组字段。不要再包含其它字段,否则无意义。
4).练习:查询出每个生产日期的商品的总数是多少?
select count(*),proDate from product group by proDate;
5).having子句:对聚合函数的结果的筛选:
需求:查询出每类商品的总价格是多少?
select sum(price),category_id from product group by category_id;
结果中只保留总价大于3000元的信息:
select sum(price),category_id from product where sum(price) > 3000 group by category_id;//错误的
说明:where子句不能对聚合的结果进行筛选,因为where子句优先级高,执行的早,那时还没有执行聚合函数,所以不能使用
where对聚合后的结果进行筛选。应该使用:having
select sum(price),category_id from product group by category_id having sum(Price) > 3000;
6).目前我们学习的SQL语句的编写顺序:
select 字段列表 from 表名 where 条件 group by 分组字段 having 聚合后的筛选条件 order by 排序字段
执行顺序:
1).from
2).where
3).group by
4).执行聚合函数avg,sum...
5).having
6).select
7).order by
04.SQL高级查询_分页查询:
1).使用的语法:limit M,N
M : 从第几条开始获取(第一条索引为:0)
N : 取多少条(每页显示的条数)
2).例如:分页查询product表,每页显示4条
第一页:
select * from product limit 0,4
第二页:
select * from product limit 4,4
第三页:
select * from product limit 8,4
.....
第N页 :
select * from product limit (N(当前页数) - 1) * 每页条数 ,每页条数
3).注意:
1).M和N:必须是正整数,否则抛异常。
2).如果M为0,可以省略,例如:
select * from product limit 3;//select * from product limit 0,3
05.MySQL的备份与恢复:
1).备份:将数据库软件中的"逻辑数据库","表","数据"等信息导出到一个外部文件中。可以用于数据库的备份和迁移。 在SQLYog中:选中要备份的数据库-->右键-->备份/导出-->以SQL转储文件的形式备份数据库-->打开界面-->上面选择:数据和结构。中上:指定导出文件的路径和文件名-->执行导出
2).恢复:将外部之前备份的数据库文件重新恢复到数据库中。 在SQLyog左侧右键--->导入--->打开界面-->选择备份文件的位置--->执行导入