本节用到的两张表:

  • 学生信息表:

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

最简单的查询语句莫过于:

  1. SELECT * FROM 表名;

1、查询单个列

格式:

  1. SELECT 列名 FROM 表名;

2、查询多个列

格式:

  1. SELECT 列名1, 列名2, 列名3, ... 列名n FORM 表名;

我们把SELECT语句后面跟的多个查询列称为查询列表,查询列表中的列名可以按照任意顺序摆放,结果将按照我们指定的列名顺序呈现。

3、查询所有列

格式:

  1. SELECT * FROM 表名:

4、列的别名(AS)

为列取另外一个名字,叫列的别名,比如原来的列是英文的,我想显示的时候把列的名称从英文改成中文,这个时候就可以用列的别名。

格式:

  1. SELECT 列名 [AS] 列的别名 FROM 表名;

需要注意:列的别名仅在本次SELECT查询语句中生效,并没有永久改变列的名称,下次再查询时列仍按原来的名字显示。

5、查询结果去重(DISTINCT)

5.1 去除单列的重复结果

有时候某个列或者某一些列中重复数据太多,我们只想查询不重复的数据,此时可以用**DISTINCT**去重。

格式:

  1. SELECT DISTINCT 列名 FROM 表名;

5.2 去除多列的重复结果

格式:

  1. SELECT DISTINCT 列名1, 列名2, ...列名n FROM 表名;

6、限制查询结果条数(LIMIT)

有时查询列的数据时会显示太多行,此时我们可以限制一下显示数据的行数,可以用**LIMIT**

格式:

  1. # 从开始行显示,一共显示这么多行
  2. SELECT 列名1, 列名2, ...列名n FROM 表名 LIMIT 开始行, 显示行数;
  3. # LIMIT后面仅跟一个参数时,默认从第0行开始,LIMIT后面跟的参数代表显示的行数
  4. SELECT 列名1, 列名2, ...列名n FROM 表名 LIMIT 显示行数;

7、对查询结果排序(ORDER BY)

DataGrip里直接可以通过按钮选择。

7.1 单列排序

格式:

  1. # 升序
  2. SELECT * FROM 表名 ORDER BY 列名 [ASC];
  3. # 降序
  4. SELECT * FROM 表名 ORDER BY 列名 DESC;

默认是升序排序,即ASC不写也会按照升序排序。

7.2 多列排序

格式:

  1. SELECT * FROM 表名 ORDER BY 列名1 ASC, 列名2 DESC;

代表先按照列名1升序排列,如果列名1的值相同,再按照列名2降序排列,有个优先级的问题,列名在前的优先级高。

8、将查询结果赋值给变量

需要存储函数和存储过程这一节的知识,场景就是将SELECT的结果赋值给变量。
举例:

  1. CREATE PROCEDURE get_score_data(
  2. OUT max_score DOUBLE,
  3. OUT min_score DOUBLE,
  4. OUT avg_score DOUBLE,
  5. s VARCHAR(100)
  6. )
  7. BEGIN
  8. SELECT MAX(score), MIN(score), AVG(score) FROM student_score WHERE subject = s INTO max_score, min_score, avg_score;
  9. END;