子查询
子查询: 查询是在某个查询结果之上进行的.(一条select语句内部包含了另外一条select语句).
子查询分类
子查询有两种分类方式: 按位置分类;和按结果分类
- 按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置
- From子查询: 子查询跟在from之后
- Where子查询: 子查询出现where条件中
- Exists子查询: 子查询出现在exists里面
- 按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)
- 标量子查询: 子查询得到的结果是一行一列
- 列子查询: 子查询得到的结果是一列多行
- 行子查询: 子查询得到的结果是多列一行(多行多列) (1,2,3出现的位置都是在where之后)
- 表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)
标量子查询
需求: 找到分类为科技的所有文章标题
列子查询
这个时候我就想起以前面试的情形,当时有一道题,给我一个表,让我找出语文和数学都及格人的名字。表是这样的:
行子查询
行子查询: 返回的结果可以是多行多列(一行多列)
需求:找出年龄最大且身高最高的人
方案一:
方案二:
表子查询
表子查询: 子查询返回的结果是多行多列的二维表: 子查询返回的结果是当做二维表来使用
需求:找出每个人最好的成绩
Exists子查询
Exists: 是否存在的意思, exists子查询就是用来判断某些条件是否满足(跨表), exists是接在where之后: exists返回的结果只有0和1.
需求:如果存在的话身高大于2米的人,列出表中所有数据