news 2026/6/10 11:51:58

SQL必会必知整理-12-使用子查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL必会必知整理-12-使用子查询
12.1 子查询
  • 任何SQL语句都是查询。但此术语一般指SELECT语句。

  • SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。

12.2 利用子查询进行过滤
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
  • 上面的SELECT语句,MySQL实际上执行了两个操作:首先,它执行下面的查询:SELECT order_num FROM orderitems WHERE prod_id = 'TNT2' 此查询返回两个订单号:20005和20007。然后,这两个值以IN操作符要求的逗号分隔的格式传递给外部查询的WHERE子句。外部查询变成:SELECT cust_id FROM orders WHERE order_num IN (20005,20007)

  • 在SELECT语句中,子查询总是从内向外处理。

  • 包含子查询的SELECT语句难以阅读和调试,特别是它们较为复杂时更是如此。如上所示把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。

SELECT cust_name,cust_contact FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'));
  • 为了执行上述SELECT语句,MySQL实际上必须执行3条SELECT语句。最里边的子查询返回订单号列表,此列表用于其外面的子查询的WHERE子句。外面的子查询返回客户ID列表,此客户ID列表用于最外层查询的WHERE子句。最外层查询确实返回所需的数据。

  • 在WHERE子句中使用子查询能够编写出功能很强并且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。

  • 在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

  • 虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。

  • 这里给出的代码有效并获得所需的结果。但是,使用子查询并不总是执行这种类型的数据检索的最有效的方法。

12.3 作为计算字段使用子查询
  • 使用子查询的另一方法是创建计算字段。

SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name
  • 这条 SELECT 语句对 customers 表中每个客户返回 3 列 :cust_name、cust_state和orders。orders是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一次。在此例子中,该子查询执行了5次,因为检索出了5个客户。

  • 子查询中的WHERE子句与前面使用的WHERE子句稍有不同,因为它使用了完全限定列名。

  • 涉及外部查询的子查询。这种类型的子查询称为相关子查询。任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。

  • 用子查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。用子查询建立(和测试)查询的最可靠的方法是逐渐进行,这与MySQL处理它们的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 3:41:56

SQL必会必知整理-13-联结表

13.1 联结联结是利用SQL的SELECT能执行的最重要的操作&#xff0c;很好地理解联结及其语法是学习SQL的一个极为重要的组成部分。13.1.1 关系表外键为某个表中的一列&#xff0c;它包含另一个表的主键值&#xff0c;定义了两个表之间的关系。这样做的好处如下&#xff1a;信息不…

作者头像 李华
网站建设 2026/6/8 1:22:32

jQuery EasyUI 树形菜单 - 树形菜单添加节点

下面直接给你最实用、最常见的树形菜单添加节点方法&#xff0c;jQuery EasyUI 的 tree 组件支持超级灵活的动态添加节点&#xff08;新增根节点、新增子节点、插入同级节点等&#xff09;&#xff0c;复制粘贴就能用&#xff0c;领导最爱的“动态部门树新增、菜单管理新增节点…

作者头像 李华
网站建设 2026/6/9 15:08:56

AI智能体的核心引擎:知识库构建全流程详解(建议收藏)

本文详细介绍了AI知识库作为智能体"认知大脑"的核心价值&#xff0c;阐述了其三层组成要素&#xff08;事实层、规则层、语义层&#xff09;及与智能体的交互逻辑。通过未来智安的实践案例&#xff0c;展示了AI知识库如何实现快速威胁定位、持续学习沉淀和人机协同优…

作者头像 李华
网站建设 2026/6/7 20:09:51

四端互通与高并发:下一代即时通讯系统的核心技术解析

在当前数字化时代&#xff0c;即时通讯系统已成为人们日常沟通的重要工具。一套优秀的即时通讯解决方案需要实现PC端、Web端、iOS和Android四端无缝互通&#xff0c;同时能够应对海量用户并发访问的挑战。本文将深入探讨实现这一目标的核心技术方案。全平台覆盖的架构设计现代即…

作者头像 李华
网站建设 2026/6/7 4:40:25

两大神器助你一键本地部署大模型,小白也能秒变专家

文章介绍了本地部署大模型的四大必要性&#xff1a;数据隐私安全、摆脱网络依赖、降低长期成本、个性化定制。推荐了两款工具&#xff1a;DS本地部署大师&#xff0c;提供图形化界面和内置模型&#xff0c;一键安装使用&#xff1b;聪明灵犀&#xff0c;支持硬件监控、参数调优…

作者头像 李华
网站建设 2026/6/9 23:20:58

Agentic AI崛起——从LLM到自主智能体的技术革命

本文系统梳理了从LLM到Agentic AI的技术演进历程&#xff0c;从Agent概念溯源出发&#xff0c;分析了单智能体的局限性与多智能体的协作优势&#xff0c;阐述了Agentic AI的核心特征与本质内涵。文章指出&#xff0c;技术组合带来的能力涌现是推动AI从被动对话工具向主动智能伙…

作者头像 李华