数据库操纵语言(Data Manipulation Language, DML) 是SQL的核心组成部分,主要用于对数据库中的数据进行增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT) 操作,掌握DML都是必备技能!
-- 插入单条数据(全字段)
INSERT INTO 表名 VALUES (值1, 值2, ...);
-- 指定字段插入
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);
-- 批量插入
INSERT INTO 表名 (字段1, 字段2)
VALUES
(值1, 值2),
(值3, 值4);
-- 示例:向学生表插入数据
INSERT INTO tb_student (sno, sname, age)
VALUES
('2023001', '张三', 18),
('2023002', '李四', 19);
注意事项:
插入值的顺序需与字段顺序一致
未指定字段时,必须为所有字段赋值
主键或唯一约束字段不可重复
UPDATE 表名
SET 字段1=新值1, 字段2=新值2
[WHERE 条件];
示例:
-- 将学号2023001的学生年龄改为20
UPDATE tb_student
SET age = 20
WHERE sno = '2023001';
-- 批量更新:所有年龄大于18的学生成绩+5分
UPDATE tb_score
SET grade = grade + 5
WHERE sno IN (
SELECT sno FROM tb_student WHERE age > 18
);
注意事项:
WHERE条件必须明确,否则会更新全表数据
支持使用子查询进行复杂条件更新
DELETE FROM 表名 [WHERE 条件];
示例:
-- 删除学号为2023001的学生记录
DELETE FROM tb_student
WHERE sno = '2023001';
-- 删除成绩低于60分的学生
DELETE FROM tb_score
WHERE grade < 60;
注意事项:
无WHERE条件会清空整张表(慎用!)
删除操作不可逆,建议先备份或使用事务
SELECT 字段列表
FROM 表名
[WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段 [ASC|DESC]];
操作示例:
-- 查询年龄在18-20岁之间的学生
SELECT * FROM tb_student
WHERE age BETWEEN 18 AND 20;
-- 模糊查询姓"张"的学生
SELECT sname FROM tb_student
WHERE sname LIKE '张%';
-- 统计每个班级的平均成绩
SELECT class_id, AVG(grade) AS avg_grade
FROM tb_score
GROUP BY class_id
HAVING avg_grade > 60;
-- 内连接查询学生成绩详情
SELECT s.sname, c.cname, sc.grade
FROM tb_student s
INNER JOIN tb_score sc
ON s.sno = sc.sno
INNER JOIN tb_course c
ON sc.cno = c.cno;
-- 查询比张三年龄大的学生
SELECT sname, age
FROM tb_student
WHERE age > (
SELECT age FROM tb_student WHERE sname = '张三'
);
START TRANSACTION; -- 开启事务
INSERT INTO ... -- 执行操作
UPDATE ...
COMMIT; -- 提交事务
-- 或 ROLLBACK; -- 回滚事务
-- 合并两个查询结果(UNION去重,UNION ALL不去重)
SELECT sno FROM tb_student WHERE age > 18
UNION
SELECT sno FROM tb_teacher WHERE dept = '计算机系';
在SQL中,null 值表示缺失或未知的数据,处理时需注意以下几点:
比较操作:
NULL
与任何值(包括NULL
)的比较结果都是unknown,而非 TRUE或 FALSE
。
使用 IS NULL
或 IS NOT NULL
来判断是否为NULL
。
逻辑运算:
NULL
参与逻辑运算时,结果也是UNKNOWN(同上)
。
例如,NULL AND TRUE
结果为UNKNOWN
,NULL OR FALSE
结果也是UNKNOWN
。
聚合函数:
大多数聚合函数(如COUNT
、SUM
、AVG
等)会忽略NULL
值。
COUNT(*)
计算所有行数,而COUNT(column)
忽略NULL
值。
算术运算:
任何涉及NULL
的算术运算结果都是NULL
排序:
在排序时,NULL
通常被视为最小值(升序时排在最前,降序时排在最后)。
可使用ORDER BY column ASC NULLS LAST
或ORDER BY column DESC NULLS FIRST
调整NULL
的位置。
唯一约束:
在唯一约束列中,允许多个NULL
值存在,因为它们被视为未知且不相等。
索引:
大多数数据库索引不包含NULL
值,因此查询NULL
时可能无法使用索引。
# 希望这篇总结能助你轻松攻克DML!如果觉得有用,点赞⭐收藏关注 三连支持吧!