本文转自:
定义:
指在一条 select 语句中, 嵌入了另外一条 select 语句, 那么被嵌入的 select 语句称之为子查询语句.
当一个查询是另一个查询的条件时, 称之为子查询.
主查询:
主要的查询对象, 第一条 select 语句, 确定的用户所有获取的数据目标 (数据源), 以及要具体得到的字段信息.
子查询和主查询的关系:
1, 子查询是嵌入到主查询中的;
2, 子查询的辅助主查询的: 要么作为条件, 要么作为数据源
3, 子查询其实可以独立存在: 是一条完整的 select 语句
子查询分类:
按功能分:
标量子查询: 子查询返回的结果是一个数据 (一行一列)
列子查询: 返回的结果是一列 (一列多行)
行子查询: 返回的结果是一行 (一行多列)
表子查询: 返回的结果是多行多列 (多行多列)
Exists 子查询: 返回的结果 1 或者 0(类似布尔操作)
按位置分:
Where 子查询: 子查询出现的位置在 where 条件中
From 子查询: 子查询出现的位置在 from 数据源中 (做数据源)
标量子查询:
概念
标量子查询: 子查询得到结果是一个数据 (一行一列)
语法
基本语法: select * from 数据源 where 条件判断 =/<> (select 字段名 from 数据源 where 条件判断); // 子查询得到的结果只有一个值
列子查询
概念
列子查询: 子查询得到的结果是一列数据 (一列多行)
语法
基本语法:
主查询 where 条件 in (列子查询);
行子查询
概念
行子查询: 子查询返回的结果是一行多列
行元素: 字段元素是指一个字段对应的值, 行元素对应的就是多个字段: 多个字段合起来作为一个元素参与运算, 把这种情况称之为行元素.
语法
基本语法:
主查询 where 条件 [(构造一个行元素)] = (行子查询);
总结:
已经学过三个子查询: 常见的三个子查询
标量子查询, 列子查询和行子查询: 都属于 where 子查询
表子查询
概念
表子查询: 子查询返回的结果是多行多列, 表子查询与行子查询非常相似, 只是行子查询需要产生行元素, 而表子查询没有.
行子查询是用于 where 条件判断: where 子查询
表子查询是用于 from 数据源: from 子查询
语法
基本语法:
Select 字段表 from (表子查询) as 别名 [where] [group by] [having] [order by] [limit]
- 1 =any(1,2,3) ===== true
- 1 <>any(1,2,3) ===== true
来源: http://www.bubuko.com/infodetail-3077501.html