
子查询是指一个查询语句嵌套在另一个查询语句内部的查询。在select子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。
子查询中常用的操作符有any(some)、all、in、exists。子查询可以添加到select、update和delete语句中,而且可以进行多层嵌套。子查询中也可以使用比较运算符,如"",">=“和”!="。
(1)带any、some关键字的子查询
(2)带all关键字的子查询
(3)带exists关键字的子查询
(4)带in关键字的子查询
(5)带比较运算符的子查询
(免费学习推荐:mysql视频教程)
any和some关键字是同义词,表示满足其中任一条件,允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。
下面定义两个表tbl1和tbl2,并向两个表中插入数据:
mysql> create table tbl1( num1 int not null);Query OK, 0 rows affected (0.13 sec)mysql> create table tbl2(num2 int not null);Query OK, 0 rows affected (0.10 sec)mysql> insert into tbl1 values(1),(5),(13),(27);Query OK, 4 rows affected (0.05 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> insert into tbl2 values(6),(14),(11),(20);Query OK, 4 rows affected (0.06 sec)Records: 4 Duplicates: 0 Warnings: 0
any关键字接在一个比较操作符后面,表示若与子查询返回的任何职比较为true,则返回true。
【例】返回tbl2表的所有num2列,然后将tbl1中的num1的值与之进行比较,只要大于num2的任何一个值,即为符合条件的结果。
mysql> select num1 from tbl1 where num1 > any(select num2 from tbl2);+------+| num1 |+------+| 13 || 27 |+------+2 rows in set (0.00 sec)
【例】返回tbl1表中比tbl2表num2列所有值都大的值,SQL语句如下:
mysql> select num1 from tbl1 where num1 > all(select num2 from tbl2);+------+| num1 |+------+| 27 |+------+1 row in set (0.00 sec)
【例1】查询suppliers表中是否存在s_id=107的的供应商,如果存在,则查询fruits表中的记录,SQL语句如下:
mysql> select * from fruits -> where exists
-> (select s_name from suppliers where s_id = 107);+------+------+------------+---------+| f_id | s_id | f_name | f_price |+------+------+------------+---------+| 12 | 104 | lemon | 6.40 || a1 | 101 | apple | 5.20 || a2 | 103 | apricot | 2.20 || b1 | 101 | blackberry | 10.20 || b2 | 104 | berry | 7.60 || b5 | 107 | xxxx | 3.60 || bs1 | 102 | orange | 11.20 || bs2 | 105 | melon | 8.20 || c0 | 101 | cherry | 3.20 || m1 | 106 | mango | 15.70 || m2 | 105 | xbabay | 2.60 || m3 | 105 | xxtt | 11.60 || o2 | 103 | coconut | 9.20 || t1 | 102 | banana | 10.30 || t2 | 102 | grape | 5.30 || t4 | 107 | xbabay | 3.60 |+------+------+------------+---------+16 rows in set (0.00 sec)由结果可知,内层查询结果表明suppliers表中存在s_id=107的记录,因此exists表达式返回true;外层查询语句接收true之后对表fruits进行查询,返回所有记录。
【例2】查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中的f_price大于10.20的记录,SQL语句如下:
mysql> select * from fruits -> where f_price > 10.20 and exists
-> (select s_name from suppliers where s_id = 107);+------+------+--------+---------+| f_id | s_id | f_name | f_price |+------+------+--------+---------+| bs1 | 102 | orange | 11.20 || m1 | 106 | mango | 15.70 || m3 | 105 | xxtt | 11.60 || t1 | 102 | banana | 10.30 |+------+------+--------+---------+4 rows in set (0.00 sec)可以看到,内层查询表名suppliers表中存在s_id=107的记录,因此exists表达式返回true;外层查询语句接收true之后根据查询条件f_price>10.20对fruits表进行查询,返回结果为4条f_price大于10.20的记录。
【例3】查询suppliers表中是否存在s_id =107的供应商,如果不存在就查询fruits表中的记录,SQL语句如下:
mysql> select * from fruits -> where not exists
-> (select s_name from suppliers where s_id = 107);Empty set (0.00 sec)可以看到,内层查询返回结果为false,外层表达式接收false将不再查询fruits表中的记录。
注意:exists 和 not exists的结果只取决于是否会返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。
【例1】在orderitems表中查询f_id为c0的订单号,并根据订单号查询具有订单号的客户c_id,SQL语句如下:
mysql> select c_id from orders where o_num in
-> (select o_num from orderitems where f_id = 'c0');+-------+| c_id |+-------+| 10004 || 10001 |+-------+2 rows in set (0.00 sec)上面的语句是下面查询方式的简写:
mysql> select o_num from orderitems where f_id = 'c0';+-------+| o_num |+-------+| 30003 || 30005 |+-------+2 rows in set (0.00 sec)mysql> select c_id from orders where o_num in (30003,30005);+-------+| c_id |+-------+| 10004 || 10001 |+-------+2 rows in set (0.00 sec)
下面介绍与in相反的not in关键字:
【例2】与例1类似,但select语句中使用not in 关键字。SQL语句如下:
mysql> select c_id from orders where o_num not in
-> (select o_num from orderitems where f_id ='c0');+-------+| c_id |+-------+| 10001 || 10003 || 10005 |+-------+3 rows in set (0.00 sec)可以看到返回了三个表,查看orders中的记录可知,c_id等于10001的客户的订单不止一个:
mysql> select * from orders;+-------+---------------------+-------+| o_num | o_date | c_id |+-------+---------------------+-------+| 30001 | 2008-09-01 00:00:00 | 10001 || 30002 | 2008-09-12 00:00:00 | 10003 || 30003 | 2008-09-30 00:00:00 | 10004 || 30004 | 2008-10-03 00:00:00 | 10005 || 30005 | 2008-10-08 00:00:00 | 10001 |+-------+---------------------+-------+5 rows in set (0.00 sec)
结果只是排除了订单号,但仍然有可能选择同一个客户。
子查询的功能也可以通过连接查询完成,但子查询使得MySQL代码更容易阅读和编写。
【例1】在suppliers表中查询s_city等于"Tianjin"的供应商s_id,然后在fruits表中查询所有该供应商提供的水果的种类,SQL语句如下:
mysql> select s_id,f_name from fruits -> where s_id =
-> (select s1.s_id from suppliers as s1 where s1.s_city = 'Tianjin');+------+------------+| s_id | f_name |+------+------------+| 101 | apple || 101 | blackberry || 101 | cherry |+------+------------+3 rows in set (0.00 sec)【例2】在suppliers表中查询s_city等于"Tianjin"的供应商,s_id,然后在fruits表中查询所有非该供应商提供的水果的种类,SQL语句如下:
mysql> select s_id , f_name from fruits -> where s_id <>
-> (select s1.s_id from suppliers as s1 where s1.s_city ='Tianjin');+------+---------+| s_id | f_name |+------+---------+| 104 | lemon || 103 | apricot || 104 | berry || 107 | xxxx || 102 | orange || 105 | melon || 106 | mango || 105 | xbabay || 105 | xxtt || 103 | coconut || 102 | banana || 102 | grape || 107 | xbabay |+------+---------+13 rows in set (0.00 sec)更多相关免费学习推荐:mysql教程(视频)
以上就是MySQL数据查询之子查询的详细内容,更多请关注其它相关文章!
# 与子
# 网站建设行业新闻
# 通过病毒式营销进行app推广
# 上蔡网站推广团队电话
# 专业的网站建设服务好吗
# 舟山网站优化公司报价
# 西安企业网站建设宣传
# 鼓楼网络营销推广业务
# seo定价
# 郴州网站建设方案报价表
# 梅县全媒体营销推广中心
# MySQL
# 查询结果
# 将不
# 任何一个
# 数据查询
# 是否存在
# 可以看到
# 之子
# 运算符
# 镜像
# 子查询
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
《全民k歌》网页版最新登录入口一览
4399造梦西游3无敌版_4399游戏入口
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法
sf漫画官网登录入口直达_sf漫画官方正版网址
火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】
顺丰快递单号查询寄件人 顺丰寄件人查询入口
嘀嗒顺风车如何开具电子发票
漫蛙漫画直连入口 _ manwa官方备用入口实时检测
J*aScript包管理器_Npm与Yarn对比
wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式
抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍
Animex动漫社正版在线入口 Animex动漫社动漫官方观看网
画质怪兽120帧安卓和平精英免费版
纯CSS实现滚动时动态时间轴线条颜色填充效果
Go语言中方法接收器的选择:值类型还是指针类型?
poki官网最新入口 poki小游戏大全入口
yy漫画登录页面官方入口_yy漫画在线阅读网址入口
圆通快递官网入口查询单号 手机版官方查询入口
可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接
Win10截图远程协助 Win10远程桌面截屏法【场景应用】
SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南
Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】
如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法
macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整
c++如何掌握指针的核心用法_c++指针入门到精通指南
动漫岛汉化官网网 动漫岛官方动漫汉化地址
Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
Google Drive API 认证:服务账户与OAuth 2.0的选择与实践
《下一站江湖2》独孤剑诀习得方法
如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现
《真我》申请退款方法
如何配置VS Code作为您Git操作的默认编辑器
React应用中Commerce.js数据加载与状态管理最佳实践
《随手记》关闭首页消息推送方法
火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解
Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频
Mac怎么关闭按键声音_Mac键盘打字音效设置
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法
疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩
2025考研成绩查询时间入口分享
创建快捷方式启动系统保护
qq邮箱格式填写示例 qq邮箱标准填写规范
163邮箱网页版官方登录入口 163邮箱网页版访问页面
c++如何链接Boost库_c++准标准库的集成与使用
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
江苏大剧院会员卡购买步骤
2021-03-16
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。