数据分析系列 14/32 | MySQL查询数据练练练

在数据库应用中,最常用的操作是查询,查询的用途就是获取我们想要的数据。今天分享下MySQL中查询SELECT语句。

 

PART01

  MySQL中常用查询

SELECT语句

使用SELECT语句可以在需要时从数据库快速方便地检索、统计和输出数据。SELECT语句功能强大、使用灵活,其属性理论基础是关系数据模型中对表对象的一组关系运算,即选择(selection)、投影(projection)和连接(join)。

MySQL中的SELECT语句的常用语法格式为:

 SELECT [ALL | DISTINCT | DISTINCTROW] <目标列1> [, <目标列2>] ... FROM <表1或视图1> [,<表2或视图2>]... [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>] ] [ORDER BY <列名2> [ASC|DESC] ] [LIMIT [m, ] n ];

 

语法说明:

ALL | DISTINCT | DISTINCTROW为可选项(上面中括号内的均为可选项),指定是否应返回结果集中的重复行。默认为ALL。

SELECT子句:指定要显示的字段或表达式。FROM指定数据来源的表或视图。WHERE子句为可选项,用来指定过滤条件。GROUP BY用于将查询结果集按指定的字段值分组,HAVING用于指定分组结果集的过滤条件;ORDER BY将查询结果按照某字段的值进行升序或降序排序,默认升序。LIMIT用来限定查询的结果集显示的条数。

 

单表查询

单表查询是指我们仅在一个表进行数据查询。上面我们已经说了语法,下面我们来通过前面创建的学生表等一系列表实际查询一下。(PS.由于内容过多,这里不输出结果,但我保证每条查询语句正确)

 

查询指定字段

查询一下所有班级的班级编号、所属学院和班级名称。

SELECT classNo, department, className FROM tb_class;

 

查询所有字段

查询所有字段的两种方法,一种是使用(*)通配符匹配,一种是列出所有字段(即列名)。

SELECT * FROM tb_student;SELECT studentNo, studentName, sex, birthday,native, nation, classNo, FROM tb_student;

 

查询经过计算的值

查询全体学生的姓名、性别和年龄。

SELECT studentName, sex, ‘Age:’, YEAR(NOW())-YEAR(birthday)FROM tb_student;

 

说明:上面的列名第三项和第四项都不是字段名,第三项是一个字符串常量,第四项是一个计算表达式,用于计算学生的年龄,其中又包含了两个函数:NOW()函数返回当前日期和时间值,也可以使用CURDATE()函数返回当前日期,YEAR()函数返回指定日期对应的年份。

定义字段的别名

我们在查询的时候,有时候列名比较繁琐,我们想自定义字段名称,这里需要在目标列后面添加AS子句。如 “字段名 [AS] 字段别名”,AS可省略。

SELECT studentName AS 姓名, sex 性别, YEAR(NOW())-YEAR(birthday) 年龄 FROM tb_student;

 

PART02

  MySQL中的常用聚合函数表

 

MySQL中常用聚合函数表

函数名说明
COUNT([DISTINCT | ALL] * )统计数据表中的记录数
COUNT([DISTINCT | ALL] <列名> )统计数据表中的一列中值的个数
MAX([DISTINCT | ALL] <列名>)求数据表的一列值中的最大值
MIN([DISTINCT | ALL] <列名>)求数据表的一列值中的最小值
SUM([DISTINCT | ALL] <列名>)计算数据表的一列中值的总和
AVG([DISTINCT | ALL] <列名>)计算数据表的一列中值的平均值

其中,如果指定关键字DISTINCT,则表示在计算时要取消指定列中的重复值;如果不指定DISTINCT短语或指定ALL短语(ALL为默认值),则表示不取消重复值。PS.除了函数COUNT(*)外,其余聚合函数(包括COUNT(<列名>))都会忽略空值。

下面根据之前的表来做一下示例。这里只给出SQL命令。

#查询学生总人数SELECT COUNT(*) FROM tb_student;#查询选修了课程的学生总人数SELECT COUNT(DISTINCT studentNo) FROM tb_score;#计算选修课程编号为“2017001”的学生平均成绩SELECT AVG(score) FROM tb_score WHEREcourseNo=’ 2017001;#计算选修课程编号为“2017001”的学生最高分SELECT MAX(score) FROM tb_score WHEREcourseNo=’ 2017001;#如果有学生先修课程后没有成绩,即字段score的值为空,在使用SUM(score)、AVG、MAX、MIN等聚合函数进行计算时,系统都会自动忽略空值。

 

PART 03

 MySQL中的分组聚合查询

 

分组聚合查询

分组聚合查询是通过把聚合函数(如COUNT()、SUM()等)添加到一个带有GROUP BY分组子句的SELECT语句中来实现的。

 

GROUP BY子句的语法格式是:

[GROUP BY 字段列表] [HAVING <条件表达式>]

 

其中,GROUP BY对查询结果按字段列表进行分组,字段值相等的记录分为一组;指定用于分组的字段列表可以是一列,也可以是多个列,彼此间用逗号分隔;HAVING短语对分组的结果进行过滤,仅输出满足条件的组。

 

PS.使用GROUP BY子句后,SELECT子句的目标列表达式只能包含GROUP BY子句中字段列表和聚合函数。

下面看一下具体实例SQL:

#查询各个课程号及相应的选课人数SELECT courseNo, COUNT(studentNo) FROM tb_scoreGROUP BY courseNo;#查询每个学生的选课门数、平均分和最高分SELECT studentNo, COUNT(*) 选课门数, AVG(score) 平均分, MAX(score) 最高分 FROM tb_score GROUP BY studentNo;#查询学生选课的平均成绩,只取大于80分的才输出SELECT  AVG(score) 平均分 FROM tb_scoreHAVING AVG(score)>=88;

 

欢迎关注微信公众号,访问更多精彩:数据之魅

如需转载,请联系授权,谢谢合作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值