相关子查询

2023-10-29

关联子查询

关联子查询,是指子查询的执行依赖于外部查询,通常是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次。

  1. 查询员工工资大于本部门平均工资的员工的last_name、salary和department_id。
# 查询员工中工资大于本部门平均工资的员工的last_name,salary和department_id
# 方式1
SELECT last_name,salary,department_id
FROM employees e1
WHERE salary > (
				SELECT AVG(salary)
				FROM employees e2
				WHERE e1.department_id = e2.department_id
				GROUP BY department_id
				); -- 返回38行记录
								
# 方式2
SELECT e.last_name,e.salary,e.department_id
FROM employees e,(
				SELECT department_id,AVG(salary) avg_sal
				FROM employees 
				GROUP BY department_id
				) t_dep_avg_sal
WHERE e.department_id = t_dep_avg_sal.department_id
AND e.salary > t_dep_avg_sal.avg_sal; -- 返回38行记录
  1. 查询员工的employee_id、salary,按照department_name排序。
# 查询员工的employee_id、salary,按照department_name排序
SELECT department_id,salary
FROM employees e
ORDER BY (
			SELECT department_name
			FROM departments d
			WHERE e.department_id = d.department_id
			); -- 返回107行记录
  1. 如果employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id、last_name和job_id。
# 如果employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同id的员工的employee_id、last_name和job_id。
SELECT employee_id,last_name,job_id
FROM employees e
WHERE 2<= (
			SELECT COUNT(*)
			FROM job_history j
			WHERE e.employee_id = j.employee_id
			) -- 返回3行记录

关键字:EXISTS 和 NOT EXISTS

关联子查询,通常会和EXISTS一起使用,用来检查子查询中是否有满足条件的行。

  • 如果子查询中不存在满足条件的行,EXISTS会返回false,并继续在子查询中查找。
  • 如果子查询中存在满足条件的行,则停止查找,返回true
  1. 查询公司管理者的employee_id、last_name、job_id、department_id。
# 查询公司管理者的employee_id、last_name、job_id、department_id
# 方式1:自连接
SELECT DISTINCT e1.employee_id,e1.last_name,e1.job_id,e1.department_id
FROM employees e1,employees e2
WHERE e1.employee_id = e2.manager_id;

# 方式2:子查询(多行子查询)
SELECT employee_id,last_name,job_id,department_id
FROM employees
WHERE employee_id IN (
					SELECT DISTINCT manager_id 
					FROM employees
					)
										
# 方式3:子查询(关联子查询)
SELECT employee_id,last_name,job_id,department_id
FROM employees e1 
WHERE EXISTS (
			SELECT *
			FROM employees e2
			WHERE e1.employee_id = e2.manager_id
			)
  1. 查询departments表中,不存在于employees表中的部门的department_id和department_name。
# 查询departments表中,不存在于employees表中的部门的department_id和department_name
# 方式1;右外连接
SELECT d.department_id,d.department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL; -- 返回16行记录

# 方式2:关联子查询(NOT EXISTS)
SELECT department_id,department_name
FROM departments d
WHERE NOT EXISTS (
				SELECT DISTINCT department_id
				FROM employees e
				WHERE d.department_id = e.department_id
				); -- 返回16行记录

相关链接

MySQL的子查询

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相关子查询 的相关文章

  • 自动将范围内的值插入表中

    是否可以使用 MySQL 语句自动将值插入表中 即从 30 到 200 这是一个应该执行此操作的存储过程 CREATE PROCEDURE insert range BEGIN DECLARE i INT DEFAULT 30 WHILE
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • 如何备份整个MySQL数据库的所有用户、权限和密码?

    我需要备份整个 MySQL 数据库 其中包含所有用户及其权限和密码的信息 我看到选项http www igvita com 2007 10 10 hands on mysql backup migration http www igvita
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • 错误代码:1822(当数据类型匹配且具有复合键时)

    得到一个 错误代码 1822 添加外键约束失败 丢失的 引用表中约束 subject ibfk 1 的索引 注册 当尝试创建subject桌子 问题是 错误并没有出现在上一张表上student 数据类型相同 并且定义了主键 两者都会出现此错
  • Navicat utf8 不适用于 mysql 数据库

    我目前正在尝试合并两个不同步的表达式引擎数据库之间的数据更改 为此我选择使用 navicat 该网站在模板中大量使用希腊字符集 当我在 phpmyadmin 中查看希腊语表字段数据时 我按预期看到了希腊语字符 当我将它们加载到 Navica
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • PHP mysql_num_rows 死错误

    我想创建一个页面 用户可以在其中添加他们的信息 我已经创建了该页面 但我真正的问题是代码 我有一些问题 这部分代码
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • MYSQL 查询 WHERE IN 与 OR

    我开发了一个使用 OR 查询的系统 SELECT FROM tableA JOIN tableB ON idA idB WHERE idA 1 OR idA 2 OR idA 3 OR idA 4 OR idA 5 OR idA 100 与
  • MySQL - 查询合并具有相同 id 的行并保留该 id 的所有条目但作为一条记录

    我一直在处理本地保存在 wamp 服务器上的 mysql 数据库中的表 我正在使用 wamp 中的 phpmyadmin 区域来运行查询 我正在尝试获取数据来执行以下操作 谁能帮我制作一张包含许多植物记录的表格 植物可以有多个名称 表格将其
  • MySQL 获取时间优化

    o我有一个包含 200 万个寄存器的表 但它很快就会增长得更多 基本上 该表包含具有相应描述符的图像的兴趣点 当我尝试执行选择在空间上靠近查询点的点的查询时 总执行时间花费太长 更准确地说 持续时间 获取 0 484 秒 27 441 秒
  • 使用 cfchart 标签在单个饼图中显示多个查询的数据

    请考虑以下代码 现在我的代码中有以下代码 cfm页面内的 tag DataSource xx xx x xx Name of the database sgemail Name of the relevant column event vc
  • mysql 在 sum() 函数上使用 concat,例如 concat(sum(col1),"%")

    我正在尝试合并多个查询 但其中一个查询使用 sum 当我尝试在此列上应用 concat 时 我得到不需要的 blob 结果 我如何在聚合列上应用 concat 和 union 我期待这个结果 SELECT row 1 col1 UNION
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • WHERE 条件基于 PK 的查询是否建议使用“LIMIT 1”?

    我正在查询 mySQL 数据库以检索 1 个特定行的数据 我使用表主键作为 WHERE 约束参数 E g SELECT name FROM users WHERE userid 4 userid 列是表的主键 在 mySQL 语句末尾使用

随机推荐

  • URL路径 /** /* /?的含义

    匹配任意多级路径如 aa bb cc 仅可匹配一级路径如 aa 仅可匹配一级路径且最多只有一个字符 如 a
  • Webpack loader

    loader 概念 官网对 loader 的解释是这样的 webpack 只能理解 JavaScript 和 JSON 文件 这是 webpack 开箱可用的自带能力 loader 让 webpack 能够去处理其他类型的文件 并将它们转换
  • HDFS巡检、监控、调优、排障

    1 巡检 HDFS 为集群提供高可用性弹性存储服务 是集群的存储主体 每日早晚巡检HDFS 服务 包括HDFS 服务可用性 存储使用率 datanode 是否有故障盘等 1 1 HDFS 总体状态 HDFS 状态 如下的红色提示需要关注 H
  • 前端实现亚马逊AWS s3的跨域问题总结

    在s3控制台中添加存储桶并设置 跨域配置 测试环境直接开放 请求 不然会跨域
  • 基于Lending Club的数据分析实战项目【小白记录向】【二】

    本实战项目基于Lending Club的数据集 数据集地址 https github com H Freax lendingclub analyse 本实战项目基于Colab环境 文章目录 简介 使用机器学习方法进行解决 数据准备 机器学习
  • python 运算符

    python 运算符有基础运算符 赋值运算符 比较运算符 逻辑运算符 成员运算符和身份运算符 今天我们就来了解一下吧 基础运算符 赋值运算符 比较运算符 比较运算符也称关系运算符 运算符 lt gt 仅适用于 Python2 作用等同于 P
  • LLM论文周报|来自谷歌、Meta AI、香港中文大学等机构前沿论文研究

    大模型 LLM 是一种人工智能模型 旨在理解和生成人类语言 它们在大量的文本数据上进行训练 可以执行广泛的任务 包括文本总结 翻译 情感分析等等 LLM的特点是规模庞大 包含数十亿的参数 帮助它们学习语言数据中的复杂模式 这些模型通常基于深
  • 小白谈memcache和memcached的区别

    http www cnblogs com scotoma archive 2011 02 15 1955573 html 用了段时间的memcache和memcached总结下认识 看很多人在用cache的时候 刚刚都没有搞清楚memcac
  • Vue基础--基本语法

    一 介绍 1 Vue js 是什么 2 初识Vue js 二 基本语法 1 基本数据渲染和指令 2 双向数据绑定 3 事件 4 修饰符 5 条件渲染 6 列表渲染 7 计算属性 一 介绍 1 Vue js 是什么 Vue 读音 vju 类似
  • <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验 实验八 矩阵键盘应用实验 doc 一 实验目的 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 二 实验主要仪器和环境 Keil5 普中A2开发板 stc isp 三 实验内容 用单片机的并行口P1接矩阵键盘 在
  • 亲爱的友友们,有在运行detection测试时,遇到“找不到指定模块的问题”吗?

    我的MMdertection是安装的CPU版本的 因为没有独立显卡 救救孩子吧
  • 10分钟搞定miniconda-python环境安装

    windows配置python环境 每次到一个新电脑就要安装环境 很多包安装起来很麻烦 下面对安装地址和常规使用包做了总结 一键安装所有包不用再一个一个找了 所有问题10分钟搞定 1 安装Miniconda 可在清华大学开源软件镜像站下载安
  • Wordpress 安装,文件夹权限设置

    wordpress 权限对安装和使用效果的影响很大 权限错误将影响theme的安装 不能安装theme或者修改theme或删除theme 相关设置 chmod 755 wordpress find wordpress type d exec
  • DTS高管Roy Law:智能手机是重点发展方向

    2012年初 DTS公司宣布将收购SRS实验室 引发业界轰动 外界分析称 本次收购将加速实现DTS研发更先进的 功能完整的集成音频解决套件的策略 包括从语音处理技术至混音技术 两者强强结合之后 将对杜比公司发起有力挑战 产业整合趋势也逐渐显
  • diffing算法以及key值的作用

    在react vue中key有什么作用 内部原理是什么 一 虚拟dom中key的作用 简单的来说key就是虚拟dom对象中的标识 在更新显示时key有很重要的作用 原理 当状态中的数据发生改变的时候 react会根据 新数据 生成新的虚拟d
  • 内部泄漏,惊现BAT互联网大厂薪资和职级表,你离年薪40W还差多少

    互联网大厂新入职员工各职级薪资对应表 技术线 上面的表格不排除有很极端的收入情况 但至少能囊括一部分同职级的收入 这个表是 技术线 新入职员工的职级和薪资情况 非技术线 如产品 运营 销售等 以及老员工的情况会和图中的范围有所出入 以校招生
  • ESP32开发路程LVGL篇(一)——移植完整过程,花屏问题解决,ST7735显示方向

    目录 移植 准备工作 开始移植 编译运行 花屏问题 ST7735显示方向 LVGL官方文档 文档链接 本文使用屏幕 ST7735 1 8寸 分辨率128 160 本文使用框架 ESP IDF VSCODE 移植 准备工作 下载 lvgl 注
  • keil错误 ERROR:PREPROCESSOR: MACROS TOO NESTED

    1 错误显示 2 找到错误文件夹 3 错误为 h文件写成 c文件 4 更改为 include dmafe h 即可
  • doget和dopost的区别

    doget和dopost的区别 get和post是http协议的两种方法 这两种方法有本质的区别 get只有一个流 参数附加在url后 大小个数有严格限制且只能是字符串 post的参数是通过另外的流传递的 不通过url 所以可以很大 也可以
  • 相关子查询

    文章目录 关联子查询 关键字 EXISTS 和 NOT EXISTS 相关链接 关联子查询 关联子查询 是指子查询的执行依赖于外部查询 通常是因为子查询中的表用到了外部的表 并进行了条件关联 因此每执行一次外部查询 子查询都要重新计算一次