任务一 单表查询
知识点
1. MySQL中SELECT语句的基本语法格式是什么?
答:SELECT语句的基本语法格式为:
SELECT [ALL|DISTINCT] 字段列表
[INTO OUTFILE '文件名']
FROM 表名或视图列表
[WHERE 条件表达式]
[GROUP BY 字段名 [HAVING 条件表达式]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [偏移量,] 行数];
2. SELECT语句中各子句的执行顺序是怎样的?
答:SELECT语句的执行顺序为:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。即先确定数据来源(FROM),再过滤数据(WHERE),然后分组(GROUP BY),分组后过滤(HAVING),接着选择输出字段(SELECT),再排序(ORDER BY),最后限制行数(LIMIT)。
3. ALL和DISTINCT关键字的作用是什么?
答:ALL表示查询所有记录(包括重复行),是默认值;DISTINCT表示查询结果中去除重复行,只保留唯一的记录。语法:SELECT [ALL|DISTINCT] 字段名 FROM 表名;
4. 如何在查询结果中使用别名(AS)?
答:使用AS关键字为字段或表指定别名,使查询结果更易读。语法:SELECT 字段名 AS 别名 FROM 表名 AS 别名;。AS关键字可以省略,直接用空格分隔。例如:SELECT sname AS 姓名, sage AS 年龄 FROM student;
5. 如何查询表中的指定字段?
答:在SELECT后面列出要查询的字段名,用逗号分隔。例如:SELECT sno, sname, sage FROM student;,只查询学号、姓名和年龄三个字段。
6. 如何查询表中的所有字段?
答:使用星号(*)代表所有字段。例如:SELECT * FROM student;,查询student表中的所有字段的所有记录。
7. LIMIT关键字的作用是什么?如何使用?
答:LIMIT用于限制查询结果返回的行数。语法:LIMIT 行数 或 LIMIT 偏移量, 行数。例如:SELECT * FROM student LIMIT 5; 返回前5条记录;SELECT * FROM student LIMIT 2, 3; 从第3条开始返回3条记录(偏移量从0开始计数)。
8. WHERE子句的作用是什么?
答:WHERE子句用于指定查询条件,从表中筛选出满足条件的记录。只有满足WHERE条件表达式的记录才会出现在查询结果中。例如:SELECT * FROM student WHERE sage > 20; 查询年龄大于20的学生。
9. WHERE子句中可以使用哪些运算符?
答:WHERE子句中可以使用的运算符包括:
- 比较运算符:=、
<、>、<=、>=、<>或!=(不等于) - 逻辑运算符:AND(与)、OR(或)、NOT(非)
- 范围运算符:BETWEEN AND
- 集合运算符:IN、NOT IN
- 模式匹配:LIKE、NOT LIKE
- 空值判断:IS NULL、IS NOT NULL
10. LIKE运算符的作用是什么?通配符有哪些?
答:LIKE运算符用于字符串的模式匹配,判断字段值是否匹配指定的模式。支持两个通配符:
%(百分号):匹配任意长度的字符串(包括空字符串),例如WHERE sname LIKE '张%'查询姓"张"的所有学生_(下划线):匹配单个任意字符,例如WHERE sname LIKE '_明'查询第二个字是"明"的两字姓名
11. BETWEEN AND运算符的作用是什么?
答:BETWEEN AND用于指定一个范围查询,判断字段值是否在指定范围内(包含边界值)。语法:字段名 BETWEEN 值1 AND 值2。例如:SELECT * FROM student WHERE sage BETWEEN 18 AND 22; 查询年龄在18到22之间的学生。等价于 sage >= 18 AND sage <= 22。
12. IN运算符的作用是什么?
答:IN运算符用于判断字段值是否在指定的集合中。语法:字段名 IN (值1, 值2, ...)。例如:SELECT * FROM student WHERE sdept IN ('计算机系', '数学系'); 查询计算机系或数学系的学生。NOT IN则表示不在集合中。
13. IS NULL和IS NOT NULL的作用是什么?
答:IS NULL用于判断字段值是否为空值(NULL),IS NOT NULL用于判断字段值是否非空。注意:不能用 = NULL 或 <> NULL 来判断空值,因为NULL与任何值的比较结果都是NULL(未知)。例如:SELECT * FROM student WHERE sphone IS NULL; 查询没有电话号码的学生。
14. ORDER BY子句的作用是什么?
答:ORDER BY用于对查询结果按指定字段排序。ASC表示升序(默认),DESC表示降序。可以按多个字段排序,先按第一个字段排序,相同时再按第二个字段排序。例如:SELECT * FROM student ORDER BY sdept ASC, sage DESC; 先按系部升序,再按年龄降序排列。
15. GROUP BY子句的作用是什么?
答:GROUP BY用于将查询结果按指定字段分组,通常与聚合函数配合使用,对每个分组进行统计计算。例如:SELECT sdept, COUNT(*) FROM student GROUP BY sdept; 按系部分组并统计每个系的学生人数。
16. MySQL中常用的聚合函数有哪些?
答:常用的聚合函数包括:
COUNT(*)或COUNT(字段名):统计记录数,COUNT(*)包含NULL值,COUNT(字段名)不包含NULL值SUM(字段名):计算指定字段值的总和AVG(字段名):计算指定字段的平均值MAX(字段名):求指定字段的最大值MIN(字段名):求指定字段的最小值
17. HAVING子句的作用是什么?与WHERE有何区别?
答:HAVING子句用于对GROUP BY分组后的结果进行过滤,必须与GROUP BY配合使用。
HAVING与WHERE的区别:
- WHERE在分组前过滤数据(作用于FROM后面的表),HAVING在分组后过滤数据(作用于分组结果)
- WHERE中不能使用聚合函数,HAVING中可以使用聚合函数
- 例如:
SELECT sdept, COUNT(*) FROM student GROUP BY sdept HAVING COUNT(*) > 5;查询学生人数超过5人的系部
18. COUNT(*)、COUNT(字段名)和COUNT(DISTINCT 字段名)有什么区别?
答:
COUNT(*):统计表中所有记录数,包括NULL值COUNT(字段名):统计指定字段非NULL值的记录数COUNT(DISTINCT 字段名):统计指定字段非NULL且不重复的值的数量
19. 如何在查询中同时使用WHERE、GROUP BY、HAVING、ORDER BY?
答:完整查询示例:查询计算机系中年龄大于18岁的学生,按性别分组,统计每组人数,只显示人数大于2的组,按人数降序排列:
SELECT ssex, COUNT(*) AS 人数
FROM student
WHERE sdept = '计算机系' AND sage > 18
GROUP BY ssex
HAVING COUNT(*) > 2
ORDER BY 人数 DESC;
20. 多字段排序的规则是什么?
答:ORDER BY可以指定多个排序字段,各字段间用逗号分隔。排序时先按第一个字段排序,当第一个字段值相同时,再按第二个字段排序,依此类推。每个字段可以单独指定ASC或DESC。例如:ORDER BY sdept ASC, sage DESC 表示先按系部升序排列,同一系部内再按年龄降序排列。