多表查询-子查询

前言

上一篇博客,我简单的讲述了联合查询。今天本篇博客我将详细的阐述子查询的四个方面如

标量子查询,列子查询,行子查询,表子查询。

正文

子查询的认识

子查询的认识

子查询:是SQL语句中,嵌套select 语句,称为嵌套查询,又叫子查询。我们可以联系java中的 嵌套循环,模式是差不多的。都是两个循环合在一起。

注意:外部的SQL语句条件是,子查询的结果。

实例

前提 

我准备了两张表一张员工信息表员工 employer  deptid ,name,和另一张部门表 dept   deptid     deptName,其中员工表,并没有详细说明员工的部门信息。

问题:查看 销售部的所有员工名字

思路

通过 一张 员工表或部门表都无法解决问题的。在员工表中,我不知道具体部门信息;在部门表中,我不知道具体的员工信息。那该怎么做呢,我们要分两步。

1 通过 部门表。查询到 销售部的部门id 

2 从 1 中,我们得到了具体部门id ,作为条件,这样就可以查到,我们想要的员工信息了

按照原有的写法代码如下

1 select  deptid  from  dept  where deptName='销售表';

2 从 1 中得到结果假设是 在员工表中deptid =1 

select name from employer  where  deptid=1;

通过以上的分析,我们其实要写两道查询语句,才可以得到结果,这样写是比较繁琐的,因此才有了子查询

代码

select name from employer  where  deptid=( select  deptid  from  dept  where deptName='销售表');-----这也是我后面要讲的标量子查询

子查询的分类

我们根据子查询的结果分为,以下几种:

标量子查询

列子查询

行子查询

表子查询

标量子查询

注意

1   子查询的外层SQL语句,不一定要具有查询功能,也可以其他的。如 更新 update ,删除 delete 之类的

2  根据子查询位置分为:where 之后,from之后,,select之后

标量子查询

标量子查询的理解

理解:子查询的查询结果是单个值如单个日期,名字等 。

标量子查询的使用

1 查询销售部所有员工名字

背景:我准备了两张表一张员工信息表员工 employer  deptid(部门id) ,name(名字),和另一张部门表 dept  deptid ,deptName(部门名字)其中员工表,并没有详细说明员工的部门信息。

思路

a  先得到部门表中销售部的部门id

代码如下

 select  deptid   from  dept  where deptName='销售表';

b  得到具体的部门id,就可以在员工表的到目标员工名字

代码如下

select name from employer  where  deptid=( select  deptid   from  dept  where deptName='销售表');

2  查询 比员工 名字叫 方东 之后入职的员工名字

背景:我准备一张员工信息表员工 employer  time,name

思路

a  得到员工方东 的入职时间

代码如下

select   time    from employer  where  name='方东';

b  根据方东的入职时间,推算在方东之后入职的员工的名字

代码如下

select name from employer  where  time>(select   time    from employer  where  name='方东');

列子查询

列子查询的理解

理解:子查询,查询的结果只有一列(可以是多行)

列子查询的使用

常见的操作符有: in  ,not in , any ,some,all

1 查询销售部和市场部的所有员工信息

背景:部门表 dept  deptid  ,deptName,员工表 employer  deptid  其中员工表,并没有详细说明员工的部门信息。

思路

a  知道销售部 和市场部的部门id

代码如下

select deptid   from  dept  where   deptName ='销售表‘  or   deptName ='市场部’;

b 根据他们的部门id ,从员工表中,获取员工信息

最终代码如下

select *  from  employer where  deptid  in ( select deptid   from  dept  where   deptName ='销售表‘  or   deptName ='市场部’) ;

注意: 操作符  in,指定范围内,多选一

2 查询比财务部所有人工资高的员工信息

背景: 部门表 dept  deptid (部门id) ,deptName(部门名字),员工表 employer  deptid ,salary(薪资)  其中员工表,并没有详细说明员工的部门信息。

思路

a 查询财务部 的员工工资

代码如下

select  salary  from  employer  where  deptid =(select deptid from  dept where  deptName ='财务部');

b 从 a 中得到结果,作为b 的条件,找到比所有人工资高的员工信息

最终代码如下

select * from employer  where  salary >all (select  salary  from  employer  where  deptid =(select deptid from  dept where  deptName ='财务部'));

注意:题中要求,比所有人的员工工资都高的员工信息,使用操作符 all 

3 查询比研发部其中任意人工资高的员工信息

背景: 部门表 dept  deptid  ,deptName(部门名字),员工表 employer  deptid(部门id) ,salary(薪资)  其中员工表,并没有详细说明员工的部门信息。

思路

a 查询研发部的员工工资

代码如下

select  salary  from  employer  where  deptid =(select deptid from  dept where  deptName ='研发部');

b 从a 中得到,研发部的员工工资后,找到比任意一个都高的员工信息,就是我们要的答案。

最终代码如下

select * from employer  where  salary >any (select  salary  from  employer  where  deptid =(select deptid from  dept where  deptName ='研发部'));

注意: 操作符  any  是满足任意一个条件

行子查询

行子查询的理解

行子查询:子查询返回的结果为一行---一行多列。

行子查询的使用

注意:行子查询常见的操作符:=  <>  in  not  in

 1 查询 与' 张无忌'的薪资 和直属领导相同的员工信息

背景:部门表 dept  deptid (部门id) ,deptName(部门名字),员工表 employer  deptid ,salary(薪资) ,mannger(直属领导) 其中员工表,并没有详细说明员工的部门信息。

思路

a 查询 张无忌的薪资 和直属领导

代码如下

select salary  manager  from employer  where  name ='张无忌’;

b查询 与' 张无忌'的薪资 和直属领导相同的员工信息

代码如下

select  *  from  employer where  (salary,manager )=(select salary  manager  from employer  where  name ='张无忌’);

注意:由于我们子查询的结果是  薪资 和  直属领导 ,所以在外层SQL 语句中,我们应该把salary,manager  组合起来写,并加上括号。

表子查询

表子查询的理解

表子查询:子查询返回的结果为一张表。

表子查询的使用

1 查询鹿杖客 和宋远桥的职位和薪资相同的员工信息

背景:部门表 dept  deptid  ,deptName,员工表 employer  deptid ,salary ,job(职位)其中员工表,并没有详细说明员工的部门信息。

思路 

a  查询 鹿杖客 和宋远桥的职位和薪资

代码如下

select    job ,salary  from  employer  where  name=‘鹿杖客'  or  name ='宋远桥';

b查询鹿杖客 和宋远桥的职位和薪资相同的员工信息

代码如下

select  * from  employer  where  (job,salary ) in (select    job ,salary  from  employer  where  name=‘鹿杖客'  or  name ='宋远桥');

2 查询入职日期 是‘2006-01-01’之后的员工信息及其部门信息

背景:部门表 dept  deptid  ,deptName,员工表 employer  deptid ,salary ,time(入职日期)其中员工表,并没有详细说明员工的部门信息。

思路

a 查询入职日期 是‘2006-01-01’之后的员工信息

代码如下

select  *  from  employer  where time > ‘2006-01-01’;

b 根据查到的员工信息,查询到对应的部门信息

代码如下

select e.  *  d.*  from (select  *  from  employer  where time > ‘2006-01-01’) e  left  join  dept  d  on e.deptid=d.deptid ;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP揭秘者-在QM标准功能增加取消UD的功能第三季

下面让我们来看实际项目中使用的最佳方案&#xff1a; 运用增强QEVA0008&#xff0c;该增强会在下面UD界面(QA12)里增加一个Customer Function(Reset UD)的按钮;我们在这个用户出口中再增加代码去调用上面两支程序&#xff0c;则可以实现该功能。 步骤如下&#xff1a; 步骤一&…

【YOLOv5/v7改进系列】引入RT-DETR的RepC3

一、导言 RT-DETR&#xff08;Real-Time Detection Transformer&#xff09;是一种针对实时目标检测任务的创新方法&#xff0c;它旨在克服YOLO系列和其他基于Transformer的检测器存在的局限性。RT-DETR的主要优点包括&#xff1a; 无NMS&#xff08;非极大值抑制&#xff09;…

GGUF模型转换入门

一、定义 1 定义 2 案例 二、实现 定义 GGUF是一种大模型文件格式&#xff0c;由开发者Georgi Gerganov提出。 这是一种针对大规模机器学习模型设计的二进制格式文件规范。它的主要优势在于能够将原始的大模型预训练结果经过特定优化后转换成这种格式&#xff0c;从而可以更…

UI Toolkit系统学习

UI Toolkit 此文章用于学习UnityUI系统&#xff0c;手头的项目做完会来完善 官方文档 Unity上方菜单栏点击Window->UI Toolkit->Samples可以看UI Toolkit中的很多样例 使用 UI Toolkit 和 UI Builder 制作物品编辑器 在文件夹中右键->Create->UI Toolkit->Edi…

花卉寄售系统

摘 要 随着互联网的快速发展和普及&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。在电子商务领域&#xff0c;花卉行业也逐渐崭露头角&#xff0c;成为一个具有巨大潜力的市场。传统的花卉销售模式通常是通过实体店面进行销售&#xff0c;这种模式存在着许多问…

Android开发系列(十二)Jetpack Compose之BottomSheet

BottomSheet 是 Android 中一个常用的 UI 组件&#xff0c;它通常用于显示从屏幕底部弹出的用户界面。Jetpack Compose 是 Android 中的一个全新 UI 工具包&#xff0c;它提供了一种声明式的方式来构建用户界面。Jetpack Compose 中也有一个名为 BottomSheet 的组件&#xff0c…

数据恢复篇:如何从 Mac 硬盘安全恢复丢失的文件

Mac RAID 阵列用于大存储。Mac RAID 上的数据丢失可能很复杂。一般来说&#xff0c;从 Mac RAID 硬盘恢复已删除的文件并不困难。但如果​​您想从 Mac RAID 硬盘恢复由于格式化、病毒感染、硬盘故障而丢失的文件&#xff0c;情况就会发生变化。您必须找到一个功能强大的 Mac R…

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…

题解(A~D)

这次vp的比赛&#xff0c;我感觉前四道题虽然一点算法也没有&#xff0c;但是就是很难去做&#xff0c;要用数学思维去处理 第五题终究还是没有尝试&#xff0c;只能说才疏学浅吧&#xff0c;我只能说全是数学 话不多说&#xff0c;一起来看题目 A. X Axis 题意&#xff1a;…

【Redis】Java操作Redis(Jedis客户端使用)

Redis不仅支持简单的键值存储&#xff0c;还提供了丰富的数据结构&#xff08;如列表、哈希表、集合等&#xff09;和强大的原子操作&#xff0c;使得它在存储和处理数据时非常高效。关于这些数据结构的学习可以学习下面的博客&#xff1a; 【Redis】String的常用命令及图解St…

JS(JavaScript)DOM操作的趣味案例

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

业务境外系列(1)——玩转谷歌浏览器

最好用的浏览器之一&#xff0c;很多调试开发的标准版本。去官方下载安装&#xff0c;从其他渠道下载的&#xff0c;一般版本会落后一些&#xff0c;或者被内置了一些东西。下载地址:https://www.google.com/chrome/ 官网 &#xff0c;这样安装的时候比较正常。 查看版本: c…

spring-boot-starter-json配置对象属性为空不显示

问题背景 在Spring Boot中使用spring-boot-starter-json&#xff08;通常是通过jackson实现的&#xff09;时&#xff0c;如果你希望在序列化对象时&#xff0c;如果某个属性为空&#xff0c;则不显示该属性&#xff0c;你可以使用JsonInclude注解来实现这一点。 pom.xml <…

cs与msf权限传递以及mimikatz抓取win2012明文密码

启动服务端 进入客户端 建立监听 制作脚本 客户端运行程序 主机上线 打开msf 调用handler模块 创建监听 11.cs->msf 传递会话 12.传参完成 msf->cs会话传递 抓取密码&#xff08;null&#xff09; 修改注册表 shell reg add "HKEY_LOC…

1982Springboot宠物美容院管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot宠物美容院管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系 统具有完整的源代码和数据库…

[C#]基于opencvsharp实现15关键点人体姿态估计

数据集 正确选择数据集以对结果产生适当影响也是非常必要的。在此姿势检测中&#xff0c;模型在两个不同的数据集即COCO关键点数据集和MPII人类姿势数据集上进行了预训练。 1. COCO&#xff1a;COCO关键点数据集是一个多人2D姿势估计数据集&#xff0c;其中包含从Flickr收集的…

Redis集群(Clustering in Redis)工作机制详解

Redis集群工作机制详解 Redis 集群是用于提高 Redis 可扩展性和高可用性的解决方案。 维基百科&#xff1a;Scalability is the property of a system to handle a growing amount of work by adding resources to the system. 可扩展性是系统的一种允许通过增加系统资源来处…

Zookeeper:基于Zookeeper的分布式锁

一、Zookeeper分布式锁原理 二、Zookeeper JavaAPI操作 1、Curator介绍 Curator是Apache Zookeeper的Java客户端。常见的Zookeeper Java API&#xff1a; 原生Java API。ZkClient。Curator。 Curator项目目标是简化Zookeeper客户端的使用。Curator最初是Netfix研发的&#xf…

Python | Leetcode Python题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; def isHappy(self, n: int) -> bool:cycle_members {4, 16, 37, 58, 89, 145, 42, 20}def get_next(number):total_sum 0while number > 0:number, digit divmod(number, 10)total_sum digit ** 2return total_sumwhile n ! 1 an…

【UE5.3】笔记5-蓝图类

什么是蓝图类&#xff1a;其实就是C类&#xff0c;只不过是UE封装好的且可以直接拖出来可视化使用。 如何创建蓝图类&#xff1f;蓝图类有哪些&#xff1f; 蓝图类分为基于关卡的&#xff0c;基于Actor的&#xff0c;基于组件Component的。 基于关卡的蓝图类 一个关卡只能有…