首页 / 数据库原理与应用 / SQL数据查询语言DQL(单表查询)

第4章 SQL数据查询语言DQL(单表查询)

4.1 SELECT基本结构

SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组过滤条件 ORDER BY 排序字段 [ASC|DESC] LIMIT 起始位置, 记录数;

SQL查询语句的执行顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

4.2 WHERE条件运算符

  • 比较运算符:=、<>、>、<、>=、<=
  • 范围:BETWEEN...AND...
  • 集合:IN、NOT IN
  • 模糊匹配:LIKE(%匹配任意字符序列,_匹配单个字符)
  • 空值判断:IS NULL、IS NOT NULL
  • 逻辑运算:AND、OR、NOT

4.3 聚合函数

  • COUNT(*):统计行数
  • SUM(字段):求和
  • AVG(字段):求平均值
  • MAX(字段):求最大值
  • MIN(字段):求最小值
-- 统计学生总数 SELECT COUNT(*) FROM student; -- 计算平均年龄 SELECT AVG(sage) FROM student;

4.4 GROUP BY - 分组查询

GROUP BY按指定字段分组,通常配合聚合函数使用。

-- 统计各系学生人数 SELECT sdept, COUNT(*) AS 人数 FROM student GROUP BY sdept;

4.5 HAVING - 分组过滤

HAVING对分组后的结果进行过滤。注意:WHERE是过滤行,HAVING是过滤组。

-- 查询人数超过3人的系 SELECT sdept, COUNT(*) AS 人数 FROM student GROUP BY sdept HAVING COUNT(*) > 3;

4.6 ORDER BY - 排序

ASC升序(默认),DESC降序。

-- 查询年龄最大的前3名学生 SELECT * FROM student ORDER BY sage DESC LIMIT 3;

4.7 DISTINCT - 去重

-- 查询有哪些系 SELECT DISTINCT sdept FROM student;

4.8 LIMIT - 分页

-- 查询第2页,每页5条 SELECT * FROM student LIMIT 5, 5;

4.9 典型查询示例

-- 查询所有男生信息 SELECT * FROM student WHERE ssex='男'; -- 查询姓"张"的学生 SELECT * FROM student WHERE sname LIKE '张%'; -- 统计各系学生人数 SELECT sdept, COUNT(*) AS 人数 FROM student GROUP BY sdept; -- 查询年龄最大的前3名学生 SELECT * FROM student ORDER BY sage DESC LIMIT 3;

自学自检小问题

  1. WHERE和HAVING的区别是什么?
  2. COUNT(*)和COUNT(字段名)有什么区别?
  3. LIKE '%张%' 和 LIKE '张%' 分别匹配什么?

拓展学习资源

第4章 基础巩固练习
0/5
第1题 选择题
以下哪个关键字用于消除查询结果中的重复行?( )
ORDER BY
GROUP BY
DISTINCT
LIMIT
答案解析
正确答案:C(DISTINCT)。DISTINCT用于去重;ORDER BY用于排序;GROUP BY用于分组;LIMIT用于限制返回行数。
第2题 选择题
查询时对分组后的结果进行过滤,应使用( )
WHERE
HAVING
GROUP BY
ORDER BY
答案解析
正确答案:B(HAVING)。WHERE过滤行,HAVING过滤分组结果。
第3题 选择题
COUNT(*)和COUNT(字段名)的区别是( )
没有区别
COUNT(*)不统计NULL值
COUNT(字段名)不统计该字段为NULL的行
COUNT(*)更快
答案解析
正确答案:C。COUNT(*)统计所有行;COUNT(字段名)只统计该字段非NULL的行。
第4题 选择题
LIKE '张%' 匹配的是( )
以'张'结尾的
以'张'开头的
包含'张'的
等于'张'的
答案解析
正确答案:B(以'张'开头的)。%匹配任意字符序列,所以'张%'匹配以张开头的所有字符串。
第5题 选择题
要查询表中的前10条记录,应使用( )
TOP 10
LIMIT 10
FIRST 10
ROW 10
答案解析
正确答案:B(LIMIT 10)。MySQL中使用LIMIT限制返回行数。
0/0