MySQL的增删改查4(插入查询结果,联合查询,聚合查询)

1.插入查询结果

语法:INSERT INTO table_name [(column[,column…])] SELECT…;

把后面select出来的数据插入到前面指定的表中

insert into student1 (id,name)select id,name from student;

表必须要存在,写入的列名顺序与查询中的列名和顺序必须保持一致。

2.聚合查询

2.1聚合函数

count

统计班级共有多少同学

select count(*)from student;

 

 统计班级收集的 qq_mail 有多少个,qq_mail 为 NULL 的数据不会计入结果

select count(qq_mail)from student;

sum

统计数学成绩总分

select sum(math) from exam_result;

 

不及格 < 60 的总分,没有结果,返回 NULL

select sum(math) from exam_result where math<60;

 

 avg

统计平均总分

select avg(chinese+math+english)from exam_result;

max

英语最高分

select max(english) from exam_result;

 

min

语文最低分

select min(chinese) from exam_result;

2.2GROUP BY子句

语法:select column,sum(column2),…from table_name [where…] group by column1,column3;

查询每个角色的最高工资、最低工资和平均工资

select role,max(salary),min(salary),sum(salary) from emp group by role;

2.3HAVING

如果要对group by分组后的结果做过滤,必须要用having子句

显示平均工资低于1500的角色和它的平均工资

select role,avg(salary)from emp group by role having avg(salary)<1500;

3.联合查询

3.1内连接

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

步骤:

1.确定表

2.做笛卡尔积

3.确认连接条件

4.加入查询条件

5.精简查询结果

查询“许仙”同学的 成绩

select stu.name,s.score from student2 stu,score s 
where stu.sn=s.student2_id and name='许仙';

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

select stu.sn,stu.name,stu.qq_mail,stu.classes_id,sum(s.score) 
from student2 stu,score s where stu.sn=s.student2_id order by s.student2_id;

3.2外连接

语法:

-- 左外连接,表1完全显示 select 字段名  from 表名1 left join 表名2 on 连接条件;

-- 右外连接,表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件;

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

select * from student2 stu left join score s on stu.sn=s.student2_id;

 3.3自连接

自连接是指在同一张表连接自身进行查询。

显示所有“计算机原理”成绩比“Java”成绩高的成绩信息

select s1.* from score s1 join score s2 on 
s1.student2_id=s2.student2_id 
and s1.score<s2.score 
and s1.course_id=1 
and s2.course_id=3;

 3.4子查询

一个查询的条件依赖于另一个查询的结果

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

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

select *from student2 where classes_id=
(select classes_id from student2 where name='不想毕业');

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

查询“语文”或“英文”课程的成绩信息

select * from score where course_id in
(select id from course where name='语文' or name='英语');

 3.5合并查询

union

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

查询id小于3,或者名字为“英文”的课程:

select * from classes where id<3 union select * from classes where name='英文';

union all

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

查询id小于3,或者名字为“Java”的课程

select * from course where id<3
union all
select * from course where name='英文';

 

 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL是一种关系型数据库管理系统,它支持增删改查操作和多表查询。 增加数据: 使用INSERT INTO语句将新数据插入到表格中。语法如下: ``` INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 例如,将新的学生记录插入到students表格中: ``` INSERT INTO students (name, age, gender, major) VALUES ('John Smith', 20, 'Male', 'Computer Science'); ``` 删除数据: 使用DELETE FROM语句从表格中删除数据。语法如下: ``` DELETE FROM table_name WHERE condition; ``` 例如,从students表格中删除名字为John Smith的学生记录: ``` DELETE FROM students WHERE name='John Smith'; ``` 更新数据: 使用UPDATE语句更新表格中的数据。语法如下: ``` UPDATE table_name SET column1=value1, column2=value2, ... WHERE condition; ``` 例如,将名字为John的学生的专业改为Computer Science: ``` UPDATE students SET major='Computer Science' WHERE name='John'; ``` 查询数据: 使用SELECT语句从表格中查询数据。语法如下: ``` SELECT column1, column2, ... FROM table_name WHERE condition; ``` 例如,从students表格中查询所有学生的名字和专业: ``` SELECT name, major FROM students; ``` 多表查询: 在多表查询中,需要使用JOIN语句将多个表格连接在一起。语法如下: ``` SELECT column1, column2, ... FROM table1 JOIN table2 ON condition1 JOIN table3 ON condition2 ... WHERE condition; ``` 例如,查询每个学生的名字和所在的班级: ``` SELECT students.name, classes.class_name FROM students JOIN classes ON students.class_id=classes.class_id; ``` 这将连接students和classes表格,并使用class_id列作为连接条件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李(写代码版)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值