mysql -- 子查询
所谓子查询,是指出现在其他语句中的select语句,也称内查询,外部的查询语句对应的称为主查询,或外查询。
分类
案子查询出现的位置不同,可分为:
select
后面,支持标量子查询from
后面,支持表子查询where
或having
后面,标量子查询,或列子查询 ( 一列多行 ),也支持行子查询( 多行多列 ),但用的较少exists
后面又称相关子查询, 表子查询
按结果集的行列数不同,有可分为
标量子查询
,结果集一行一列列子查询
, 结果集有一列多行行子查询
, 结果集为多行多列,主要为一行多列表子查询
, 一般为多行多列,对结果集的行列数无要求
用的较多的是用在where或having后边的子查询,首先可以是标量子查询,又称为单行子查询,也支持列子查询,一列多行,又称多行子查询,最后还支持行子查询,当然前边也介绍过了,用的较少。
在这个位置的子查询具有如下几个特点:
- 子查询在小括号内(所有的子查询都是)
- 子查询放在运算符右侧
- 标量子查询搭配单行操作符使用, 如 > ,< ,<>等这些运算符,列子查询搭配多行操作符使用,诸如any,some,in,all。
首先介绍where
后边的子查询标量子查询
:
一条where后边的子查询可写为:
若子查询结果非标量,即出现多行多列或者空结果集时,都是不正确的。select * from 某个表 where 某个列 > | < | <= | = | <> ( select 单个字段 from 某个表 where .... 其他语句 ) and | or 其他子查询...;
列子查询
( 又叫做多行子查询 )`:
其实语法上跟标量子查询没什么区别,只是操作符变成了多行操作符,子查询的结果是一列多行的。
行子查询
:
行子查询,使用较少,一条行子查询可以是这样:
select 查询字段 from 某个表 where (字段1,字段2) = ( 一条可以产生两列一行的结果集的子查询 )
select
后边的子查询
select后边只能跟标量子查询,一条select后的子查询可以写为
select ( 一条标量子查询语句 ) 别名 ...其他sql语句;
from
后边的子查询
from后边的子查询,会充当一个临时表,故而对结果集是无要求的,即为表子查询
语法:
select 字段名 from ( 任意子查询... ) 别名 其他sql语句;
子查询的别名是必须的,这里。
exists
后边的子查询
exists 子查询,假如子查询有结果存在,则exists 条件成立。
一般exists 都可以用in代替,所以他用的也较少。
本文作者:子龙_子龙
本文链接:https://www.cnblogs.com/ZiLongZiLong/p/17144883.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了