长沙网站设计建设,汕头网站推广优化,个人网站首页,wordpress面包学文本目录#xff1a;
❄️一、新增#xff1a; ❄️二、查询#xff1a; 1、聚合查询#xff1a; 1#xff09;、聚合函数#xff1a; 2#xff09;、GROUP BY子句#xff1a; 3#xff09;、HAVING 子句#xff1a; 2、联合查询#xff1a; 1#xff09;、内连接…文本目录
❄️一、新增 ❄️二、查询 1、聚合查询 1、聚合函数 2、GROUP BY子句 3、HAVING 子句 2、联合查询 1、内连接 2、外连接 3、自连接 4、子查询 5、合并查询
❄️总结 ❄️一、新增
插入查询结果
也就是创建一个新表把原来旧表中指定的列插入到新表中。 语法 INSERT INTO 新的表名 [(column [, column ...])](指定的新表的列) SELECT ...这里是旧表的列 我们先来创建两个表来进行演示一下对于这个方法如何使用
我们先来创建一个 stu 这个表有 id sn name 我们创建了 stu 这个表并且往里面放入了 4条数据。
接下来我们再创建一个表stu1 里面的列为 id name 我们可以看到这个表里面没有任何的数据接下来我想要把 stu 里面的数据放入到 stu1中那么要如何才能做到呢 这个时候就可以使用上面那个新增的语法来达到这个目的 这样呢我们就可以实现把 stu 中的 idname 都复制到 stu1中。
这个就是我们新增的一个语法。 ❄️二、查询 1、聚合查询 1、聚合函数 常见的统计总数、计算平均值等操作呢可以使用聚合函数来实现常见的聚合函数
函数说明COUNT ([DISTINCT] expr)返回查询到的数据的 数量SUM ([DISTINCT] expr)返回查询到的数据的 总和不是数字没有意义AVG ([DISTINCT] expr)返回查询到的数据的 平均值不是数字没有意义MIN ([DISTINCT] expr)返回查询到的数据的 最小值不是数字没有意义MAX ([DISTINCT] expr)返回查询到的数据的 最大值不是数字没有意义
上面的这些操作呢都是对 列的操作。
我们先来创建一个 exam 表 我们一个一个的演示一遍 1、COUNT ([DISTINCT] expr) 语法 select count(列) from 表名; 统计表中的行数 这里注意当我们去指定列查询的时候呢如果这个列中存在 NULL 的话呢我们这个 count 方法呢是不会统计 NULL 这一行的演示一遍看看 这个就是不会 统计 NULL 值 。 2、SUM ([DISTINCT] expr) 作用 把查询结果中所有行中的指定的列进行相加 语法 select sum(列) from 表名; 对于求和的时候呢我们的中的 NULL 同样不参与运算。 这里要注意我们计算出来的结果并不是存在在表中的其存在在一个临时表中并且不受表中字段的长度的约束。
当然在我们计算的时候呢我们可以在其后面添加一些限制条件比如 3、AVG ([DISTINCT] expr) 作用 对所有行的指定列进行求平均值 语法 select avg(列) from 表名; 我们直接来演示一遍如何使用的
1、对数学成绩进行平均值查询 这个同样不受表中字段长度的约束。
2、对表达式进行求平均值我们这里同样可以使用别名来代替 这个呢就是 AVG 的用法了我们继续往下看 4、MIN ([DISTINCT] expr)、MAX ([DISTINCT] expr) 作用 求所有行中指定列的最小值和最大值 语法 这个呢我们可以单独使用也可以一起使用 select min(列),max(列) from exam; 这个也可以使用别名 这个呢就是我们的 max 和 min 的使用方法了。 这里我们要注意 对于使用聚合函数的时候呢我们可以 多个聚合函数一起进行使用而非是一个一个的进行运算。 当然了聚合函数不单单只有这几个还有很多可以去官网去了解一下 MySQL官网 2、GROUP BY子句
定义 SELECT 中使用 GROUP BY 子句可以对 指定列进行分组查询。
需要满足GROUP BY 进行分组查询时SELECT 指定的字段必须是“分组依据字段”其他字段若想出现在 SELECT 中则必须包含在聚合函数中。
这样说的话就不是很好理解我们来对其进行演示一遍是什么意思并且对其进行解释
我们先来创建一个表 我们来看 这个表中的字段哪个才能作为 分组字段id 呢是不会重复的对于name 呢也不存在相同的还有工资也不适合分组所以我们的只能由 role 角色进行分组所以这里我们的 分组依据字段是 —— role。 语法 select column1, sum(column2), .. from table group by column1,column3; 1、比如计算不同角色的平均值 这个呢就是我们的对于 分组查询的使用。
我们在 group by 之后呢还可以添加 order by 语句进行排序规则 3、HAVING 子句
定义 在 GROUP BY 子句进行分组之后呢需要对分组结果进行再进行过滤不能使用 WHERE 语句而是需要使用 HAVING 子句。
因为这些的到的查询结果不是表中真实的数据都是由聚合函数查询出来的。
我们来使用看看这个 HAVING子句如何使用的 having 使用在 group by 之后而 where 是在 from 表名之后也就是分组之前这里要进行区分 如果需要对于 表中真实存在的数据进行过滤并且也需要对分组的结果进行过滤那么这时候可以在合适的位置写 where 和 having 即可。 2、联合查询 联合查询也叫表连接查询 1、首先确定哪几张表要参与查询 2、根据表与表之间的主外键关系确定过滤条件 3、精准查询字段得到想要的结果 我们先来看对于上次博客所说的 复合主键 实际开发中往往数据来自不同的表所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积。 那么什么是笛卡尔积呢我们来看 我们可以的出对于生成笛卡尔积的过程是
1、先从第一张表中取出一条记录然后再与第二张表中的第一条记录进行组合生成第一条新的记录
2、先从第一张表中取出一条记录然后再与第二张表中的第二条记录进行组合生成第一条新的记录
...................
最后的到的结果就是 一个全排列的结果集。 1、内连接 连接查询方法 1select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件; 2select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件; 我们详细演示一下对于 内连接的第二种方式
我们来创建两个表来进行基础的联合查询 联合查询的语法 select * from 表名表名; 1、对这两个表进行联合查询 这个两张表中呢在取笛卡尔积之后呢是存在有效数据和无效数据的我们可以看到在class_id和 class表中的 id 相等的情况下呢就是有效的数据那么我们要如何过滤掉这些无效的数据呢 2、通过连接条件过滤掉无效数据 连个表中是存在主外键关系的只需要判断两个表中的主卧阿健字段是否相等就可以过滤掉无效数据。
我们可以通过 表名.列名的方式来解决问题 这样的得到的结果就是 表连接的查询但是我们是不是不想要 class_id 和 id 这两个列啊所以接下来我们对其进行简化 这样呢我们就可以的到 内连接的联合查询的结果了。 我们来看看第一种 内连接的查询方式 这些就是 内连接的联合查询的方式了。 2、外连接
定义 外连接分为 左外连接和右外连接。如果联合查询左侧的表完全显示我们就说是左外连接右侧的表完全显示我们就说是右外连接。 语法 -- 左外连接表1完全显示 select 字段名 from 表名1 left join 表名2 on 连接条件; -- 右外连接表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件; 那么这个是什么意思呢我们这样直接看定义不是很理解我们呢来演示一遍来理解一下 我们可以看到对于 class 表中的 四班是没有被使用的那么当我们在对这两个表进行 内连接的查询的时候呢我们是查询不到 class 中这个 四班的那如果我们要是想要显示出这个 四班的话呢我们这里就需要使用到 —— 外连接。
1、右外连接 这个就是我们的 右外连接了左边的表没有与之匹配的会 赋值为 NULL 。
2、左外连接 这个呢就是我们的 右外链接了。 3、自连接
自连接是指在同一张表连接自身进行查询。 我们的 where 都是对列与列之间的比较如果我们要是想要对其进行 行与行 之间的比较的话呢我们就需要先把其行与行变成 列与列这样之后呢我们才能就进行比较这个时候呢就需要用到——自连接。
我们来演示一遍这个 自连接 要如何使用
我们来查找 “计算机组成原理” 成绩比 “Java” 成绩高的信息 这个就是我们的 自连接查询的示例了。 4、子查询
子查询是指嵌入在其他 sql 语句中的 select 语句也叫嵌套查询。 单行子列查询 语法 select * from 表名 where 列名 (select 列名 from 表名 where ...) 我们来演示一遍
我们来看一个学生表
我们来查找对于和 ‘许仙’ 一个班的同学信息 1、查询 ‘许仙’ 同学的班级编号 2、由查询的班级编号查询其余的同学 这几步骤可以有 子查询的一步直接完成我们来看 这个就是我们的 单行子查询。 多行子查询返回多行记录的子查询 关键字1 [NOT] IN 关键字 语法 select * from 表名1 where 表名1.列名 [not] in (select 列名 from 表名2 where 表名2.列名....); 查询 英语 或者 语文 的成绩(查询不包括 语文 或者 英文的成绩) 这个呢就是对于 多行子查询 的使用方法了。 关键词2 [NOT] EXISTS EXISTS 后面的括号中查询有结果返回则执行外层的查询 反之则不执行外层查询 当存在 NOT 的时候就是上面的结果反过来。 演示 在from子句中使用子查询 子查询语句出现在 from 子句中。这里要用到数据查询的技巧把一个子查询当做一个临时表使用 查询比 “ 中文系2019级3班” 的平均成绩高的学生信息
1、先计算出平均分
我们这里使用 3 张表因为成绩表和班级表之间没有关系所以要添加一个表
1、从班级表中找到对应的编号
2、根据班级编号从学生表中找到对应的学生
3、根据学生编号在成绩表中计算平均分 这个是存放在 临时表中的。
接下来是在 from 中的 临时表的子查询 5、合并查询 在实际应用中为了合并多个select的执行结果可以使用集合操作符 unionunion all。使用UNION 和 UNION ALL 时前后查询的结果集中字段需要一致。 UNION 该操作符用于取得两个结果集的并集。当使用该操作符时会自动去掉结果集中的重复行。
假如我们想要对两个表进行查询的话就可以使用这个方法 UNION ALL 该操作符用于取得两个结果集的并集。当使用该操作符时不会去掉结果集中的重复行。 ❄️总结 OK我们对于 MySQL 中的 CRUD的增删改查呢到这里就都结束了对于这个 知识点呢我们要多的进行练习这是非常重要的知识。到这里就结束了拜拜~~~