
在数据库应用中,最常用的操作是查询,查询的用途就是获取我们想要的数据。今天分享下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;
欢迎关注微信公众号,访问更多精彩:数据之魅。
如需转载,请联系授权,谢谢合作。



1322

被折叠的 条评论
为什么被折叠?



