MySQL表的增删改查(进阶)

打印 上一主题 下一主题

主题 523|帖子 523|积分 1569


 博主主页: 码农派大星.

数据库专栏:MySQL数据库

关注博主带你了解更多MySQL数据库知识


1. 新增

  1. create table student (id int, name varchar(20));
  2. create table student2 (id int, name varchar(20));
  3. insert into student values(1,'张三'),(2,'李四'),(3,'王五'),(100,'赵六');
  4. insert into student2 select *from student where id<50;
复制代码

2. 查询 

1 聚合查询

1.1 聚合函数


 

count: 

  1. select count(*) from exam;
复制代码

插入一行空值,查询也会算一行,以是查询为8

如果查询实在的属性 ,null则不算一行.

尚有以下操作,各人可以看看:

sum:

  1. SELECT SUM(列名) FROM exam;
复制代码
必须确保求和的每一列为数字.

求和不为数字时为0,并陈诉有告诫: 

而且在sum求和中,遇见null会直接跳过.
sum也会逐个列相加求总和:

avg:

  1. SELECT avg(列名) FROM exam;
复制代码

max和min也是如此操作.
2 GROUP BY子句

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

统计员工范例与人数:

求各个岗位匀称薪资;
 求各个岗位匀称,最高,最低工资:
 求各个岗位匀称工资并按降序排序:

搭配条件来使用: 

分组之前的条件查询:

撤除张三后的匀称工资查询:

3.HAVING 

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

查询匀称薪资,清除超过5w的记录:

 一个查询,可以同时包含分组之前,分组之后的条件
统计匀称薪资,撤除张三也清除超过5w的:

3.联合查询

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



 



 


1.内连接

  1. select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
  2. select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
复制代码
 
(1)查询“许仙”同砚的 结果

判断完,进行笛卡尔积:

指定条件,筛选无用信息:

进一步指定条件,再筛选: 
 针对查询的列,精简:
 
另一个写法(join):





(2)查询所有同砚的总结果,及同砚的个人信息: 

先明确信息来自那些表?
再笛卡尔积:

筛选:

分组聚合:
 完成:

join写法:

 (3)查询所有同砚的结果,及同砚的个人信息: 

根据需求,查看需要查询哪些信息;
课程的名字 ,结果 和学生的姓名
再进行笛卡尔积

指定连接条件:
 进行精简:

通过join 写:
  1. -- 左外连接,表1完全显示
  2. select 字段名  from 表名1 left join 表名2 on 连接条件;
  3. -- 右外连接,表2完全显示
  4. select 字段 from 表名1 right join 表名2 on 连接条件;
复制代码
 
2.外连接 

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接。
  1. -- 左外连接,表1完全显示
  2. select 字段名  from 表名1 left join 表名2 on 连接条件;
  3. -- 右外连接,表2完全显示
  4. select 字段 from 表名1 right join 表名2 on 连接条件;
复制代码

我们修改一下值就会发现,有一条数据已经不是内链接了. 
 
 外连接就是join如许的写法(不支持from多个表)
给join前面加上left/right 就是外连接了
左外连接:


就是以左表为基准,确保左表中的每个数据出如今最闭幕果中
如果左表中的记录,再对应右表中没有数据,就会显示右表为NULL.
 
右外连接:


就是以右表为基准,确保右表中的每个数据出如今最闭幕果中
如果右表中的记录,再对应左表中没有数据,就会显示左表为NULL.

3 自连接 

自连接是指在同一张表连接自身进行查询
显示所有“盘算机原理”结果比“Java”结果高的结果信息(行与行之间比力):
这里我们需查询行与行之间的关系发现会报错

实在我们各取别名就可以了 

然后指定连接条件,去掉无效数据 

如许的结果分析只有三个同砚同时具有盘算机原理和java课程.
 终极我们就查出来了

 4 子查询


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

查询与“不想毕业” 同砚的同班同砚:
  1. select * from student where classes_id=(select classes_id from student where
  2. name='不想毕业');
复制代码

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

查询“语文”或“英文”课程的结果信息
  1. -- 使用IN
  2. select * from score where course_id in (select id from course where
  3. name='语文' or name='英文');
  4. -- 使用 NOT IN
  5. select * from score where course_id not in (select id from course where
  6. name!= '语文' and name!='英文');
复制代码

4 归并查询 

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

固然结果一样,但是这是在相同的表中,union也可在不同表中操作
该操作符用于取得两个结果集的并集。当使用该操作符时,会主动去掉结果会合的重复行。

 
union all 

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果会合的重复行


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表