头歌MySQL——单表查询
第1关:基本查询语句
任务描述
本关任务:
用SELECT语句检索数据表中指定字段的数据;
用SELECT语句检索数据表中所有字段的数据。
相关知识:
(1)查询数据表中指定字段的内容
基本规则为: SELECT 字段名 FROM 表名; 。
(2)查询数据表中多个字段的内容
语法规则为: SELECT 字段名1, 字段名2 FROM 表名; 。
(3)查询数据表中所有字段的内容
语法规则为: `SELECT *` `FROM 表名;`
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
我们为你新建了一个数据表tb_emp,结构如下:

请你查询字段Name和Salary的内容;请你查询整张表的内容。
USE Company;
#请在此处添加实现代码
select Name,Salary from tb_emp;SELECT * from tb_emp;
第2关:带 IN 关键字的查询
任务描述
本关任务:使用IN关键字检索数据表中指定的数据内容。
相关知识
(1)带IN关键字的查询
IN关键字被用在WHERE语句的后边,用来过滤你所需要查询的内容。
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...); 。其中,括号内的数字必须为INT格式的数字。被“点到名”的这些括号里数字对应的内容,都要乖乖的站到前边来展示给大家看。
(2)带NOT IN关键字的查询
刚才我们是在查询括号中出现的内容,加了NOT取反后,就意味着,我们要查询的是除了括号中出现内容外的所有内容。
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...); 。
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
数据表tb_emp跟第一关一致,请你查询当Id不等于1时,字段Name和Salary的内容;
USE Company;
#请在此处添加实现代码SELECT Name,Salary from tb_emp WHERE Id NOT IN(1);
第3关:带 BETWEEN AND 的范围查询
任务描述
本关任务:使用BETWEEN AND关键字检索数据表中指定的数据内容。
相关知识
(1)带BETWEEN AND关键字的查询
BETWEEN AND需要两个参数支持,一个是范围的开始值,另一个就是结束值了。如果字段值满足指定的范围查询条件,就返回这些满足条件的数据内容。
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN n1 AND n2; 。
(2)带NOT BETWEEN AND关键字的查询
像上一关介绍的关键字IN一样,我们还可以对关键字BETWEEN AND进行取反,表示查询指定范围之外的值。
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 NOT BETWEEN n1 AND n2; 。
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
数据表tb_emp跟第一关一致,请你查询当字段Salary范围在3000~5000时,字段Name和Salary的内容。
USE Company;
#请在此处添加实现代码SELECT Name,Salary from tb_emp where Salary BETWEEN 3000 AND 5000;
第4关:带 LIKE 的字符匹配查询
任务描述
本关任务:使用通配符%检索数据表中指定字段的数据。
相关知识
(1)用通配符进行匹配查找。而执行匹配查找的关键字就是LIKE。
SQL语句支持很多种通配符,其中可以和LIKE一起搭配使用的就是通配符%和_了。
(2)使用通配符%模糊匹配数据内容
百分号通配符%可以匹配任意长度的字符,甚至包括零字符。
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%'; 。 其中 % 的位置可以根据需要在字符间变化。
(3)使用通配符_模糊匹配数据内容
下划线通配符_与百分号通配符%类似,也用于模糊匹配。但是区别在于下划线通配符_只能模糊匹配1个字符。如果你执意想用下划线通配符_匹配多个字符,那只能多用几个_咯!
语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_'; 。 其中`_`的位置可以根据需要在字符间变化。
编程要求
根据提示,在右侧编辑器Begin-End处补充代码;
数据表tb_emp跟第一关一致,请你查询所有Name以字母C为起始的员工的Name和Salary的内容;
USE Company;SELECT Name,Salary from tb_emp where Name LIKE "C%";
第5关:查询空值与去除重复结果
任务描述
本关任务:使用关键字IS NULL检索数据表中指定的字段的空值;使用关键字DISTINCT检索数据表中指定的不重复的内容。
相关知识
(1)去除重复结果
出于对数据分析的要求,分析人员需要消除数据表中重复的数据,可消除重复数据的关键字DISTINCT进行消除重复数据。
语法规则为: SELECT DISTINCT 字段名 FROM 表名; 。
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
数据表tb_emp跟第一关一致,使用关键字IS NULL返回数据表中字段DeptId为NULL的所有字段的内容,注意,返回的是指定行所有字段的内容;使用关键字DISTINCT返回数据表中字段Name不重复的内容,注意,只需返回字段Name的内容。
USE Company;SELECT * from tb_emp where DeptId IS NULL;SELECT DISTINCT Name from tb_emp;
第6关:带 AND 与 OR 的多条件查询
任务描述
本关任务:使用关键字AND检索数据表中指定的字段的内容;使用关键字IN检索数据表中指定的字段的内容。
相关知识
(1)带AND关键字的多条件查询
MySQL在WHERE子句中使用AND操作符限制只有满足所有条件的查询才会被返回。可以使用AND连接两个甚至更多个查询条件,多个条件表达式之间用AND分开。
语法规则为: SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2; 。
(2)带OR关键字的多条件查询
与AND相反,在WHERE声明中使用OR关键字表示只需满足两个条件中的其中一个条件即可返回结果。
语法规则为: SELECT 字段名 FROM 表名 WHERE 表达式1 OR 表达式2; 。
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
数据表tb_emp跟第一关一致,使用关键字AND返回数据表中字段DeptId为301并且薪水大于3000的所有字段的内容,其中DeptId的倒数第二个字母为i的大写;使用关键字IN返回数据表中字段DeptId为301和303的所有字段的内容。
USE Company;select * from tb_emp where DeptId="301" AND Salary > 3000; select * from tb_emp where DeptId in(301,303);
第7关:对查询结果进行排序
任务描述
本关任务:以成绩的降序显示学生成绩表中所有信息。
相关知识
(1)对查询结果排序
我们知道在MySQL中从数据表中读取数据都是使用SELECT语句。
如果我们需要对读取的语句进行排序,我们就可以使用Order By子句来设定你想要按照的字段进行排序并返回结果。
语法:SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
你还可以根据自己的需求添加WHERE、LIKE子句来设置条件,再对结果过进行排序显示。
编程要求
在右侧编辑器Begin-End处补充代码,查询学生成绩表中1班同学的所有信息并以成绩降序的方式显示结果。
我们已经为你提供了学生成绩表:
tb_score表数据:
| stu_id | class_id | name | score |
| 1 | 2 | Jack | 81 |
| 2 | 1 | David | 74 |
| 3 | 1 | Mason | 92 |
| 4 | 2 | Ethan | 89 |
| 5 | 1 | Gina | 65 |
USE School;
#请在此处添加实现代码########## 查询1班同学的所有信息以成绩降序的方式显示结果 ##########
select * from tb_score where class_id = "1" order by score DESC;
第8关:分组查询
任务描述
本关任务:对班级表中的班级名称进行分组查询。
相关知识
分组查询的关键字是Group By,查询的是每个分组中 首次出现的一条记录。
语法:SELECT 字段名 FROM 表名 GROUP BY 字段名;
编程要求
在右侧编辑器Begin-End处补充代码,对班级表中的班级名称进行分组查询。
我们已经为你提供了班级表信息:
tb_class表数据:
| stu_id | class_id | name |
| 1 | 367 | Jack |
| 2 | 366 | David |
| 3 | 366 | Mason |
| 4 | 367 | Ethan |
| 5 | 366 | Gina |
USE School;
#请在此处添加实现代码########## 对班级名称进行分组查询 ###
select * from tb_class group by class_id;
第9关:使用 LIMIT 限制查询结果的数量
任务描述
本关任务:使用LIMIT关键字查询班级中第2名到第5名的学生信息,并根据学生成绩进行降序排序。
相关知识
(1)LIMIT的使用
在我们查询大量数据结果时,会返回很多条数据,有需要的记录可能就其中的一条或者几条。比如,实现分页功能,若每页显示10条记录,每次查询就只需要10条记录。
在MySQL中,提供了LIMIT关键字,用来限制查询结果的数量。
语法:SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;
参数说明:第一个参数,OFFSET,可选参数,表示偏移量,如果不指定默认值为0,表示从查询结果的第一条记录开始,若偏移量为1,则从查询结果中的第二条记录开始,以此类推。第二个参数,记录数,表示返回查询结果的条数。
编程要求
在右侧编辑器Begin-End处补充代码,查询班级中第2名到第5名的学生信息,并根据学生成绩进行降序排序。
我们已经为你提供了学生成绩表:
tb_score表数据:

USE School;
#请在此处添加实现代码########## 查询班级中第2名到第5名的学生信息 ##########
select * from tb_score order by score DESC limit 1,4;
如果本文对你有帮助,请点个赞或关注支持一下,你的支持是我创作的最大动力!!!
