本节用到的两张表:
- 学生信息表:
student_info表
number | name | sex | id_number | department | major | enrollment_time |
---|---|---|---|---|---|---|
20180101 | 杜子腾 | 男 | 158177199901044792 | 计算机学院 | 计算机科学与工程 | 2018-09-01 |
20180102 | 杜琦燕 | 女 | 151008199801178529 | 计算机学院 | 计算机科学与工程 | 2018-09-01 |
20180103 | 范统 | 男 | 17156319980116959X | 计算机学院 | 软件工程 | 2018-09-01 |
20180104 | 史珍香 | 女 | 141992199701078600 | 计算机学院 | 软件工程 | 2018-09-01 |
20180105 | 范剑 | 男 | 181048200008156368 | 航天学院 | 飞行器设计 | 2018-09-01 |
20180106 | 朱逸群 | 男 | 197995199801078445 | 航天学院 | 电子信息 | 2018-09-01 |
- 学生成绩表:
student_score表
number | subject | score |
---|---|---|
20180101 | 母猪的产后护理 | 78 |
20180101 | 论萨达姆的战争准备 | 88 |
20180102 | 母猪的产后护理 | 100 |
20180102 | 论萨达姆的战争准备 | 98 |
20180103 | 母猪的产后护理 | 59 |
20180103 | 论萨达姆的战争准备 | 61 |
20180104 | 母猪的产后护理 | 55 |
20180104 | 论萨达姆的战争准备 | 46 |
最简单的查询语句莫过于:
SELECT * FROM 表名;
1、查询单个列
格式:
SELECT 列名 FROM 表名;
2、查询多个列
格式:
SELECT 列名1, 列名2, 列名3, ... 列名n FORM 表名;
我们把SELECT
语句后面跟的多个查询列称为查询列表,查询列表中的列名可以按照任意顺序摆放,结果将按照我们指定的列名顺序呈现。
3、查询所有列
格式:
SELECT * FROM 表名:
4、列的别名(AS)
为列取另外一个名字,叫列的别名,比如原来的列是英文的,我想显示的时候把列的名称从英文改成中文,这个时候就可以用列的别名。
格式:
SELECT 列名 [AS] 列的别名 FROM 表名;
需要注意:列的别名仅在本次SELECT
查询语句中生效,并没有永久改变列的名称,下次再查询时列仍按原来的名字显示。
5、查询结果去重(DISTINCT)
5.1 去除单列的重复结果
有时候某个列或者某一些列中重复数据太多,我们只想查询不重复的数据,此时可以用**DISTINCT**
去重。
格式:
SELECT DISTINCT 列名 FROM 表名;
5.2 去除多列的重复结果
格式:
SELECT DISTINCT 列名1, 列名2, ...列名n FROM 表名;
6、限制查询结果条数(LIMIT)
有时查询列的数据时会显示太多行,此时我们可以限制一下显示数据的行数,可以用**LIMIT**
。
格式:
# 从开始行显示,一共显示这么多行
SELECT 列名1, 列名2, ...列名n FROM 表名 LIMIT 开始行, 显示行数;
# LIMIT后面仅跟一个参数时,默认从第0行开始,LIMIT后面跟的参数代表显示的行数
SELECT 列名1, 列名2, ...列名n FROM 表名 LIMIT 显示行数;
7、对查询结果排序(ORDER BY)
7.1 单列排序
格式:
# 升序
SELECT * FROM 表名 ORDER BY 列名 [ASC];
# 降序
SELECT * FROM 表名 ORDER BY 列名 DESC;
7.2 多列排序
格式:
SELECT * FROM 表名 ORDER BY 列名1 ASC, 列名2 DESC;
代表先按照列名1升序排列,如果列名1的值相同,再按照列名2降序排列,有个优先级的问题,列名在前的优先级高。
8、将查询结果赋值给变量
需要存储函数和存储过程这一节的知识,场景就是将SELECT
的结果赋值给变量。
举例:
CREATE PROCEDURE get_score_data(
OUT max_score DOUBLE,
OUT min_score DOUBLE,
OUT avg_score DOUBLE,
s VARCHAR(100)
)
BEGIN
SELECT MAX(score), MIN(score), AVG(score) FROM student_score WHERE subject = s INTO max_score, min_score, avg_score;
END;