MySQL第二章-相关查询、分组、排序、模糊、分页、连接、函数

知识点一

查询关键字:select

查询语法结构:select  列名from表名where条件  group by(分组)     order by(排序)

聚合函数

Count(*) 统计记录条数  sum(studentresult)统计某一列累加总和,要求列中的数据是数值类型

Max()求最大值,min()求最小值  avg() 求平均值

聚合函数的特点,针对数据进行统计,返回一个结果值。

总分

最高

最低

平均

441

90

50

73.5

 

排序

排序方式有升序(asc)和降序(desc),默认情况下是升序。

/*查询所有学员信息按年级升序,再按生日降序*/

select * from student order by gid,birthday desc;

多条件排序原理是在按第一个条件排序后的基础上,再按第二个条件来排序。

分组

分组就是结合聚合函数来对数据进行分组统计. 关键字:group by

根据分组的列把数据进行分组,然后再分别进行统计。

/*统计男女学员各有多少*/

select sex,count(*)  from student group by sex

/*统计每个年级各有多少学员*/

SELECT gid,count(*) from student group by gid;

/*统计每门科目的考试平均分*/

select subjectno,avg(studentresult) from result group by subjectno;

 

Having:在分组之后的结果中再一次进行数据的筛选。此关键字必须要结合分组来使用。

/*查询哪些学员在科目一参加了补考*/

select studentno, count(*) from result where subjectno  = 1

group by studentno having count(*)>1

 

模糊查询

模糊查询就是指查询条件不确定的情况。

/*模糊查询

 %: 0-N任意字符

 _: 一个任意字符

 []:区间指定内的一个字符

*/

/*查询姓张的学员  like */

select * from student where name like '张_'

 

/*查询考试成绩在 70 - 90 之间的数据  between */

select * from result where studentResult>=70 and studentResult<=90;

select * from result where studentResult between 70 and 90;

/*查询没有邮箱的学员信息 is null 查询列值为 null 的数据*/

select * from student where email is null;

 

/*查询广州和深圳的学员信息  in */

select * from student where address in ('广州','深圳')

分页

只按要求显示部分行数据.

/*实现分页需要的数据有哪一些: 总记录数、每页大小、总页数 */

/*分页 第一个数表示: 跳过多少条,第二个数表示:提取多少条*/

select * from student limit 0,3

连接查询

连接查询:内连接,外连接(左连接,右连接),交叉连接

/*两种方式都是内连接:特点,两个表的前后顺序调换结果没有影响

建议用inner join ... on ...方式,性能好一些

*/

select s.studentno,name,examDate,studentResult from  student s

inner join result r on s.studentNo = r.studentNo;

 

select s.studentno,name,examDate,studentResult

from result r,student s where s.studentNo = r.studentNo

学号

姓名

科目名称

考试时间

成绩

 

 

 

 

 

 

外连接:左外连接

左外连接:左边的表是主表,右边的表是子表,主表的数据全部显示,子表的数据来填充,如果子表中没有相关的数据填充,则显示NULL。

select * from student s left join result r

on s.studentNo = r.studentNo

 

/*查询没有参加考试的学员信息*/

select * from student  s left join result r

on s.studentNo = r.studentNo where r.studentNo is null

子查询

/*只有一个条件:'一年级' 要求查询所有一年级的学员信息

分析:取一年级的编号,再把编号作为查询条件在学员表中进行查询

子查询,括号里面的查询会先执行,取得一个结果作为外面查询的条件。

子查询语句可以出现在查询语句的任意地方。*/

select * from student where gid =

(select id from grade where gradename = '一年级');

 

select * from student s join grade g

on g.id= s.gid where g.gradeName = '一年级'

注意:表连接能实现的功能,子查询都能实现,但子查询实现的功能,表连接不一定能实现。

      当查询结果只是作为查询条件时,选择用子查询,

      当查询结果数据来自于多张表,选择用表连接。

      子查询使用 =、>=、< 、<= 、!=  要保证子查询的返回结果只有一个值,

      如果有多个值返回,则用只能用 in

 

/*查询参加考试的学员信息  */

select * from student where studentno not in

(select studentno from result where subjectno = 1)

函数

字符串函数、数学函数、日期函数、聚合函数、系统函数

 

 

日期函数

 

总结

 

作业

/*把密码把所有的 o 变成 0 把所有的 l 变成 1 一句SQL实现*/

update card set password = replace( replace(password,'o','0') ,'l','1')

 

1. 查询20岁以下的学员信息

2. 查询Java课程的考试成绩

3. 查询女学员信息,包括(学号、姓名、年龄、性别)

4. 查询课时超过60的科目信息

 

5. 查询班级中姓张的单名的学员信息

6. 查询考试成绩在70-80之间的数据

7. 查询广州、北京的学员信息

8. 查询没有邮箱地址的学员信息     is null       =’’。

 

9. 查询Java考试后前3名的考试成绩。

10. 分页查询第3页的 学员信息 每页3条。

11. /*查询本月生日的学员信息*/。

12. 查询本周的开卡信息。

13. 统计班级学员的平均年龄。

统计所有科目的总课时数。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值