第二周第四天数据库加强
练习题,复习昨天你的内容
- 精确查询 学生姓名为 马冬梅的学生
- 查询学生编号 大于60的
- 查询学生 年龄大于20的
- 查询学生姓名为 钱璟的
- 查询学生性别为女的
- 查询编号小于 110的学生
- 年龄不等于23 的学生信息
- 学生姓名不等于 张子栋 只显示学生 编号 姓名
- 学生省份为重庆的 只显示 学生编号 姓名 省份
like 模糊查询
只对字符串类型的字段进行模糊查询:varchar,char
关键字:like
通配符:
- % 代表0-n个任意字符
- _代表1个任意字符
练习题:
10 学生姓名 包含 马
11 学生姓名以吴开头
12 学生姓名包含 李
13 姓名包含静的学生
14 姓名是两个字符的学生
15 姓名最后一位 是民的学生
16 姓名第二位为 春的学生姓名
17 姓名只有三个字符的学生
18 姓名是 马什么梅的
19 姓名是 马冬什么
20 姓名是 什么冬梅
not 非
练习题:
查询姓名中不包含冬的学生信息
in
- 单个字段
格式
select * from 表名 where 字段名 in (值1,值2,..);
练习题
查询学生id 是77 88 99 111
22 查询学生年龄 是 23 30
23 查询学生省份 是 安徽 重庆
- 多字段
select * from 表名 where (字段1,字段2,...) in ((值1,值2,...),(值1,值2,...),....)
练习题
24 查询年龄为23省份是重庆或者年龄是29省份是安徽的所有学生信息
25 查询年龄不为23且身份不是重庆的所有学生信息;
26 查询年龄不为23且省份不是重庆或者年龄不为29且省份不是安徽的所有学生信息;
排序
关键字:
order by
规则:
- 升序 asc
- 降序 desc
单字段排序
格式:
select * from 表名 order by 排序字段 排序规则;
练习题
27 查询出所有学生的信息并对年龄字段进行升序排序
28 查询出所有学生的信息并对年龄字段进行降序排序
29 查询出年龄大于19岁的所有学生并以序号进行升序排序;
30 查询出年龄大于19岁的所有学生并以序号进行降序排序;
多字段排序
格式:
select * from 表名 order by 排序字段1 排序规则,排序字段2 排序规则,...;
练习题
31查询出年龄大于19岁的所有学生并以年龄进行降序排序 如果有年龄相同的,以序号升序排序
32 查询出性别为男的所有学生,并按照年龄降序排序,若有年龄相同的则以创建时间进行升序排序
limit
注意:
- limit只适用于MySQL中
- oracle数据库中用 rownum
- sqlSever数据中用top
关键字:
limit
格式
select * from 表名 limit n,m;
解释
- n表示起始位置
- m表示展现m条数据
- 数据库中查询结果是以0为起始序号
练习题
33 查询出年龄大于19岁的所有学生并以序号进行降序排序取前10条记录;
distinct 去重
格式:
select distinct 字段名 from 表名;
练习题
34 查询出所有学生的年龄并去重
group by 分组
分组一般配合聚合函数使用
关键字
- group by
- having
聚合函数
- 统计 count()
- 求和 sum()
- 平均 avg()
- 最大 max()
- 最小 min()
分组并统计
格式
select 分组字段,统计函数 from 表名 group by 分组字段;
练习题
35 统计出男生和女生的总人数
36 统计出每门课的总成绩
37 统计出每门课的平均成绩
38 统计出每门课的最大成绩
39 统计出每门课的最小成绩
40 统计出每门课程的总人数
分组并对聚合函数进行过滤
注意
对聚合函数进行过滤必须用having关键字
格式
select 分组字段,聚合函数 from 表名 group by 分组字段 having 过滤条件
练习题
41 统计出选修人数少于2人的课程
42 统计出成绩不及格的学生
43 统计出全部成绩都不及格的学生
作业
把今天上课练习的43条sql再写一遍