2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > MySQL数据库---子查询insert update delete语句中嵌套子查询

MySQL数据库---子查询insert update delete语句中嵌套子查询

时间:2021-06-20 20:02:08

相关推荐

MySQL数据库---子查询insert update delete语句中嵌套子查询

十.子查询的使用(重点)

1.子查询:指的是查询语句,嵌套查询语句---->一般是放在where子句中,表示条件

2.子查询的应用使用场景:

2.1查询过程中,虽然给了条件,但是条件的结果并不明确,这个时候就需要借助于查询语句,把条件的结果查出来,参与操作。

例:从sc表中查看计算机系学生的选课记录.

解析:select 选课记录* from sc where 计算机系学生(需要查询);

2.2如果聚合函数当条件,是不能直接放在where子句中,那么就可以借助于查询语句,把聚合函数的结果查询出来,参与操作。

例:从sc表中查看所修课程的成绩大于平均成绩的学生信息

解析:select * from sc where grade>(select avg(grade) from sc);

3.子查询语法格式:

格式一: in 来匹配子查询的结果值 嵌套子查询

select 列名 from 表名 where列名 in(select列名from 表名 where 条件...);

注意1:条件要什么,子查询就查什么

格式二:= 来匹配子查询的结果值 相关子查询(单值子查询)

select 列名 from 表名 where 列名 =(select 列名 from 表名 where 条件...);

注意2:如果是用=匹配子查询,那么就要求子查询的结果只能有一个值;如果不确定子查询结果的个数,推荐使用in;子查询都是用小括号来包裹的。

select 列名 from 表名 where列名 in(select列名from 表名 where列名in(select列名from 表名 where 条件...));

延伸一种写法:

select 列名 from 表名 where 列名比较运算符(select 列名 from 表名 where 条件....);

-- 例:从sc表中查看计算机系学生的选课记录.

select *

from sc

where sno in(select sno from student where sdept='计算机系'); -- 要求:学生--->计算机系

-- 查询出计算机系的学生

select sno from student where sdept='计算机系'

-- 例:从sc表中查看修了VB课程的学生选课情况

select *

from sc

where cno =(select cno from course where cname='VB'); -- 学生修了VB课程

-- 查看VB课程的课程号

select cno from course where cname='VB';

-- 例.查询修了‘c02’课程且成绩高于此课程的平均成绩的学生的学号和成绩。

select sno,grade

from sc

where cno='c02' and grade>(select avg(grade) from sc where cno='c02');

-- 此课程c02的平均成绩 79.6667

select avg(grade) from sc where cno='c02';

-- 查询修了c02这门课的学生的姓名,性别,专业

select sname,ssex,sdept

from student

where sno in(select sno from sc where cno='c02');

-- 可以从sc表中根据课程号查询出对应选修学生学号

select sno from sc where cno='c02';

-- 案例:查询和'ff'在同一个班的学生的信息(学号,姓名,性别,籍贯,班级名称,年级)。

select 学号,姓名,性别,籍贯,班级名称,年级

from 学生信息 s,班级信息 c

where s.班级编号=c.班级编号 and s.班级编号=(select 班级编号 from 学生信息 where 姓名='ff');

-- 查看ff这个学生所在的班级编号

select 班级编号 from 学生信息 where 姓名='ff';

-- 查看修了数据库基础课程的学生的姓名,所在的系别

-- 分析:数据库基础cname---->cno--->sc表中查询学生sno--->在student表查询姓名,系别

select sname,sdept from student where sno in(

select sno from sc where cno in(select cno from course where cname='数据库基础'));

十一.除了select语句中可以使用子查询,在insert,update,delete语句中也可以嵌套子查询语句

1.insert语句和select语句做结合

思想:把select查询出来的数据,结合insert插入到指定的表中

格式:insert into 表名 select查询语句;

-- 创建一个表stu(学号,姓名,年龄,专业)

create table stu(

学号 varchar(10),

姓名 varchar(10),

年龄 int,

专业 varchar(10)

);

-- 向stu表中插入数据(只保存计算机系和信息系的学生记录)

insert into stu select sno,sname,sage,sdept from student where sdept in('计算机系','信息系');

select * from stu;

-- 创建一个学生表(学号,姓名,性别,课程号,成绩)

create table 学生表(

学号 varchar(10),

姓名 varchar(10),

性别 varchar(10),

课程号 varchar(10),

成绩 int

);

-- 向学生表中插入数据(修了c02,c04,且成绩大于等于60)

insert into 学生表 select student.sno,sname,ssex,cno,grade from student,sc where student.sno=sc.sno and cno in('c02','c04') and grade>=60;

select * from 学生表;

2.update语句和select语句结合

格式:update 表名 set 列名=值 where条件;

select查询语句还是放在where子句中表示条件

-- 将计算机系学生的选课成绩添加10分

update sc

set grade=grade+10

where sno in(select sno from student where sdept='计算机系');

3.delete语句和select语句结合

格式:delete from 表名 where条件;

select查询语句还是放在where子句中表示条件

-- 从sc表中删除计算机系学生的选课记录

delete from sc where sno in(select sno from student where sdept='计算机系');

-- 把修了VB课程学生的成绩减去10分

update sc set grade=grade-10 where cno in(select cno from course where cname='VB');

-- 删除信息系男生的选课记录

delete from sc where sno in(select sno from student where sdept='信息系' and ssex='男');

=========================================================

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。