当前位置: 首页 > news >正文

[mysql]子查询的概述和分类及单行子查询

子查询引入

查询的基本结构已经给大家了,子查询里面也是有一些新的内容,子查询其实就是在查询中嵌套另一个查询,叫嵌套查询可能大家更容易理解一点..,类似与FOR循环和FOR循环的嵌套,这一章是我们查询的最难的部分,大家

难度是查询的顶峰,多表查询和子查询是非常重要,SQL优化里面主要还是针对查询的优化.

子查询是mysql4.1里面引入的,现在java用的比较多的是8.0,数据库和java企业都没有动力去更新,我们讲课的向下兼容的,虽然现在是8.0,但是讲的还是会涉及,当我们现在有一个需求,查询谁的工资比a高,所以我们要先查询abel的工资,然后再把这个工资放入查询条件中进行查询.

首先我们看到了这个需求,谁的工资比abel高,我们如何不用子查询来进行.

SELECT last_name,salary

FROM employees

WHERE last_name=’abel’

我们可以看到abel工资的11000,我们现在就查询工资比11000高就行.

我们要和数据库服务器进行2次交互,效率肯定是比较低的,我们就像能不能用一条语句来进行.我们是不是可以用自连接来进行

SELECT T1.last_name,T1.salary

FROM employees T1

JOIN employees T2

ON T1.salary>T2.salary AND T2.last_name='abel'

这时我们利用自连接,把所有工资比abel高的字段筛选出来.

方式2自连接肯定要比方式1块

1虽然这个条件可以用多表查询,但是其他类似的条件就不能用自连接

2:这个不容易想出来,不够直观

那么我们就可以引入子查询

子查询介绍

我们先写WHERE条件,因为这个条件不是一个值,我们需要用另一个查询才能查询出来,所以我们直接把查询条件改成另一个查询结构SELECT last_name,salary

FROM employees

WHERE salary>(

              SELECT salary

              FROM employees

              WHERE last_name='abel')

注意这里的查询条件只能出现一个值.由一个问题需求引入一个查询

首先我们谈谈一个名称,一个称谓,子查询包括了外查询,和内查询.

外面的查询就叫外查询,里面的就叫内查询,这是相对的叫法.

外查询也被叫做主查询,内查询也被叫子查询.

接下来我们看看有什么具体的要求,

1子查询是在主查询之前一次查询,

2子查询的结果被外查询使用

注意事项

1:子查询要被括号包裹,由于子查询比较复杂,用括号包裹会比较清晰

2子查询要放在比较条件的右侧

Ps,就是在比较符号的后面,如果在前面就是这样

SELECT last_name,salary

FROM employees

WHERE (

              SELECT salary

              FROM employees

              WHERE last_name='abel')<salary

我们会发现这样也行,但是为什么要这样呢,我们这是为了可读性和美观的考虑.头短尾长比较好.

3.单行操作费对应单行子查询,多行操作符对应多行子查询.

子查询分类

分类可以从不同的角度去分,第一个角度,

角度1: 出多个结果或者一个结

单行子查询,,

查询之后出一个结果的就是单行子查询

多行子查询

查询之后出多个结果的就是单行子查询

角度2内查询是否被执行多次

相关查询:

比如我们需要查询部门工资大于本部门平均工资的员工信息

里面的子查询会因为外查询记录部门的不同返回的值而改变.也就是返回不同的平均值.

比如白和白生的就是黑的,

不相关查询

比如需求我们要查询工资大于公司的平均工资的员工.

里面的子查询,或者说内查询条件,不会跟随外查询记录的改变而改变,

这里的就说清楚了,因为我们的子查询语句比较多,所以要写的行数也比较多,所以我们先做一个分类,我们下面要讲的就是单行子查询和多行子查询的案例.

我会把这两个查询的范围都限制在不相关子查询内容,所以下面的相关子查询把这个难度就调高起来

趁热打铁开始吧

也就是里面只有一个数据供我们外部使用,

子查询的编写技巧:

1从里往外写

2从外往里写

单行子查询

单行子查询操作符号

= != > < <> <= >=

也就是我们之前的逻辑操作符号

情况1

”查询工资大于149号员工工资的员工信息

由于我们不知道149号员工的工资,我们就要进行子查询.”

这里因为比较简单,所以我们技巧1和技巧2都可以

我们就先写子查询

        SELECT employee_id

        FROM employees

        WHERE employee_id=149

再写外查询

没问题,我们就查询出来了

题目2返回job_id与141号员工相同,salary比143员工多的员工姓名

SELECT employee_id,job_id,salary

FROM employees

WHERE job_id=(

        SELECT job_id

        FROM employees

        WHERE employee_id=141)

AND salary>(

        SELECT salary

        FROM employees

        WHERE employee_id=143)

如果我们看见了一个查询语句,我们可以把这个语句转换为中文吗,也就是要看出这个查询语句来看出它的需求.这个能力也要有,我们现在主要是做需求.

题目返回公司工资最少的员工last_name,job_id和salary

SELECT last_name,job_id,salary

FROM employees

WHERE salary=(

        SELECT MIN(salary)

        FROM employees)

注意这里可能是好几个员工,但是还是单行子查询,因为我们内查询只返回一条记录

情况2

查询与141号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id

我们先不用理过滤条件,查询其他员工的

employee_id,manager_id,department_id还是会写的把,我们就先写外查询

SELECT employee_id,manager_id,department_id

FROM employees

WHERE

然后补充内查询

SELECT employee_id,manager_id,department_id

FROM employees

WHERE manager_id =(

              SELECT manager_id

              FROM employees

              WHERE employee_id=141)

AND department_id =(

              SELECT department_id

              FROM employees

              WHERE employee_id=141)

这是方式1:

方式1成对子查询

我们还有一个方式2,可以一次性把两个字段条件写在一起

SELECT employee_id,manager_id,department_id

FROM employees

WHERE (manager_id,department_id) =(

              SELECT manager_id,department_id

              FROM employees

              WHERE employee_id=141)

结果是一致的,这叫我们的成对子查询.效率上差别不大,上面的适用性比较高,所以这个不会写也没事,了解就可以了.适用场景太窄了

情况3,HAVING中的子查询

题目:查询最低工资大于50号部门最低工资的 部门id和其最低工资

SELECT MIN(salary)

SELECT department_id,MIN(salary)

FROM employees

GROUP BY department_id

HAVING MIN(salary)>(

                    SELECT MIN(salary)

                    FROM employees

                    WHERE department_id=50)

因为五十号部门工资是不确定的,所以我们要用到子查询

这里不行要空值我们就可以用外查询WHERE筛选掉

SELECT department_id,MIN(salary)

FROM employees

WHERE department_id IS NOT NULL

GROUP BY department_id

HAVING MIN(salary)>(

                    SELECT MIN(salary)

                    FROM employees

                    WHERE department_id=50)

所以我们HAVING中我们也可以使用子查询

情况4:CASE中的子查询

显示员工的employee_id,last_name和location.其中若员工department_id与location_id为1800的department_id相同则location为canada,其余为USA

这里我们还是先写外查询再写内查询,

SELECT employee_id,last_name,(

  CASE department_id

                                         WHEN (

        SELECT department_id

        FROM departments

        JOIN locations T3

        ON T3.location_id=departments.location_id

        WHERE T3.location_id=1800)

 THEN

                                          'canada'

                                         ELSE

                                          'USA'

END

) "location"

FROM employees

情况5:子查询中的空值问题.

如果子查询的结果是空值,那么不会报错,返回的会是一个空表比如下面这种情况

SELECT last_name,job_id

FROM employees

WHERE job_id=(SELECT job_id FROM employees WHERE last_name=102)

情况6:非法使用子查询

如果我们用单行操作符进行多行操作,会出现什么情况

这时会直接报错

下期介绍

如果多行子查询我们就应该用多行操作符号,IN或者BETWEEN.

相关文章:

[mysql]子查询的概述和分类及单行子查询

子查询引入 查询的基本结构已经给大家了,子查询里面也是有一些新的内容,子查询其实就是在查询中嵌套另一个查询,叫嵌套查询可能大家更容易理解一点..,类似与FOR循环和FOR循环的嵌套,这一章是我们查询的最难的部分,大家 难度是查询的顶峰,多表查询和子查询是非常重要,SQL优化里…...

SpringMVC执行流程(视图阶段JSP、前后端分离阶段)、面试题

目录 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 3.前后端分离的项目SpringMVC执行流程 4. 面试题 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 流程图&#xff1a; 更加生动的描述&#xff1a; DisPatcherServlet…...

宠物空气净化器有用吗?有哪几款吸毛效果好且低噪的推荐

伴随着天气越来越凉&#xff0c;照常来说&#xff0c;猫咪掉毛的频率应该会变少&#xff0c;但是为什么我家的猫咪还在掉很多毛。 现在就连南方地区都要加外套了&#xff0c;但是猫咪掉毛太多&#xff0c;都不敢穿纯棉面料的衣服&#xff0c;还有本来想着顺应天气的变化&#…...

linux -磁盘管理命令

学会用fidsk -l blkid lskid 就够用 格式化文件系统&#xff1a;mkfs -t <文件系统格式> /dev/vdb1 1..df -Th 查看磁盘挂载情况。 2.fdisk 磁盘分区命令 示例一&#xff1a;fdisk -l 查看磁盘分区&#xff0c;箭头指出分区信息 示例二&#xff1a;创建分区eg…...

[Chrome插件开发]关于报错Service worker registration failed. Status code: 15

manifest.json中不能使用ts&#xff1a; "background": {"service_worker": "background.ts"}只能使用js "background": {"service_worker": "background.js"}在vite.config.js中增加以下配置&#xff0c;可以将…...

uniapp封装movable-area+movable-view组件,实现悬浮按钮可拖动,自动吸附边缘效果,自动向两边靠拢

兼容H5、App、微信小程序 子组件 /components/ShopCar/ShopCar.vue <template><view class"ShopCar"><movable-area class"movableArea" v-if"isShow"><movable-view class"movableView" :position"posi…...

音频重采样(libresample)

https://github.com/minorninth/libresample USB audio同步问题及Jitter分析_usb mic i2s 时钟不同步-CSDN博客 是的&#xff0c;电脑和 USB 摄像头之间的 UAC&#xff08;USB Audio Class&#xff09;传输&#xff0c;**可能会因为两边时钟不同步而引起破音问题**。时钟不同…...

使用Python来下一场雪

具体效果&#xff1a;&#xff08;大雪缓缓下落&#xff09; 完整代码&#xff1a; import pygame import random# 初始化 Pygame pygame.init()# 设置窗口 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("下雪…...

Pyspark中pyspark.sql.functions常用方法(4)

文章目录 pyspark sql functionsforall 判断array是否满足allfilter 过滤zip_with 数组合并 pyspark sql functions forall 判断array是否满足all df spark.createDataFrame([(1, ["bar"]), (2, ["foo", "bar"]), (3, ["foobar", &…...

Nginx 配置基于IP 地址的 Web 服务器

Nginx 配置基于IP 地址的 Web 服务器 1.配置网卡 nmcli connection modify ipv4.address 192.168.232.130/24 ipv4.gateway 192.168.232.2 ipv4.dns 192.168.232.2 ipv4.method manual connection.autoconnect yes 2.添加ip地址 nmcli connection modify ens160 ipv4.address…...

【TVM 教程】线性和递归核

Apache TVM 是一个端到端的深度学习编译框架&#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 → https://tvm.hyper.ai/ 作者&#xff1a;Tianqi Chen 下面介绍如何在 TVM 中进行递归计算&#xff08;神经网络中的典型模式&#xff09;。 from…...

猫主福利大放送,双11猫奴们的购物狂欢节 养猫必备清单

双十一购物狂欢节终于来啦&#xff01;铲屎官们是不是已经迫不及待想为心爱的猫咪挑选新玩具和必需品了呢&#xff1f;作为一名资深铲屎官&#xff0c;我专门为大家整理了一份双十一养猫必备清单。抓住这个难得的机会&#xff0c;让我们为猫咪挑选最舒适、最实用的好物吧&#…...

Linux中gcc的使用

GCC的基本概念和用途 GCC&#xff08;GNU Compiler Collection&#xff09;是GNU项目提供的一套编程语言编译器集合&#xff0c;包括了C、C、Objective-C、Fortran、Java、Ada和Go等语言的编译器。GCC广泛用于Linux和其他类Unix系统中&#xff0c;用于将源代码编译成可执行文件…...

React 组件 API

React 组件 API React 组件 API 是 React 应用程序开发中的核心部分&#xff0c;它提供了一系列的接口和方法&#xff0c;使得开发者能够创建和管理组件的状态、属性以及生命周期。在本篇文章中&#xff0c;我们将深入探讨 React 组件 API 的各个方面&#xff0c;包括组件的定…...

一个使用接口模式、工厂模式、模板方法模式的日志文件系统

引言&#xff1a; 编写一个与具体业务无关的示例代码。这个示例代码主要体现以下几个设计思想和模式&#xff1a; 接口模式&#xff08;Interface Pattern&#xff09;&#xff1a;定义接口类&#xff0c;并让具体实现类去实现该接口的功能。 工厂模式&#xff08;Factory Pa…...

openjdk17 C++源码是怎么给java字段赋值的

##java源码 public class OtherClass {public static int CONSTANT_O9876;public int o1234;public void dddd(){String dddd "dddd";//System.out.println(dddd);System.out.println(ddddCONSTANT_O);}} public int o1234; 在openjdk17中 C源码怎么执行这段代码…...

C++初阶(八)--内存管理

目录 引入&#xff1a; 一、C中的内存布局 1.内存区域 2.示例变量存储位置说明 二、C语言中动态内存管理 三、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 四、operator new与operator delete函数&#xff08;重要点进行讲解&#xff09; …...

C# 企业微信机器人推送消息 windows服务应用程序的使用

C# 企业微信机器人推送消息 先添加一个机器人! 然后查看机器人就可以得到一个 webhook 特别特别要注意&#xff1a;一定要保护好机器人的webhook地址&#xff0c;避免泄漏&#xff01; 然后开始写代码 &#xff0c;只需要httpPost 调用一下这个地址就可以发送消息了。 首先我…...

社区交流系统设计与实现

社区交流系统设计与实现 1. 系统概述 社区交流系统是一个基于PHP和SQL的Web应用程序&#xff0c;旨在为用户提供一个互动交流的平台。该系统允许用户注册、发布帖子、回复帖子、查看其他用户的帖子和回复&#xff0c;以及管理个人资料&#xff0c;提高用户之间的互动和信息共享…...

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前&#xff0c;建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…...

SRS + FFmpeg WebRTC 循环推流环境搭建

SRS FFmpeg WebRTC 循环推流环境搭建指南 本指南介绍如何使用 Docker Compose 快速搭建一个基于 SRS (Simple Realtime Server) 的流媒体测试环境。 推流协议&#xff1a;RTMP (FFmpeg 模拟推流)拉流协议&#xff1a;WebRTC (低延迟播放)特性&#xff1a;视频循环播放、不保存…...

【PyCon 2024核心议题首发】:CPython 3.13 asyncio重构内幕——原生任务取消语义、零拷贝Socket API与异步GC优化前瞻

第一章&#xff1a;PyCon 2024与CPython 3.13异步演进全景图PyCon 2024于五月在匹兹堡圆满落幕&#xff0c;其核心议题之一正是CPython 3.13的异步能力跃迁。作为首个将async/await语义深度融入解释器底层的Python版本&#xff0c;3.13引入了原生协程调度优化、零拷贝内存视图支…...

Windows下OpenClaw全流程指南:GLM-4.7-Flash模型接入与自动化测试

Windows下OpenClaw全流程指南&#xff1a;GLM-4.7-Flash模型接入与自动化测试 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年我在处理一个Python数据分析项目时&#xff0c;每天要重复执行十几个脚本并整理结果。当我第三次因为手工操作失误导致数据错乱后&#xff0c;终于决…...

如何让实验室管理“更简单”?——King’s LIMS以灵活与智能,重构高效运营新范式

在日常实验室管理中&#xff0c;流程繁琐、数据难溯源、报告生成低效、多场景管控混乱等问题&#xff0c;常成为拖慢运营节奏、抬升运维成本的“隐形阻力”。要打破管理困局、实现轻量化高效运维&#xff0c;选对数字化工具是关键。然而&#xff0c;在选择LIMS的过程中&#xf…...

线程池核心参数与拒绝策略深度解析

前言 线程池是Java并发编程中最常用的工具之一&#xff0c;但很多开发者只停留在“会用”层面。面试中&#xff0c;面试官往往通过线程池考察你对并发编程的理解深度——参数如何设置&#xff1f;为什么这样设置&#xff1f;拒绝策略如何选择&#xff1f; 本文将深入剖析线程池…...

如何通过WechatRealFriends解决微信单向好友检测难题

如何通过WechatRealFriends解决微信单向好友检测难题 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字化社…...

接近开关和光电开关接头:A编码M12一体式防水连接器规格解析

在工业自动化现场&#xff0c;接近开关与光电开关是应用最广泛的传感器。其标准接口——A编码M12一体式防水连接器&#xff08;预铸线缆型&#xff09;&#xff0c;通过统一的机械尺寸与电气定义&#xff0c;实现了传感器的即插即用与高可靠连接。一、规格标准与接口定义A编码M…...

MusePublic大模型Qt图形界面开发指南

MusePublic大模型Qt图形界面开发指南 1. 为什么需要图形界面&#xff1f; 如果你已经能用代码调用MusePublic大模型&#xff0c;可能会发现一个问题&#xff1a;每次都要打开终端、输入命令、等待结果&#xff0c;这样的交互方式既不方便也不直观。特别是当你需要频繁调整参数…...

微信公众号自动回复避坑指南:如何高效处理用户关键词匹配(PHP版)

微信公众号自动回复进阶实战&#xff1a;PHP高效关键词匹配与消息处理 在运营微信公众号时&#xff0c;自动回复功能是与用户互动的第一道门槛。一个响应迅速、匹配精准的自动回复系统不仅能提升用户体验&#xff0c;还能有效减轻人工客服压力。本文将深入探讨如何用PHP构建一个…...

DALL-E2-pytorch训练日志完全解读指南:如何从loss曲线判断模型健康状态

DALL-E2-pytorch训练日志完全解读指南&#xff1a;如何从loss曲线判断模型健康状态 【免费下载链接】DALLE2-pytorch Implementation of DALL-E 2, OpenAIs updated text-to-image synthesis neural network, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/da/DALLE2…...