当前位置: 首页 > news >正文

【MYSQL表的增删改查(进阶)】

MYSQL表的增删改查(进阶)

  • 一、新增
  • 二、查询
      • 2.1 聚合查询
        • 2.1.1 聚合函数
            • count()
            • sum()
            • AVG()
            • MAX(),MIN()
            • GROUP_CONCAT()
        • 2.1.2 GROUP BY 子句
        • 2.1.3 HAVING 子句
      • 2.2 联合查询
        • 2.2.1 内连接
        • 2.2.2 外连接
            • 左外连接:
            • 右外连接:
        • 2.2.3 自连接
        • 2.2.4 子查询
            • 单行查询:返回一行子查询记录
            • 多行查询:返回多行记录的子查询
            • **关键字:[NOT]EXISTS**
            • from子句使用子查询生成临时表
        • 2.2.5 合并查询
            • UNION
            • UNION ALL

此篇博客希望对你有所帮助,不懂的或有错误的也可在评论区留言,错误必评论必回!!!

一、新增

语法:

insert into 表名[(字段1,字段2,...)]select(字段1,字段2,...)from 表名;

示例:
创建一个student表(id, name, sex, age, email);
在这里插入图片描述
创建一个test表(id, name, sex, age, email);并且给student表中插入两组数据,通过新增,把student表中的数据复制到test表中。
在这里插入图片描述

二、查询

2.1 聚合查询

2.1.1 聚合函数

常见的有以下六种:
在这里插入图片描述

count()

count()用来统计表中的行数。

select count(*) from 表名;//推荐大家使用这种方式,这种写法是SQL标准中规定的
select count(常数) from 表名;//这种方式也可以统计出表中的行数

在这里插入图片描述
也可以指定某一列进行统计。

select count(列名) from 表名;

在这里插入图片描述
count(列名),如果说列中有NULL值,则不会被统计在内!、
在这里插入图片描述

sum()

sum(列名)求和,把查询结果中所有行中的指定列进行相加
注意:列中的数据类型必须是数值型,不能是日期或字符…。如果不是对非数值类型的列进行计算,会得到警告信息。

select sum(列名) from 表名;

在这里插入图片描述

1.之前我们提起过,NULL与任何值运行的结果都是NULL。但通过这里发现,sum()求和NULL 值不参与运算。
2.这里的结果是在一个临时表中,结果不受表中字段长度约束。

AVG()

对所有行的指定列进行平均值运算。
在这里插入图片描述

MAX(),MIN()

求所有行中指定列的最大值,最小值

查出数学的最大值和最小值:

在这里插入图片描述

同一列可以使用不同的聚合函数

在这里插入图片描述

不同的一列可以使用不同的聚合函数

在这里插入图片描述

GROUP_CONCAT()

将来自多个记录的列值连接成一个字符串结果。通常与GROUP BY语句一起使用,以将多个行的值合并为一个逗号分隔的字符串。
示例:这里创建了一个employees表,其中包含员工的 id、department_id 和 name。并且给employees表中存储四组数据。
在这里插入图片描述
我们想要获取每个部门中所有员工的名字列表,可以使用 GROUP_CONCAT() 如下:
在这里插入图片描述
如果我们还想要按名字排序,并改变分隔符为分号(;),我们可以这样做:
在这里插入图片描述
注意事项:

1.GROUP_CONCAT() 默认的结果长度受到 group_concat_max_len 系统变量的限制,其默认值是 1024。如果你预期会有大量的数据被合并,可能需要调整这个值。
2.如果你在一个没有 GROUP BY 语句和其他聚合函数的查询中仅使用 GROUP_CONCAT(),MySQL 可能会将整个结果集视为一个大的组,并尝试将所有行的相关列值连接成一个单一的字符串。这通常不是预期的行为,因为它可能会导致生成一个非常长的字符串,特别是当查询结果集很大时。

2.1.2 GROUP BY 子句

GROUP BY 子句:SELECT中使用GROUP BY 子句可以对指定列进行分组查询。然后,对于每个组,它会计算聚合函数的值。如果查询中没有指定聚合函数,但使用了 GROUP BY,则每个组将只返回一行,通常是分组列的值(尽管这取决于选择的列和数据库的具体实现)。

语法:

select 列名(分组的列名),聚合函数(列名)...from 表名 group by 列名(分组的列名),列名(分组的列名);

示例:假设我们有一个名为 sales 的表,包含列 year, product_id, 和 amount。
在这里插入图片描述

然后我们根据product_id进行分组,查看一下它的销售总额。
在这里插入图片描述
group by 后面可以跟order by子句
在这里插入图片描述

2.1.3 HAVING 子句

GROUP BY 子句进行分组之后,需要对分组结果进行条件过滤时,不能使用WHERE 语句,而需要使用HAVING;
示例:这里为了大家更方便简单观察到,这里我又插入了6组数据。
在这里插入图片描述
这里我们需要通过HAVING子句过滤掉销售量小于800的产品。
在这里插入图片描述

2.2 联合查询

联合查询(也称为联结查询或JOIN查询)是一种通过两个或多个表中的列之间的关系来查询、组合或合并表中的数据的方法。联合查询是SQL中一个非常强大的功能,它允许你根据需要在不同的表中检索相关信息。

联合查询是如何执行的?

1.取多张表的笛卡尔积。
在这里插入图片描述
举例:创建一张class表,包含列id,name;创建一张student表,包含列class_id,name,sex。
c
在这里插入图片描述

并且分别给两张表中插入数据!
生成笛卡尔积:
在这里插入图片描述

2.通过连接条件过滤掉无效数据

在这里插入图片描述
3.能通过指定列查询,来精简结果集
在这里插入图片描述

2.2.1 内连接

内连接(INNER JOIN)是SQL查询中使用的一种连接类型,用于返回两个或多个表中符合连接条件的记录。内连接仅返回那些在连接条件上有匹配的行。如果在一个表中有行在另一个表中没有匹配的连接条件,那么这些行就不会出现在查询结果中。

语法:

select 字段 from1 as 别名1 [inner] join 表名2 as 别名2 on 连接条件 and 其他条件;//标准的内连接写法
select 字段 from1 as 别名1 , 表名2 as 别名2 where 连接条件 and 其他条件;

示例:查询班级编号,班级名称,学生姓名
在这里插入图片描述
注意:当你使用别名时,那么select 后面的字段也必须是别名.字段名,否则则无法识别;

2.2.2 外连接

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

语法:
左外连接:表1全显示

select 字段名 from 表名1 left join 表名2 on 连接条件;

右外连接:表2全显示

select 字段名 from 表名1 right join 表名2 on 连接条件;

示例:假设class表为表1,student表为表2。
在这里插入图片描述

左外连接:

在这里插入图片描述

右外连接:

在这里插入图片描述

外连接:通过right和left确认基准表,没有与基准表匹配的记录,用null填充。

2.2.3 自连接

自连接(Self-Join)是一种特殊的连接查询,它指的是表与其自身进行连接。自连接通常用于查询表中存在层次或递归关系的数据。

案例:查询比‘雨欣’数学成绩高的学生。
在这里插入图片描述

1.去笛卡尔积
在这里插入图片描述

2.观察结果集,确认条件
在这里插入图片描述
也可以用join on 语句进行自连接查询

 select * from score s1 join score s2 on s1.name='雨欣' and s1.math<s2.math;
2.2.4 子查询

子查询是指嵌入在其他sql语句中select语句,也叫嵌套查询。由于嵌套查询没有固定的限制,多层嵌套的效率是不可控的,所以谨慎使用。

在这里插入图片描述

单行查询:返回一行子查询记录

案例:查询数学成绩为69,语文成绩为66的学生的信息。
在这里插入图片描述

多行查询:返回多行记录的子查询

返回一个集合,使用关键字IN
在这里插入图片描述

关键字:[NOT]EXISTS
select * from where exists(select * from 表名);

解释:exists后面括号中的查询语句,如果有结果返回,则执行外层查询,如果返回值为空,则不执行外层查询。

在这里插入图片描述

from子句使用子查询生成临时表

在from子句中使用子查询:子查询语句出现from子句中,这里要用到数据查询的技巧,把一个子查询当成一个临时表来使用。

在这里插入图片描述

2.2.5 合并查询

合并查询通常指的是将多个查询的结果集合并成一个结果集。这可以通过 UNION 或 UNION ALL 操作符来实现。使用 UNION 或 UNION ALL 时,前后查询的结果集中,字段需要一致。

UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并自动去除重复的记录,只保留唯一的记录。每个 SELECT语句必须拥有相同数量的列,且对应列的数据类型也必须兼容。

在单表中可以去用逻辑运算符去连接不同的查询条件;但多表中,就没办法用逻辑运算符,如果最终结果从多表中获取的,必须要用UNION来进行合并。
案例:自动去除结果集中的重复行!
在这里插入图片描述
列名不匹配,返回的结果值就是错误的,这种查询就是没有意义的!
在这里插入图片描述

UNION ALL

与 UNION 类似,UNION ALL 也用于合并两个或多个 SELECT 语句的结果集,但它会包含所有的重复记录。也就是说,它不会去除任何重复的行。这通常在你需要包含所有行,包括重复行时非常有用。

案例:不会去除结果集中的重复行!
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JS】path的使用说明
  • 105.游戏安全项目-基址的技术原理-分析技巧
  • Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理
  • Centos7更换阿里云的 YUM 镜像仓库
  • 计算机网络30——Linux-gdb调试命令makefile
  • Jenkins Docker Pipeline Clone Build Deploy mysqldump
  • 企业项目中常用的表结构设计
  • 摩托罗拉大顾问ADVISOR BP机拆解评测
  • MySQL索引测试
  • 智能体时代,AI正从“神坛”走向“人间”
  • 工具集锦 论文 施工ing
  • element-plus弹窗内分页表格保留勾选项
  • k8s中的存储
  • Vim使用技巧——第一章 Vim解决问题的方式
  • 力扣 11.盛最多水的容器
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Debian下无root权限使用Python访问Oracle
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Material Design
  • react-native 安卓真机环境搭建
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • use Google search engine
  • 动态规划入门(以爬楼梯为例)
  • 汉诺塔算法
  • 提醒我喝水chrome插件开发指南
  • 微信小程序:实现悬浮返回和分享按钮
  • 我建了一个叫Hello World的项目
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用jquery写贪吃蛇
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 移动端高清、多屏适配方案
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #QT项目实战(天气预报)
  • #考研#计算机文化知识1(局域网及网络互联)
  • (3)(3.5) 遥测无线电区域条例
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (四)汇编语言——简单程序
  • (算法)前K大的和
  • (五)关系数据库标准语言SQL
  • (译)2019年前端性能优化清单 — 下篇
  • (转)Linux下编译安装log4cxx
  • (转)项目管理杂谈-我所期望的新人
  • *2 echo、printf、mkdir命令的应用
  • .libPaths()设置包加载目录
  • .NET CLR Hosting 简介
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)