←

数据库(MySQL) · MySQL

SQL 数据操纵语言

SQL 数据操纵语言

结构化讲义

S2-3 · 5 个大纲考点讲义 · 已精编

练本节题目

S2-3.1

数据的插入、删除和修改处理。

精编讲义 v1#

DML 增删改(INSERT / UPDATE / DELETE)核心语法

必记
  • 插入数据(INSERT):INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...);——可一次插入多行;字符串和日期值必须用单引号括起来。
  • 修改数据(UPDATE):==UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;==——若省略 WHERE 子句,将更新整张表的所有行!
  • 删除数据(DELETE):DELETE FROM 表名 WHERE 条件;——若省略 WHERE 子句,将清空整张表的所有记录(注意 DELETE 与 FROM 之间没有 * 号!)。

INSERT / UPDATE / DELETE 综合书写范例

重点
sql
INSERT INTO student (sno, sname, age) VALUES ('202601', '张三', 20), ('202602', '李四', 21);

UPDATE student SET age = age + 1 WHERE sno = '202601';

DELETE FROM student WHERE age < 18;
随堂自测(3 题 · 共 181 道关联题)展开作答
填空2 分自测不计入学习进度

____就是由若干条SQL语句组成。规则是:要么其中所有的SQL都正确做完,要么一条也不做。

单选2 分自测不计入学习进度

删除数据表中的一条记录用以下

填空2 分自测不计入学习进度

用来插入数据的命令是 INSERT,用于更新的命令是 ____。

S2-3.2

简单查询、连接查询。

精编讲义 v1#

WHERE 条件运算符与多表连接(JOIN)语法速查

必记
查询类别关键字 / 语法格式高频考试要点与易错提示
去重与别名SELECT DISTINCT 列 AS 别名DISTINCT 必须紧跟在 SELECT 之后,作用于所有选中列的组合
范围与集合BETWEEN a AND b、IN (v1, v2)BETWEEN a AND b 包含两端边界 [a, b](等价于 >= a AND <= b)
模糊匹配 LIKE通配符 %(任意 0 或多个字符)、_(恰好 1 个字符)姓张:sname LIKE '张%';姓张且两字姓名:sname LIKE '张_'
空值判断IS NULL / IS NOT NULL严禁写成 = NULL 或 != NULL(结果恒为 UNKNOWN)
内连接 INNER JOINFROM A [INNER] JOIN B ON A.id = B.a_id仅返回两表中满足连接条件 ON 的匹配行(忘写 ON 会产生笛卡尔积)
左/右外连接LEFT [OUTER] JOIN / RIGHT [OUTER] JOIN左连接保留左表全部行,右表无匹配时对应列填 NULL(常用于查“未选课学生”)
随堂自测(3 题 · 共 638 道关联题)展开作答
判断1 分自测不计入学习进度

【判断题】SQL是非过程式语言。只需要给出“做什么”,不需要给出“怎么做”。

单选2 分自测不计入学习进度

SQL 的查询语句的 where 子句中,对空值的操作,不正确的是____。

单选2 分自测不计入学习进度

(1 分)【单选题】如果对关系 R=(A,B,C)执行以下语句 SELECT DISTINCT A FROM R WHERE B=17,则该语句对关系 R 进行了

S2-3.3

嵌套子查询。

精编讲义 v1#

IN / 比较运算符 / ANY / ALL / EXISTS 嵌套子查询规则

必记
  • 标量子查询(返回单行单列):可直接用 = > < >= <= 连接,如查高于平均分的学生:WHERE score > (SELECT AVG(score) FROM sc)。
  • 列子查询(返回多行一列):必须配 IN / NOT IN 或 ANY / ALL,绝不能直接用 =!其中 > ALL(...) 等价于大于最大值,> ANY(...) 等价于大于最小值。
  • 存在性子查询 EXISTS:WHERE EXISTS (子查询) 只判断子查询是否返回至少一行记录(返回真/假),不关心具体列值。

嵌套子查询典型大题写法

重点
sql
-- 查询选修了“数据库”课程的学生姓名
SELECT sname FROM student
 WHERE sno IN (
   SELECT sno FROM sc
    WHERE cno = (SELECT cno FROM course WHERE cname = '数据库')
 );
随堂自测(3 题 · 共 73 道关联题)展开作答
单选2 分自测不计入学习进度

(1 分)【单选题】对于“网上书店”数据库,以下 SELECT 语句的含义是 SELECT 会员昵称 FROM 会员 WHERE 会员编号 NOT IN(SELECT 会员编号 FROM 订购)

单选2 分自测不计入学习进度

对于 SQL 查询: SELECT * FROM tbl_name WHERE id=(SELECT id FROM tbl_name),假设该表中包含 id 字段,那么该语句正确执行的条件是()

填空2 分自测不计入学习进度

已知表:工资表(工号,姓名,性别,工资)要求查询“工资最高的员工的姓名与工资”,完成该功能的 SQL 语句是____。

S2-3.4

对查询结果进行排序、计算及分组。

精编讲义 v1#

GROUP BY 分组、HAVING 筛选、ORDER BY 排序与 LIMIT 分页

必记
  • SELECT 子句完整书写顺序:SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...;
  • WHERE vs HAVING(高频必考):WHERE 在分组前对原始行过滤,内部绝不能出现聚合函数;HAVING 在 GROUP BY 分组后对分组结果过滤,支持使用聚合函数(如 HAVING AVG(score) >= 80)。
  • 排序 ORDER BY:ASC 升序(默认,可省略),DESC 降序;多列排序如 ORDER BY dept_id ASC, score DESC(先按部门升序,同部门按成绩降序)。
  • 限制条数 LIMIT:LIMIT n 取前 n 条;LIMIT offset, count 从偏移量 offset(从 0 开始计!)起取 count 条记录。
随堂自测(3 题 · 共 54 道关联题)展开作答
单选2 分自测不计入学习进度

查询 tb_book 表中的前 2 条记录,并按 ID 序号进行升序排序,查询语句是什么?

单选2 分自测不计入学习进度

对 tb_book 表中的数据,按 ID 序号进行升序排序,查询语句是什么?

填空2 分自测不计入学习进度

SELECT 语句的 ____ 子句定义的排序表达式所参照的列甚至可以不出现在输出列表中。

S2-3.5

求和、统计、求平均等常用函数在查询操作中的应用。

精编讲义 v1#

五大聚合函数与常用标量函数速查

必记
函数名称功能说明NULL 值处理与必考细节
COUNT(*) vs COUNT(列名)统计总行数 vs 统计该列非空值个数COUNT(*) 统计所有行(含 NULL);COUNT(列名) 自动忽略 NULL 值
SUM(列) / AVG(列)求和 / 求算术平均值仅用于数值列,自动忽略 NULL 行
MAX(列) / MIN(列)求最大值 / 最小值可用于数值、字符串或日期列,忽略 NULL
CONCAT(s1, s2) / SUBSTRING(s, pos, len)字符串拼接 / 截取子串SQL 中字符串下标 pos 从 1 开始(不同于 C 语言从 0 开始)
NOW() / CURDATE() / YEAR(d)当前日期时间 / 当前日期 / 提取年份算年龄常用:YEAR(CURDATE()) - YEAR(birth_date)
随堂自测(3 题 · 共 111 道关联题)展开作答
综合6 分自测不计入学习进度

统计每个部门中人数。表名是 EMP,DEPTNO 是部门编号,ID 是员工号

单选2 分自测不计入学习进度

数据表如第 88 题所示,列出客户订单总金额大于 3000 的数据,正确的 SQL 是____。

综合6 分自测不计入学习进度

不采用 avg() 计算所有商品的平均单价。 select ____(unitPrice)/count(unitPrice) 平均单价 from goods;