子查询
- 出现在其他语句中的select语句,称为子查询或内查询
- 外部的查询语句,称为主查询或外查询
1.联合查询
union 合并去重复 两个的集合并集;并且会排重 如果是一个字段,重复直接去掉,如果是多个字段,都相同才会去重。
-- 查询所有教师和学生的 name birthday sex
SELECT tname,tbirthday,tsex FROM teachers UNION
SELECT sname,sbirthday,ssex from students;
union all:但是不会去重
-- 查询所有教师和学生的 name birthday sex
SELECT tname,tbirthday,tsex FROM teachers UNION ALL
SELECT sname,sbirthday,ssex from students;
union all 效率比union 高。
2.子查询
2.1 什么是子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句中的查询。数据库引擎将子查询作为虚表执行查 询操作。
子查询可作为联接语句中的一个表,也可作为选择语句中的一个值。
子查询的执行依赖于嵌套查询。顺序从最内层开始,一层一层向外执行,外层的嵌套查询可以访问内层嵌套查询的 结果,相比变量方式执行效率更高,子查询还可以将多表的数据组合在一起。
2.2 子查询的类型
查询语句中的任何条件,值,范围,都可以使用子查询表示。 将子查询的结果集 再作为一个临时表来用。
- 子查询结果为多行多列(当作虚拟表来使用) 查询每门课考试最高分的学生信息
- 子查询结果为多行一列(可以当作多个值来用(1,2,3,4)) 查询参加了某门课程考试的学生信息
- 子查询结果为一个值。(可以作为字段使用) 查询与张三在同一个班级的学生信息
2.3 比较运算符中使用子查询
如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插 入ANY、SOME或ALL。其中等值关系可以用IN操作符。
2.4 all子查询
all可以与=、>、>=、结合是来使⽤,分别表示等于、⼤于、⼤于等于、 ⼩于、⼩于等于、不等于其中 的所有数据。当所有数据都满足才是true,会返回满足所有条件的数据。
in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。
只要大于其中的所有值才会被显示。
高于最大值
- 查询比所有男生身高高的女生信息
2.5 any/some子查询
any 可以与=、>、>=、结合起来使⽤,分别表示等于、⼤于、⼤于等于、⼩于、⼩于等于、不等于其 中的任何⼀个数据。也就是说只要有任意一个满足就是true。并且显示满足条件的数据。
高于最小值
- 查询比某些男生高的女生信息
2.6 使⽤exists 和 not exists ⼦查询
where exist (⼦查询)如果该⼦查询有结果数据(⽆论什么数据,只要⼤于等于1⾏),则就为true,否则就为 false
如果内层select返回true则外层select可以返回值,否则就返回空。