mysql小知识

什么是sql语句的子查询

      SQL语句的子查询是指在一个SQL语句中嵌套另一个SQL语句。子查询可以嵌套在主查询的FROM子句、WHERE子句、HAVING子句、SELECT子句或INSERT语句中。

     子查询可以返回一个结果集,这个结果集可以被主查询使用。子查询通常用于获取需要在主查询中使用的数据,或者用于限制主查询的结果集。通过子查询,可以在一个查询中完成多个操作。

   子查询可以是简单的SELECT语句,也可以是复杂的多表连接和聚合操作。在子查询中可以使用各种SQL语句和操作符,包括WHERE、JOIN、GROUP BY、HAVING、UNION等,以满足不同的查询需求。

    使用子查询可以提高查询的灵活性和复杂性,使得查询可以更精确地获取所需的数据。但是,子查询的嵌套过深或使用不当可能会导致查询效率低下或出现错误,因此在使用子查询时需要注意优化和避免潜在的问题。

子查询分类

     根据使用子查询的位置和功能,可以将子查询分为以下几类:

  1. 标量子查询(Scalar Subquery):标量子查询返回单个值作为结果。这种子查询通常嵌套在SELECT语句的列中,用于计算或获取单个值的信息。例如:
SELECT column1, (SELECT MAX(column2) FROM table2) as max_value
FROM table1;

  1. 行子查询(Row Subquery):行子查询返回一行或多行作为结果。这种子查询通常在WHERE子句中使用,并与主查询的条件进行比较。例如:
SELECT column1
FROM table1
WHERE (column2, column3) IN (SELECT column2, column3 FROM table2);

  1. 列子查询(Column Subquery):列子查询返回一个列作为结果。这种子查询通常在SELECT语句的列中使用,作为某个列的值。例如:
SELECT column1, (SELECT column2 FROM table2 WHERE table1.column1 = table2.column1) as column2_value
FROM table1;

  1. 表子查询(Table Subquery):表子查询返回一个结果集作为结果。这种子查询通常嵌套在FROM子句中,作为一个临时表。例如:
SELECT t1.column1, t2.column2
FROM (SELECT column1 FROM table1) as t1
JOIN (SELECT column2 FROM table2) as t2 ON t1.column1 = t2.column2;

  1. 相关子查询(Correlated Subquery):相关子查询是指嵌套在主查询中的子查询,可以引用主查询中的列,并与主查询的条件有关。这种子查询的结果集是根据主查询的每一行动态生成的。例如:
SELECT column1
FROM table1 t1
WHERE column2 = (SELECT MAX(column2) FROM table2 WHERE t1.column1 = table2.column1);

关联查询

  1. 内连接(INNER JOIN):内连接是最常见的关联查询类型,它只返回匹配的行。内连接使用两个表之间的关联条件来匹配行,并返回满足条件的行。

    示例:

    SELECT *
    FROM table1
    INNER JOIN table2 ON table1.column = table2.column;
    

  2. 左连接(LEFT JOIN):左连接返回左表中的所有行,以及右表中与左表中匹配的行。如果右表中没有匹配的行,则以NULL填充右表的列。

    示例:

    SELECT *
    FROM table1
    LEFT JOIN table2 ON table1.column = table2.column;
    

  3. 右连接(RIGHT JOIN):右连接返回右表中的所有行,以及左表中与右表中匹配的行。如果左表中没有匹配的行,则以NULL填充左表的列。

    示例:

    SELECT *
    FROM table1
    RIGHT JOIN table2 ON table1.column = table2.column;
    

  4. 全连接(FULL JOIN):全连接返回左右两个表中的所有行,如果两个表中没有匹配的行,则以NULL填充匹配的一方。

    示例:

    SELECT *
    FROM table1
    FULL JOIN table2 ON table1.column = table2.column;
    

  5. 自连接(SELF JOIN):自连接是指在同一表中创建连接。它将表视为两个不同的实体,并使用别名来区分它们。自连接通常用于将表的数据与自身进行比较和分析。

    示例:

    SELECT *
    FROM table1 AS t1
    INNER JOIN table1 AS t2 ON t1.column = t2.column;
    

   区别 

  1. 内连接(INNER JOIN):返回满足连接条件的行,两个表中不匹配的行将被忽略。

  2. 外连接:

    • 左外连接(LEFT JOIN):返回左表中的所有行以及满足连接条件的右表中的匹配行,右表中不匹配的行将以NULL值显示。
    • 右外连接(RIGHT JOIN):返回右表中的所有行以及满足连接条件的左表中的匹配行,左表中不匹配的行将以NULL值显示。
    • 全外连接(FULL OUTER JOIN):返回左表和右表中的所有行,如果没有匹配的行,将以NULL值显示。
  3. 自连接(SELF JOIN):将表视为两个独立实例并进行连接,通常用于将表中的数据与其自身进行对比或分析。

  4. 交叉连接(CROSS JOIN):返回两个表中的所有可能组合,结果是两个表的行数乘积。

  5. 自然连接(NATURAL JOIN):通过比较两个表中的同名列,自动找到匹配的列进行连接,并且只返回一次列名。

  • 内连接只返回满足连接条件的行,而外连接会返回所有的行,对于不匹配的行,会使用NULL值填充。
  • 自连接是将表视为两个独立实例进行连接,用于将表中的数据与其自身进行对比或分析。
  • 交叉连接返回两个表中的所有可能组合,结果是两个表的行数乘积。
  • 自然连接通过比较两个表中的同名列自动找到匹配的列进行连接,只返回一次列名。

总结 

  1. 子查询:

    • 子查询是在一个查询内部嵌套了另一个查询。
    • 子查询可以在SELECT、FROM、WHERE、HAVING和INSERT语句中使用。
    • 子查询可以返回单个值或者多个值。
    • 子查询可以嵌套多层。
    • 子查询可以用来过滤数据、计算表达式、排序、分组等操作。
    • 子查询的运行效率较低,可能会导致性能问题。
  2. 关联查询:

    • 关联查询是在两个或多个表之间建立关联,通过匹配相关字段来获取结果。
    • 关联查询可以使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN等操作符。
    • 关联查询可以返回多个表的列,形成一个虚拟的联合表。
    • 关联查询可以根据关联条件来过滤数据、计算表达式、排序、分组等操作。
    • 关联查询的效率较高,可以通过优化查询语句和创建索引来提高性能。
  • 子查询适合在需要根据查询结果进行进一步操作的场景,灵活性较高,但性能较差。
  • 关联查询适合在需要从多个表中获取相关数据的场景,性能较好,但可读性较差。
  • 在实际使用中,应根据查询的具体需求和数据量来选择子查询或关联查询。

 

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

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

相关文章

【Java 设计模式】行为型之中介者模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 中介者模式(Mediator Pattern)是一种行为型设计模式,用于通过一个中介对象来集中管理多个对象之间的交互关系,从而降低对象之间的耦合度。中介者模式通过将对象之间的通信委托给中介者…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第8章 项目整合管理(七)

博主2023年11月通过了信息系统项目管理的考试,考试过程中发现考试的内容全部是教材中的内容,非常符合我学习的思路,因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家,希望更多的人能够通过考试&a…

计算机网络体系架构认知--网络协议栈

文章目录 一.计算机网络分层架构各协议层和计算机系统的联系从整体上理解计算机网络通信计算机网络通信的本质 二.Mac地址,IP地址和进程端口号三.局域网通信与跨局域网通信局域网通信跨局域网通信全球互联的通信脉络 四.网络编程概述 一.计算机网络分层架构 实现计算机长距离网…

12.Golang中类的表示与封装

目录 概述类的表示代码结果 类的封装代码结果 结束 概述 Golang中类的表示与封装 类的表示 代码 注释掉的代码,并不能拿来当赋值或获取值来使用。 package mainimport "fmt"// 类大写则代表,可以被其它包使用 type Hero struct {// 属性方法大…

RHCE作业

1.写一个脚本,完成如下功能 传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一 (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.gz; (2) 如果参…

临紧光五行护盾

临紧光五行护盾基础名词解释 粒子系统仿真,离散事件系统设计临紧光五行护盾(云藏山鹰临近光五行散射)V-ATPase道装,意气实体过程光效集聚模拟器荀况数论云藏山鹰类型物粒子系统导引云藏山鹰类型物与冯诺依曼爆炸学物品分类表杨米尔…

【华为 ICT HCIA eNSP 习题汇总】——题目集10

1、以下哪个动态路由协议不能应用在 IPv6 网络中? A、IS-IS B、RIPng C、BGP4 D、OSPFv3 考点:路由技术原理 解析:(A) IS-ISv6 是在 IPv6 环境下,IS-IS 协议进行了相应的扩展和改进,以适应 IPv6…

Spring Retry 和 Guava Retrying重试机制的使用详解

点击下载《Spring Retry 和 Guava Retrying重试机制的使用详解》 1. Spring-Retry优雅地实现重试机制 在现代的分布式系统中,由于网络不稳定、服务短暂不可用或资源争用等原因,调用远程服务时偶尔会遇到失败。为了增强系统的健壮性,我们通常…

机器学习--基础概念(二)

1.分类算法 分类算法是有监督学习的一个核心问题,他从数据中学习一个分类决策函数或分类模型,对新的输入进行预测,输出变量取有限个离散值。 以下是一些常见的分类算法: 逻辑回归 (Logistic Regression): 用于二分类问题&#x…

项目风采展示【TRDa】

桌面功能介绍: 1:支持本地音乐、三方音乐控制播放展示功能; 2:支持陀螺仪 3:支持蓝牙列表显示。

STM32单片机的基本原理与应用(二)

单片机外部中断的基本原理 STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处。那么其中断是怎样实现的呢?其原理就是由GPIO口产生触发信号,通过NVIC中断控制器和EXTI外部中断控制器完成中断响应。使用外部中断可以…

Node.js Cool 框架分页数据 如果在一个状态下获取多个状态的数据

1.需求 比如你想实现 订单状态列表的获取 有可能orderStatus12 的时候 想返回 orderStatus10 11 12 13 的时候 分页返回 2.解决 query.orderProgress[] 此时条件就变成了一个数组 //订单列表async getOrderListByprogress(query) {const { userId } this.ctx.clientInfo…

RabbitMQ问题总结

:::info 使用场景 异步发送(验证码、短信、邮件。。。)MySQL 和 Redis、ES 之间的数据同步分布式事务削峰填谷… ::: 如何保证消息不丢失 上图是消息正常发送的一个过程,那在哪个环节中消息容易丢失?在哪一个环节都可能丢失 生…

opencv#32 可分离滤波

滤波的可分离性 就是将一个线性滤波变成多个线性滤波,这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波,两者的叠加结果是一致的,这个性质取决于滤波操作是并行的,也就是每一个图像在滤…

vue3+echarts绘制某省区县地图

vue3echarts绘制某省区县地图 工作中经常需要画各种各样的图,echarts是使用最多的工具,接近春节,想把之前画的echarts图做一个整合,方便同事和自己随时使用,因此用vue3专门写了个web项目,考虑之后不断完善…

基于SpringBoot实现策略模式提供系统接口扩展能力

相信我们对策略模式都有耳闻,但是可能不知道它在项目中具体能有什么作用,我们需要在什么场景下才能去尽可能得去使用策略模式。 这里我简单的列出一个我之前在公司做的一个需求:跟第三方oa系统对接接口,对方需要回调我们当前系统…

R12.2 EBS 修改 APPS 密码 详细步骤

目录 前言准备修改步骤1.关闭应用层2.FNDCPASS 修改密码3. 运行 autoconfig4.单独启动 webLogic 服务5.登录weblogic,更新apps密码6.启动应用层7.验证 结尾 前言 本文的目的是修改 apps 密码,主要参考官方文档 metalink 1674462.1,请注意本文…

代码随想录算法训练营Day|层序遍历,翻转二叉树,对称二叉树

层序遍历 层序遍历一个二叉树,就是从左往右一层一层的遍历二叉树,这种遍历方式需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而…

Task04:DDPG、TD3算法

本篇博客是本人参加Datawhale组队学习第四次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

Delphi 7 IdHTTP POST 中文乱码得解决

WEB后台使用UTF-8进行编码,由于D7默认是ansiString,直接提交到后台会使中文乱码。 解决方法: 1.先把AnsiString转WideString 2.通过System单元中的ansitoUTF8()函数进行转换之后再提交就可以了。 代码示例: procedure postDe…