mysql子查询

1、概念

        子查询就是将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件的查询。

2、分类

  • 按查询结果的行列数
    • 标量子查询:结果只有一行一列
    • 列子查询:结果只有一列多行,也称为多行子查询
    • 行子查询:结果有一行多列或多行多列
    • 表子查询:结果一般为多行多列
  • 按子查询出现的位置:SELECT后面、FROM后面、WHERE或HAVING后面、EXISTS后面(相关子查询)
    • SELECT后面:仅仅支持标量子查询。
    • FROM后面:支持表子查询
    • WHERE或HAVING后面:主要支持标量子查询和列子查询,行子查询用得比较少
    • EXISTS后面:支持表子查询

2.1 SELECT后面的子查询

SELECT Column1, (SELECT MAX(Column2) FROM Table2 t2 where t1.id=t2.t1_id) AS MaxValue
FROM Table1 t1;

        主查询的表是Table1,子查询的表是Table2,根据SQL的执行顺序得知此子查询的结果返回的是一个标量

2.2 FROM后面的子查询

        FROM后面一般是表,代表数据源,因此是把子查询的结果当作一张表,且必须给这张表起别名

SELECT avg_t2.*,t1.*
FROM (SELECT t2.name,AVG(t2.salary) AS avg_salaryFROM Table2 t2GROUP BY t2.name
) avg_t2
LEFT JOIN Table1 t1
ON t1.name=t2.name;

2.3 WHERE或HAVING后面的子查询

特点

  • 子查询放在小括号内。
  • 子查询一般放在条件的右侧。
  • 标量子查询一般搭配着单行操作符使用,比如:>、<、>=、<=、=、!=;列子查询一般搭配着多行操作符使用,比如IN、ANY/SOME、ALL。
  • 子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果。

示例

select t1.*, ( select count(*) from Table2 t2 where t1.id = t2.t1_id ) as t2Countfrom Table1 t1;

2.4 EXISTS后面的子查询

语法:EXISTS(完整的查询语句),括号内的查询语句可以1行1列,也可以多行多列。

结果:1或0,当括号内有查询结果时,返回1,当括号内没有查询结果时,返回0。在逻辑判断中,1可认为是True,0可认为是False。

一般来讲,EXISTS后面的子查询都可以用IN后面的子查询代替,所以用得不是很多。

SELECT t1.*
FROM Table1 t1
WHERE EXISTS(SELECT t2.idFROM Table1 t2WHERE t1.id = t2.t1_id
);

3、缺点

        子查询虽然好用但是也有弊端 使用子查询的主要缺点包括以下几个方面:

  •  执行效率较低:由于子查询需要先执行一次,然后将结果作为临时表再参与外部查询的处理,因此执行效率通常会比较低。
  •  可读性较差:当嵌套多层子查询时,SQL 查询语句的可读性和可维护性会变得较差,特别是对于初学者或不熟悉 SQL 语言的开发人员来说,理解查询语句的逻辑和含义可能会有困难。
  •  可扩展性较差:在使用子查询时,如果需要添加更多的条件或限制,可能需要频繁地嵌套子查询,从而导致查询语句变得冗长和复杂。这也使得查询语句的可扩展性较差。
  •  可能存在逻辑错误:在编写子查询时,需要非常仔细地考虑查询的逻辑和语法,否则可能会导致查询出现错误或返回错误的结果。

        因此,在使用子查询时,需要仔细考虑查询的逻辑和优化方式,以最大程度地提高查询的效率、可读性和可维护性,同时避免出现逻辑错误和产生负面影响。

        如果子查询中的查询条件涉及到了被索引的字段,那么直接加索引可以帮助优化子查询。当使用索引时,数据库可以快速定位匹配结果而不必扫描整个表,从而提高查询效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue通过span-method合并列之后,合并列显示在中间位置,根据鼠标滑动跟随展示

当vue通过span-method合并列之后&#xff0c;出现的合并列显示在中间位置&#xff0c;但是如果页面没有分页&#xff0c;如何进行展示呢&#xff0c;难道要滑到最下面去看吗&#xff0c;下面我们来根据鼠标滑动跟随展示 没有处理的合并页面 <template> <el-table:dat…

智能穿戴AR眼镜主板方案定制_MTK平台AR智能眼镜PCB板开发

AR智能眼镜&#xff0c;是采用了多种技术实现增强现实效果&#xff0c;是将虚拟信息和现实场景相结合的智能设备。 AR智能眼镜硬件上&#xff0c;包括多个传感器、显示装置和处理器等。其中&#xff0c;传感器用于捕捉用户的动作和环境信息&#xff0c;如摄像头、陀螺仪、加速…

Hadoop入门——数据分析基本步骤

文章目录 1.概述2.分析步骤2.1第一步 明确分析目的和思路2.2第二步 数据收集2.3第三步 数据处理2.4第四步 数据分析2.5第五步 数据展现2.6第六步 报告撰写 3.总结 1.概述 2.分析步骤 2.1第一步 明确分析目的和思路 2.2第二步 数据收集 2.3第三步 数据处理 2.4第四步 数据分析 …

Phar 文件上传以及反序列化

1.phar反序列化 触发条件&#xff1a; 1、能将phar文件上传 2、可利用函数 stat、fileatime、filectime、file_exists、file_get_contents、file_put_contents、file、filegroup、fopen、fileinode、filemtime、fileowner、fileperms、is_dir、is_executable、is_file、is_link…

BEVFormer 论文阅读

论文链接 BEVFormer BEVFormer&#xff0c;这是一个将Transformer和时间结构应用于自动驾驶的范式&#xff0c;用于从多相机输入中生成鸟瞰&#xff08;BEV&#xff09;特征利用查询来查找空间/时间&#xff0c;并相应地聚合时空信息&#xff0c;从而为感知任务提供更强的表示…

【ROS】RViz2源码下载、编译、运行

【ROS】郭老二博文之:ROS目录 1、源码下载 1.1 源码地址 ROS1对应的RViz源码:https://github.com/ros-visualization/rviz ROS2对应的RViz2源码:https://github.com/ros2/rviz 注意:在搜索RViz2源码时,使用傻度搜索的结果是对应ROS1的RViz,使用谷歌的搜索结果是正确的…

c++之json的创建,解析,增加,删除

c之json的创建&#xff0c;解析&#xff0c;增加,删除 1.存储方式,类型2.宏3.创建,保存json4.解析5.删除6.修改 1.存储方式,类型 typedef struct cJSON { struct cJSON *next,prev; / next是获取下一个元素数据&#xff0c;prev是获取前一个元素数据 */ struct cJSON child…

【华为OD机试高分必刷题目】生理周期(C++-模拟迭代实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试高分必刷题目】生理周期(C++-模拟迭代实现)题目描述解题思路java题解代码代码OJ评判结果代码讲解寄语【华为OD机试高分必刷题目…

NLP---文本前期预处理的几个步骤

1、读取文本 text1 """ Football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal. Unqualified, the word football is understood to refer to whichever form of football is the most popular in the reg…

13.利用辗转相除法求两个整数的最大公约数和最小公倍数。如96,36

文章目录 前言一、题目描述 二、题目分析 三、解题 前言 本系列为循环结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 利用辗转相除法求两个整数的最大公约数和最小公倍数,如96,36 二、题目分析 最小公倍数(输入的两个数之积)除(它们的最大公约数) 三…

大模型应用--prompt工程实践

在使用大模型进行prompt 训练时&#xff0c;自己做的相关笔记。 本文以openai<1.0版为例。 1.调用大模型 定义调用openai大模型的函数 get_completion() def get_completion(prompt, model"gpt-3.5-turbo"):messages [{"role": "user", …

C++——友元函数

如下是一个日期类&#xff1a; class Date { public:Date(int year 2023, int month 10, int day 1){_year year;_month month;_day day;if (_month < 1 || month > 12 || _day < 1 || _day > GetMonthDay(_year, _month)){cout << "日期不规范&…

解决鸿蒙系统打开系统相机

AndroidManifest.xml添加 <queries><package android:name"com.huawei.camera" /></queries>

一篇博客读懂单链表——Single-List

目录 一、初识单链表 单链表是如何构造的&#xff1a; 单链表如何解决顺序表中的问题&#xff1a; 二、单链表的初始定义 三、尾插和头插 3.1 新建结点CreateNode 3.2 打印SLTPrint 3.3 尾插SLTPushBack 3.4 头插SLTPushFront 四、尾删和头删 4.1 尾删SLTPopBack…

hub.docker访问不了的问题(一步解决)

暂时我也不清楚&#xff0c;但是下面这个网址可以用(可以先用着)Docker Hub Container Image Library | App Containerization (axlinux.top)https://hub.axlinux.top/

Testng XML文件

目录 概述 XML各部分介绍 概述 当你使用TestNG测试框架时&#xff0c;你可以使用XML文件来配置和运行测试套件。XML文件中包含了测试类、测试方法、测试参数等配置信息&#xff0c;使你能够更灵活地组织和管理测试。 以下是一个简单的TestNG XML文件的例子&#xff1a; &l…

设计模式中的静态工厂,到底解决了什么问题?

设计模式中的静态工厂&#xff0c;到底解决了什么问题&#xff1f; 文章目录 设计模式中的静态工厂&#xff0c;到底解决了什么问题&#xff1f;一、基本说明二、代码演示1、名称更明确2、不必每次调用都创建新对象3、返回接口类型4、降低客户端和具体实现之间的耦合5、参数化实…

Maya 2024 for Mac(3D建模软件)

Maya 2024是一款三维计算机图形软件&#xff0c;具有强大的建模、动画、渲染、特效等功能&#xff0c;广泛应用于影视、游戏、广告等行业。以下是Maya 2024软件的主要功能介绍&#xff1a; 建模&#xff1a;Maya 2024具有强大的建模工具&#xff0c;包括多边形建模、曲面建模、…

数据可视化在监控易中的艺术与实践

在数字化运维管理中&#xff0c;数据可视化成为一种日益重要的工具&#xff0c;它将复杂的数据通过图形化的方式呈现&#xff0c;帮助运维团队更加直观和快速地理解系统的运行状况。监控易&#xff08;MeiXin Era&#xff09;将数据可视化引入到运维监控中&#xff0c;通过科学…

浅谈Elasticsearch 文档操作

Elasticsearch 文档操作 Elasticsearch 是一个基于 Lucene 的分布式搜索引擎&#xff0c;它提供了全文搜索、结构化搜索、分析等功能。在 Elasticsearch 中&#xff0c;文档操作是一个重要的功能&#xff0c;包括文档的索引、更新、删除以及批量操作。本文将详细介绍 Elastics…