S2-3.1
数据的插入、删除和修改处理。
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 综合书写范例
重点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 道关联题)展开作答
____就是由若干条SQL语句组成。规则是:要么其中所有的SQL都正确做完,要么一条也不做。
删除数据表中的一条记录用以下
用来插入数据的命令是 INSERT,用于更新的命令是 ____。
S2-3.2
简单查询、连接查询。
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 JOIN | FROM A [INNER] JOIN B ON A.id = B.a_id | 仅返回两表中满足连接条件 ON 的匹配行(忘写 ON 会产生笛卡尔积) |
| 左/右外连接 | LEFT [OUTER] JOIN / RIGHT [OUTER] JOIN | 左连接保留左表全部行,右表无匹配时对应列填 NULL(常用于查“未选课学生”) |
随堂自测(3 题 · 共 638 道关联题)展开作答
【判断题】SQL是非过程式语言。只需要给出“做什么”,不需要给出“怎么做”。
SQL 的查询语句的 where 子句中,对空值的操作,不正确的是____。
(1 分)【单选题】如果对关系 R=(A,B,C)执行以下语句 SELECT DISTINCT A FROM R WHERE B=17,则该语句对关系 R 进行了
S2-3.3
嵌套子查询。
IN / 比较运算符 / ANY / ALL / EXISTS 嵌套子查询规则
必记- 标量子查询(返回单行单列):可直接用
= > < >= <=连接,如查高于平均分的学生:WHERE score > (SELECT AVG(score) FROM sc)。 - 列子查询(返回多行一列):必须配
IN/NOT IN或ANY/ALL,绝不能直接用=!其中> ALL(...)等价于大于最大值,> ANY(...)等价于大于最小值。 - 存在性子查询
EXISTS:WHERE EXISTS (子查询)只判断子查询是否返回至少一行记录(返回真/假),不关心具体列值。
嵌套子查询典型大题写法
重点-- 查询选修了“数据库”课程的学生姓名
SELECT sname FROM student
WHERE sno IN (
SELECT sno FROM sc
WHERE cno = (SELECT cno FROM course WHERE cname = '数据库')
);随堂自测(3 题 · 共 73 道关联题)展开作答
(1 分)【单选题】对于“网上书店”数据库,以下 SELECT 语句的含义是 SELECT 会员昵称 FROM 会员 WHERE 会员编号 NOT IN(SELECT 会员编号 FROM 订购)
对于 SQL 查询: SELECT * FROM tbl_name WHERE id=(SELECT id FROM tbl_name),假设该表中包含 id 字段,那么该语句正确执行的条件是()
已知表:工资表(工号,姓名,性别,工资)要求查询“工资最高的员工的姓名与工资”,完成该功能的 SQL 语句是____。
S2-3.4
对查询结果进行排序、计算及分组。
GROUP BY 分组、HAVING 筛选、ORDER BY 排序与 LIMIT 分页
必记- SELECT 子句完整书写顺序:
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...; WHEREvsHAVING(高频必考):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 道关联题)展开作答
查询 tb_book 表中的前 2 条记录,并按 ID 序号进行升序排序,查询语句是什么?
对 tb_book 表中的数据,按 ID 序号进行升序排序,查询语句是什么?
SELECT 语句的 ____ 子句定义的排序表达式所参照的列甚至可以不出现在输出列表中。
S2-3.5
求和、统计、求平均等常用函数在查询操作中的应用。
五大聚合函数与常用标量函数速查
必记| 函数名称 | 功能说明 | 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 道关联题)展开作答
统计每个部门中人数。表名是 EMP,DEPTNO 是部门编号,ID 是员工号
数据表如第 88 题所示,列出客户订单总金额大于 3000 的数据,正确的 SQL 是____。
不采用 avg() 计算所有商品的平均单价。 select ____(unitPrice)/count(unitPrice) 平均单价 from goods;