首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【数据库】增删改查 高阶(超级详细)保姆级教学

【数据库】增删改查 高阶(超级详细)保姆级教学

作者头像
那我掉的头发算什么
发布2026-01-12 18:48:11
发布2026-01-12 18:48:11
2240
举报

插入

我们在向表中插入数据时,其实可以一次性把另一张表中的数据都插入进来。

语法:

代码语言:javascript
复制
INSERT INTO table_name [(column [, column ...])] SELECT ...
在这里插入图片描述
在这里插入图片描述

插入之后:

在这里插入图片描述
在这里插入图片描述

注意:插入的列要与指定的列一一对应,否则会产生错误。

在这里插入图片描述
在这里插入图片描述

聚合查询

聚合函数

在这里插入图片描述
在这里插入图片描述

COUNT 使用count可以查询目标数据的数量。 查询所有数据的个数: 1.count(*) 2.count(x)->x为常量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select(column)可以查询特定列的数据数量,如果有null,则不会被计算在内。

在这里插入图片描述
在这里插入图片描述

SUM sum就是计算一列数据的总和。

在这里插入图片描述
在这里插入图片描述

我们之前学过,null与任何值相加结果都是null。但是在sum函数中,系统会自动处理null值,最终把他当成“0”来看待。

在这里插入图片描述
在这里插入图片描述

查询中我们也可以像之前一样加where条件来约束。

在这里插入图片描述
在这里插入图片描述

AVG 对指定的列求平均

在这里插入图片描述
在这里插入图片描述

仍然可以使用表达式和别名。

MAX&&MIN 求某一列的最大值最小值

在这里插入图片描述
在这里插入图片描述

GROUP BY

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。

建立一个emp表: 源码:码云地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询不同职位的平均工资:

在这里插入图片描述
在这里插入图片描述

round函数可以传递 数值以及位数的参数,位数代表小数点后的位数。 分组查询后可以再用排序。

在这里插入图片描述
在这里插入图片描述

HAVING

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这条 SQL 语句存在语法错误,核心问题在于 WHERE 子句中不能直接使用聚合函数(如 avg(salary))。因为聚合函数得到的数据是不真实的数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

跟在group by 子句之后,对分组结果进行过滤。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这两段代码虽然运行结果相同,但是只要数据特殊,就会产生不一样的结果,而且代码在执行过程中的运行逻辑也完全不同。

联合查询

一般连接

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.去两张表的笛卡尔积

在这里插入图片描述
在这里插入图片描述

但是,这其中有很多无效数据,如何去除呢?

2.去除无效数据 依然是使用where筛选。 如果量表之间是主外键关系,一般通过主外键相连。

在这里插入图片描述
在这里插入图片描述

3.能通过指定列查询来精简结果集。 后面的代码演示我们使用码云中的java113.sql来继续学习。 链接在上面↑

在这里插入图片描述
在这里插入图片描述

当然在使用中我们也可以去给表起别名来精简代码。

在这里插入图片描述
在这里插入图片描述

内连接

语法:

代码语言:javascript
复制
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

内连接就是在一般连接的基础上,多了一种写法而已。

在这里插入图片描述
在这里插入图片描述

练习: (1)查询“许仙”同学的 成绩

在这里插入图片描述
在这里插入图片描述

(2)查询所有同学的总成绩,及同学的个人信息:

在这里插入图片描述
在这里插入图片描述

外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。 语法:

代码语言:javascript
复制
-- 左外连接,表1完全显示
select 字段名  from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
在这里插入图片描述
在这里插入图片描述

案例:查询所有同学的成绩,及同学的个人信息,如果该同学没有成绩,也需要显示:

在这里插入图片描述
在这里插入图片描述

用这种方法我们也可以解决找到缺考的同学类似的问题。

自连接

自连接顾名思义就是一张表自己和自己相连接。 自己怎么跟自己比较呢?

在这里插入图片描述
在这里插入图片描述

像这样的表就没法实现行与行之间的比较。因为每一行都是不同的数据。

在这里插入图片描述
在这里插入图片描述

这样的表设计,可以在同一行进行列与列的比较。

示例:显示所有“计算机原理”成绩比“Java”成绩高的成绩信息 我们如果实现自己与自己相连,不可以直接向其他情况那样,而是要给两个表取一个不同的别名。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
-- 也可以使用join on 语句来进行自连接查询
SELECT
 s1.* 
FROM
 score s1
 JOIN score s2 ON s1.student_id = s2.student_id
 AND s1.score < s2.score
 AND s1.course_id = 1
 AND s2.course_id = 3;

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询 单行子查询:返回一行记录的子查询

查询与“不想毕业” 同学的同班同学:

在这里插入图片描述
在这里插入图片描述

多行查询:返回多行子记录的查询: 案例:查询“语文”或“英文”课程的成绩信息: 这里要用in ,因为多行不可以使用 = 。

在这里插入图片描述
在这里插入图片描述

not in 也可以使用。

在这里插入图片描述
在这里插入图片描述

exists [not] exists

在这里插入图片描述
在这里插入图片描述

相当于 if。

在这里插入图片描述
在这里插入图片描述

select null 会返回一个非空的单行的表,只不过这个表列名和值都为null。

在这里插入图片描述
在这里插入图片描述
拓展

可以用子查询创建一个临时表,用来查询。

代码语言:javascript
复制
select * from student (select * from..)[where] ...

查询所有比“中文系2019级3班”平均分高的成绩信息:

在这里插入图片描述
在这里插入图片描述

合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致。

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。 案例:查询id小于3,或者名字为“英文”的课程:

在这里插入图片描述
在这里插入图片描述

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。 案例:查询id小于3,或者名字为“Java”的课程

总结

本文围绕 SQL 查询展开,涵盖多方面内容:插入操作支持从其他表批量插入且需保证列一一对应;聚合查询包含 COUNT、SUM 等聚合函数,结合 GROUP BY 可实现分组统计,分组后需用 HAVING 而非 WHERE 过滤聚合结果;联合查询涉及一般连接、内连接、外连接、自连接,还有子查询(含单行、多行及 exists 用法)及基于子查询创建临时表的拓展,同时讲解了合并查询的 UNION(去重)和 UNION ALL(保留重复)操作,且需保证合并的结果集字段一致。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 插入
  • 聚合查询
    • 聚合函数
    • GROUP BY
    • HAVING
  • 联合查询
    • 一般连接
    • 内连接
    • 外连接
    • 自连接
    • 子查询
      • 拓展
    • 合并查询
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档