人民网成功建设了哪些部委网站/推广策略怎么写
作者:CSDN-川川菜鸟
在SQL中,子查询是一种强大的工具,用于解决复杂的数据查询问题。本文将深入探讨子查询的概念、类型、规则,并通过具体案例展示其在实际应用中的用途。
文章目录
- 子查询概念
- 子查询的类型
- 子查询的规则
- 实际案例分析
- 员工部门数据查询
- 子查询初阶
- 子查询进阶应用
- 结语
子查询概念
子查询,即嵌套查询,是在另一个查询内部执行的查询。它可以用于SELECT、INSERT、UPDATE和DELETE语句中,以及在WHERE和HAVING子句中。子查询通常用于执行比较操作和返回特定的值集。
子查询的类型
子查询可分为几种类型,根据返回的数据量和与外部查询的关系来区分:
- 单行子查询:返回单个行的值。
- 多行子查询:返回多行结果,适用于IN或ANY等操作符。
- 关联子查询:引用外部查询的列,与外部查询有直接联系。
子查询的规则
- 子查询必须用括号括起来。
- 子查询可以有自己的 WHERE 子句。
- 在 SELECT 子句中的子查询应该只返回一个字段。
实际案例分析
员工部门数据查询
假设我们有两个表:Employees和Departments,分别存储员工信息和部门信息。以下是创建这两个表的SQL命令及插入数据的示例:
Departments 表 - 存储部门信息。
CREATE TABLE `Departments` (
CREATE TABLE test.Department (DepartmentID INT PRIMARY KEY,DepartmentName VARCHAR(50)
);
Employee 表 - 存储员工信息,包括他们所属的部门。
CREATE TABLE test.Employee (EmployeeID INT PRIMARY KEY,Name VARCHAR(50),Salary DECIMAL(10, 2),DepartmentID INT,FOREIGN KEY (DepartmentID) REFERENCES Department(DepartmentID)
);
插入数据到部门表:
INSERT INTO test.Department (DepartmentID, DepartmentName) VALUES (1, 'Finance');
INSERT INTO test.Department (DepartmentID, DepartmentName) VALUES (2, 'HR');
INSERT INTO test.Department (DepartmentID, DepartmentName) VALUES (3, 'IT');
如下所示:
员工数据:
INSERT INTO test.Employee (EmployeeID, Name, Salary, DepartmentID) VALUES (1, 'Alice', 70000, 1);
INSERT INTO test.Employee (EmployeeID, Name, Salary, DepartmentID) VALUES (2, 'Bob', 48000, 2);
INSERT INTO test.Employee (EmployeeID, Name, Salary, DepartmentID) VALUES (3, 'Charlie', 50000, 1);
INSERT INTO test.Employee (EmployeeID, Name, Salary, DepartmentID) VALUES (4, 'David', 55000, 3);
INSERT INTO test.Employee (EmployeeID, Name, Salary, DepartmentID) VALUES (5, 'Eve', 75000, 1);
如下所示:
子查询初阶
我们希望找到薪水高于财务部门平均薪水的员工。
SELECT Name, Salary
FROM test.Employee
WHERE Salary > (SELECT AVG(Salary)FROM test.EmployeeWHERE DepartmentID = (SELECT DepartmentIDFROM test.DepartmentWHERE DepartmentName = 'Finance')
);
- 外部查询:最外层查询找出所有薪水高于财务部门平均薪水的员工
- 中间子查询:SELECT AVG(Salary) FROM Employees WHERE DepartmentID = (…) 使用内部子查询的结果来计算财务部门的平均薪水。
- 内部子查询:SELECT DepartmentID FROM Departments WHERE DepartmentName = ‘Finance’ 查找财务部门的 ID。
分步骤实现解析如下:
1.首先查询财务部门的ID:
SELECT DepartmentID FROM Departments WHERE DepartmentName = 'Finance';
2.计算财务部门的平均薪水:
SELECT AVG(Salary) FROM Employee WHERE DepartmentID = [上一步的结果];
3.最终查询薪水高于财务部门平均薪水的员工:
SELECT Name, Salary FROM Employee WHERE Salary > [第二步的平均薪水];
这三个步骤可以合并为一个子查询:
SELECT Name, Salary
FROM Employee
WHERE Salary > (SELECT AVG(Salary)FROM EmployeeWHERE DepartmentID = (SELECT DepartmentIDFROM DepartmentsWHERE DepartmentName = 'Finance')
);
子查询进阶应用
假设我们现在想要找出在其部门中薪水高于该部门平均薪水的员工,同时这些员工的薪水还要高于公司整体的平均薪水。
1.计算公司整体的平均薪水:
SELECT AVG(Salary) FROM test.Employee;
2.为每个部门计算平均薪水
SELECT DepartmentID, AVG(Salary) AS AvgDepartmentSalary
FROM test.Employee
GROUP BY DepartmentID
3.结合上述两个查询,找出满足条件的员工:
SELECT e.Name, e.Salary, e.DepartmentID
FROM test.Employee e
WHERE e.Salary > (SELECT AVG(Salary) FROM test.Employee # 大于公司平均工资
) AND e.Salary > (SELECT AvgDepartmentSalaryFROM (# 计算每个部门平均工资SELECT DepartmentID, AVG(Salary) AS AvgDepartmentSalaryFROM test.EmployeeGROUP BY DepartmentID) AS DepartmentAvgWHERE e.DepartmentID = DepartmentAvg.DepartmentID
);
通过这些案例,我们可以看到子查询在处理复杂SQL查询中的强大功能和灵活性。掌握子查询的使用可以大大提高数据库查询的效率和效果。
结语
子查询是SQL中一项强大而灵活的功能,能够解决各种复杂的数据查询需求。通过对子查询的深入理解和应用,我们可以在数据库操作中实现更加精细和高效的数据处理。无论是简单的单行子查询还是复杂的关联子查询,它们都是数据库查询语言的重要组成部分,有助于提高我们在数据分析和管理方面的能力。
实际案例的探讨展示了子查询在实际应用中的强大作用,从基础的单表查询到更高级的多表联合查询。这不仅增强了我们对SQL的理解,而且提供了一种思维方式,帮助我们在面对复杂数据挑战时找到高效解决方案。
相关文章:

子查询在SQL中的应用和实践
作者:CSDN-川川菜鸟 在SQL中,子查询是一种强大的工具,用于解决复杂的数据查询问题。本文将深入探讨子查询的概念、类型、规则,并通过具体案例展示其在实际应用中的用途。 文章目录 子查询概念子查询的类型子查询的规则实际案例分析…...

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现
前言: 在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客…...

【教3妹学编程-算法题】需要添加的硬币的最小数量
3妹:2哥2哥,你有没有看到新闻, 有人中了2.2亿彩票大奖! 2哥 : 看到了,2.2亿啊, 一生一世也花不完。 3妹:为啥我就中不了呢,不开心呀不开心。 2哥 : 得了吧,你又不买彩票&…...

【异常解决】SpringBoot + Maven 在 idea 下启动报错 Unable to start embedded Tomcat(已解决)
Unable to start embedded Tomcat(已解决) 一、背景介绍二、原因分析2.1 网络上整理2.2 其他原因 三、解决方案 一、背景介绍 spring boot(v2.5.14) maven idea 启动项目 之前项目一直启动的好好的,都能正常运行。重启的时候突然就不能启…...

做题总结 707. 设计链表
做题总结 707. 设计链表 leetcode中单链表节点的默认定义我的尝试正确运行的代码(java) leetcode中单链表节点的默认定义 class ListNode {int val;ListNode next;//无参public ListNode() {}//有参:1public ListNode(int val) {this.val val;}//有参:…...

django实现--视图的使用
在 Django 中,视图是处理 Web 请求并返回 Web 响应的组件。Django 提供了两种主要类型的视图:基于函数的视图和基于类的视图。下面详细解释基于类的视图的实现方法、使用以及与基于函数的视图的异同。 基于类的视图的实现方法 继承 Django 的类视图基类…...

【dirty cred】fileManager [XXX]
前言 这应该不是个题,应该是佬为了测试 dirty cred 利用写的。但是环境有问题,测试最多只能向文件中写入 1024MB 的数据。所以竞争窗口太短了,但是似乎替换 credential obj 又是成功的了。感觉是环境的问题。 漏洞分析与利用 一次任意释放…...

线程按顺序循环执行
不瞒大家说,这是之前参加阿里一面的手写编程题,平时不刷题,这个当时花的时间比较多,虽然最后用了很喽比方法写出来了,自己还是很不满意。下面实话也是看了其他大佬的思路,今天重新练了下。 假设有3个线程,依次打印A、B、C,按顺序循环打印100次。 这个其实是线程通信,…...

C# 使用异步委托获取线程返回值
写在前面 异步委托主要用于解决 ThreadPool.QueueUserWorkItem 没有提供获取线程执行完成后的返回值问题。异步委托只能在.Net Framework 框架下使用,.Net Core中会报平台错误,而且使用Task.Result来获取返回值,可以达成同样的目的ÿ…...

生鲜蔬果展示预约小程序作用是什么
线下生鲜蔬果店非常多,对商家来说主要以同城生意为主,而在互联网电商的发展下,更多的商家会选择搭建私域商城进行多渠道的销售卖货和拓展,当然除了直接卖货外,还有产品纯展示或预约订购等需求。 但无论哪种模式&#…...

【C++】类与对象(下)
本文目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&am…...

一文了解 Go 方法
前言 在前面的 一文熟悉 Go 函数 文章中,介绍了 Go 函数的声明,函数的几种形式如匿名函数、闭包、基于函数的自定义类型和函数参数详解等,而本文将对方法进行介绍,方法的本质就是函数,介绍方法的同时也会顺带对比其与函…...

【Docker】vxlan的原理与实验
VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。 VXLAN介绍 VXLAN是在底层…...

广度(宽度)优先搜素——层层递进
分析算法及题目 完整代码实现 广度优先搜索(Breadth-First Search,BFS)是一种图和树的遍历算法,与深度优先搜索相对应。BFS从起始节点开始,首先访问起始节点,然后逐层地访问其邻居节点,直到达到…...

设计模式——建造者模式(创建型)
引言 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码…...

getopt --- C 风格的命令行选项解析器
源代码: Lib/getopt.py 备注 getopt 模块是一个命令行选项解析器,其 API 设计会让 C getopt() 函数的用户感到熟悉。 不熟悉 C getopt() 函数或者希望写更少代码并获得更完善帮助和错误消息的用户应当考虑改用 argparse 模块。 此模块可协助脚本解析 sys.argv 中的…...

Mysql大数据量删除
Mysql大数据量删除 在一些操作中,可能需要清理一下积压的数据,如果数据量小的话自然没有问题,但是如果是个大数据量的问题,那么就该考虑一个合适的办法了。 在清理大数据量的时候需要考虑是清理部分数据还是清理所有数据…...

【python中类的介绍】
python中类的介绍 在Python中,定义类需要使用关键字 class类名通常使用大写字母开头,举例: class MyClass:pass解释:定义了一个MyClass的空类。 1、python中类定义 “”" 类中可以定义属性和方法。 1、属性是类的数据成…...

PO模式在selenium自动化测试框架有什么好处
PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式,使用这种模式后,可以有效的提升代码的复用能力,并且让自动化测试代码维护起来更加方便。 PO模式的全称叫page object model(POM),有时候叫做 p…...

智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑马算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…...

deepface:实现人脸的识别和分析
deepface介绍 deepface能够实现的功能 人脸检测:deepface 可以在图像中检测出人脸的位置,为后续的人脸识别任务提供基础。 人脸对齐:为了提高识别准确性,deepface 会将检测到的人脸进行对齐操作,消除姿态、光照和表…...

Pytorch当中nn.Identity()层的作用
在深度学习中,nn.Identity() 是 PyTorch 中的一个层(layer)。它实际上是一个恒等映射,不对输入进行任何变换或操作,只是简单地将输入返回作为输出。 通常在神经网络中,各种层(比如全连接层、卷…...

linux课程第二课------命令的简单的介绍2
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...

【PTA刷题】 求子串(代码+详解)
【PTA刷题】 求子串(代码详解) 题目 请编写函数,求子串。 函数原型 char* StrMid(char *dst, const char *src, int idx, int len);说明:函数取源串 src 下标 idx 处开始的 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len…...

初识Dockerfile
Dockerfile:创建镜像,创建自定义的镜像 包括配置文件,挂载点,对外暴露的端口,设置环境变量 Docker的创建镜像方式: 1.基于已经镜像进行创建 根据官方号已提供的镜像源,创建镜像,然…...

Python入门第2篇(pip、字符串、方法、json、io操作)
目录 pip包管理器 字符串 方法 json 文件操作 pip包管理器 包管理器类似.NET下的nuget,主要用于管理引用依赖项。 安装Python的时候,已经默认安装了pip包管理器,因此无需单独安装 cmd,输入:pip --version 显示…...

IntelliJ IDEA 智能(AI)编码工具插件
文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件(免费)仅仅是模板填充,不智能。 Squaretest插件(收费)…...

Java编程中通用的正则表达式(二)
正则表达式,又称正则式、规则表达式、正规表达式、正则模式或简称正则,是一种用来匹配字符串的工具。它是一种字符串模式的表示方法,可以用来检索、替换和验证文本。正则表达式是一个字符串,它描述了一些字符的组合,这…...

[GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练
前言 OpenAI的创始人之一,大神Andrej Karpthy刚在微软Build 2023开发者大会上做了专题演讲:State of GPT(GPT的现状)。 他详细介绍了如何从GPT基础模型一直训练出ChatGPT这样的助手模型(assistant model)。作者不曾在其他公开视频里看过类似的内容,这或许是OpenAI官方…...

接口测试-Jmeter使用
一、线程组 1.1 作用 线程组就是控制Jmeter用于执行测试的一组用户 1.2 位置 右键点击‘测试计划’-->添加-->线程(用户)-->线程组 1.3 特点 模拟多人操作线程组可以添加多个,多个线程组可以并行或者串行取样器(请求)和逻辑控制器必须依赖线程组才能…...