一、子查询
- 子查询在其他查询结果的基础上提供了一种有效的方式来表示where子句的条件
- 子查询是可以嵌套在SELECT、INSERT、UPDATE、DELETE语句中
- 子查询的SELECT查询总是使用圆括号括起来
- 格式:
select 列名 from 表名 where 列名 in(select 查询语句);
- 子查询的注意事项
1、where后面的条件要什么,我们的子查询就查什么
例:条件要学号,子查询就查学号
2、什么情况优先考虑子查询
2.1题上给出的条件没有明确的提示结果
例:查询计算机系学生选修了哪些课程?(问:计算机系学生有哪些?)
2.2where后面要用到聚合函数当条件
聚合函数不能直接写,就可以借助查询语句把聚合函数的结果给查出来就OK
成绩大于平均成绩
where grade>(select avg(grade) from sc)
===>where grade>78
select 列名 from 表名 where 列名 in(select 列名 from 表名 where 条件);
select 列名 from 表名 where 列名 in(select 列名 from 表名 where 列名 in(select 列名 from 表名 where 条件));
二、子查询分类
子查询分为两种
- 嵌套子查询
- 相关子查询
1、嵌套子查询
- 指的是子查询中还包含其他的子查询
select(select(select(select)))
2、相关子查询(单值子查询)
- 指的是子查询的结果有且只有一个值,然后将一列值与查询返回的值进行比较
三、其他
1、使用insert和select语句添加数据
- 在INSERT语句中使用SELECT子句可以将一个或多个表或视图中的值添加到另一个表中。使用SELECT子句还可以同时插入多行
(当insert语句和select语句做结合,就是把查询的结果插入到某一张表中) - 通过select语句生成的结果集,再结合insert语句,可以把结果集插入到指定的表中,这种方法用于插入的数据不确定(通常多于一条),并且都具有一些特性时
- 格式
insert into 表名 select查询语句;
2、使用update和select语句(子查询)结合
格式:
update 表名
set 列名
where 列名 in(select 语句);
3、删除语句
delete from 表名 where 列名 in(select查询语句);
例:删除计算机系学生的成绩
delete from sc where sno in(select sno from student where sdept='计算机系');