MySQL——子查询
2023.9.8
相关学习笔记:
#子查询
/*
含义:
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询分类:
按子查询出现的位置:select后面:仅仅支持标量子查询from后面:支持表子查询where或having后面:★标量子查询(单行) √列子查询 (多行) √行子查询exists后面(相关子查询)表子查询
按结果集的行列数不同:标量子查询(结果集只有一行一列)列子查询(结果集只有一列多行)行子查询(结果集有一行多列)表子查询(结果集一般为多行多列)*/#一、where或having后面
/*
1、标量子查询(单行子查询)
2、列子查询(多行子查询)3、行子查询(多列多行)特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
> < >= <= = <>列子查询,一般搭配着多行操作符使用
in、any/some、all④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果*/
#1.标量子查询(重点)
#案例1:谁的工资比 Abel 高?
SELECT `last_name`
FROM `employees`
WHERE salary>(SELECT salary FROM `employees` WHERE `last_name`='Abel');
#案例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资
SELECT `last_name`,`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);
#案例3:返回公司工资最少的员工的last_name,job_id和salary
SELECT `last_name`,`job_id`,`salary`
FROM `employees`
WHERE salary=(SELECT MIN(salary) FROM `employees`);
#案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT `department_id`,MIN(salary)
FROM `employees`
GROUP BY `department_id`
HAVING MIN(salary)>(SELECT MIN(salary) FROM `employees` WHERE `department_id`=50);#2.列子查询(多行子查询)
#案例1:返回location_id是1400或1700的部门中的所有员工姓名
SELECT `last_name`
FROM `employees`
WHERE `department_id` IN
(SELECT `department_id`
FROM `departments`
WHERE `location_id` IN (1400,1700));
#案例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary
SELECT `employee_id`,`last_name`,`job_id`,`salary`
FROM `employees`
WHERE salary < ANY
(SELECT salary
FROM `employees`
WHERE `job_id` = 'IT_PROG')
AND `job_id` != 'IT_PROG';
#案例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ALL(SELECT DISTINCT salaryFROM employeesWHERE job_id = 'IT_PROG') AND job_id<>'IT_PROG';#3、行子查询(结果集一行多列或多行多列)
#案例:查询员工编号最小并且工资最高的员工信息
SELECT *
FROM `employees`
WHERE (`employee_id`,`salary`) =
(SELECT MIN(`employee_id`),MAX(salary) FROM `employees`);#二、select后面
/*
仅仅支持标量子查询
*/#案例:查询每个部门的员工个数
SELECT d.`department_name`,(
SELECT COUNT(*) FROM `employees` e WHERE e.`department_id` = d.`department_id`
) 员工人数
FROM `departments` d;
#案例2:查询员工号=102的部门名
SELECT `department_name`
FROM `departments` d
INNER JOIN `employees` e
ON d.`department_id` = e.`department_id`
WHERE `employee_id` = 102;#三、from后面
/*
将子查询结果充当一张表,要求必须起别名
*/#案例:查询每个部门的平均工资的工资等级
SELECT Ag_dep.*,j.`grade_level`
FROM(SELECT `department_id`,AVG(salary) agFROM `employees`GROUP BY `department_id`
) Ag_dep
INNER JOIN `job_grades` j
ON Ag_dep.ag BETWEEN `lowest_sal` AND `highest_sal`;#四、exists后面(相关子查询)/*
语法:
exists(完整的查询语句)
结果:
1或0
*/SELECT EXISTS(SELECT employee_id FROM employees WHERE salary=300000);#案例1:查询有员工的部门名
#用exists实现
SELECT `department_name`
FROM `departments` d
WHERE EXISTS(
SELECT *
FROM `employees` e
WHERE d.`department_id`=e.`department_id`
);
#用in来实现
SELECT `department_name`
FROM `departments` d
WHERE d.`department_id` IN (
SELECT `department_id`
FROM `employees`);
#案例2:查询没有女朋友的男神信息
#in实现
SELECT bo.*
FROM `boys` bo
WHERE bo.`id` NOT IN (
SELECT `boyfriend_id`
FROM `beauty`);
#exists实现
SELECT bo.*
FROM `boys` bo
WHERE NOT EXISTS(
SELECT `boyfriend_id`
FROM `beauty` b
WHERE bo.`id`=b.`boyfriend_id`);
课后习题:
#课后习题
#1.查询和Zlotkey相同部门的员工姓名和工资
SELECT `last_name`,salary
FROM `employees`
WHERE `department_id` = (
SELECT `department_id`
FROM `employees`
WHERE `last_name`='Zlotkey');
#2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
SELECT `employee_id`,`last_name`,salary
FROM `employees`
WHERE salary>(
SELECT AVG(salary)
FROM `employees`);
#3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
SELECT `employee_id`,`last_name`,`salary`
FROM `employees` e
INNER JOIN (SELECT `department_id`,AVG(salary) agFROM `employees`GROUP BY `department_id`
) b
ON e.`department_id`=b.`department_id`
WHERE salary > b.ag;
#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
SELECT `employee_id`,`last_name`
FROM `employees`
WHERE `department_id` IN(
SELECT `department_id`
FROM `employees`
WHERE `last_name` LIKE '%u%'
);
#5. 查询在部门的location_id为1700的部门工作的员工的员工号
SELECT `employee_id`
FROM `employees`
WHERE `department_id` IN(SELECT `department_id`FROM `departments`WHERE `location_id`=1700
);
#6.查询管理者是King的员工姓名和工资
SELECT `last_name`,`salary`
FROM `employees`
WHERE `manager_id` IN (SELECT `employee_id`FROM `employees`WHERE `last_name`='K_ing'
);
#7.查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为 姓.名
SELECT CONCAT(`last_name`,`first_name`) '姓.名'
FROM `employees`
WHERE salary=(SELECT MAX(salary)FROM `employees`
);
相关文章:
MySQL——子查询
2023.9.8 相关学习笔记: #子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或内查询 外部的查询语句,称为主查询或外查询分类: 按子查询出现的位置:select后面:仅仅支持标量子查询fro…...
Java学习笔记---多态
面向对象三大特征之一(继承,封装,多态) 多态的应用场景:根据传递对象的不同,调用不同的show方法 一、多态的定义 同类型的对象,表现出的不同形态(对象的多种形态) 二…...
2023-09-10 LeetCode每日一题(课程表 II)
2023-09-10每日一题 一、题目编号 210. 课程表 II二、题目链接 点击跳转到题目位置 三、题目描述 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在…...
合并区间【贪心算法】
合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 class Solution {public int[][] merge(int[…...
2023,软件测试人的未来在哪里?
2023年,IT行业出现空前的萧条,首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水,随之而来的是需求萎缩,HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员,庆幸之余也心有余悸࿰…...
Python中的Numpy向量计算(R与Python系列第三篇)
目录 一、什么是Numpy? 二、如何导入NumPy? 三、生成NumPy数组 3.1利用序列生成 3.2使用特定函数生成NumPy数组 (1)使用np.arange() (2)使用np.linspace() 四、NumPy数组的其他常用函数 (1)np.z…...
LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)
文章目录 前置知识435. 无重叠区间题目描述参考<452. 用最少数量的箭引爆气球>, 间接求解直接求"重叠区间数量" 763.划分字母区间题目描述贪心 - 建立"最后一个当前字母"数组优化marker创建的过程 56. 合并区间题目描述解题思路代码① 如果有重合就合…...
nvidia-smi 命令详解
nvidia-smi 命令详解 1. nvidia-smi 面板解析2. 显存与GPU的区别 Reference: nvidia-smi命令详解 相关文章: nvidia-smi nvcc -V 及 CUDA、cuDNN 安装 nvidia-smi(NVIDIA System Management Interface) 是一种命令行实用程序,用于监控和管理 NVIDIA G…...
fork()函数的返回值
在程序中,int pd fork() 是一个典型的 fork() 调用。fork() 函数会创建一个新的进程,然后在父进程中返回子进程的进程ID(PID),在子进程中返回0。所以 pd 的值会根据当前进程是父进程还是子进程而有所不同:…...
Stable Diffusion WebUI挂VPN不能跑图解决办法(Windows)
如何解决SD在打开VPN的状态不能运行的问题 在我们开VPN的时候会出现无法生成图片,也无法做其他任何事,这个时候是不是很着急呢? 别急,我这里会说明如何解决。 就像这样,运行半天生成不了图,有时还会出现…...
Android的本地数据
何为本地,即写完之后除非手动修改,否像嘎了一样在那固定死了 有些需求可能也会要求我们去写死数据,因为这需求是一成不变的,那么你通常会用什么方法写死呢? 1. 本地存储-SharedPreferences 此方法可以长时间保存于手…...
android NDK 开发包,网盘下载,不限速
记录下ndk 开发包的地址,分享给大家。 另外有Android studio的下载包, 在另一篇文章 链接:http://t.csdn.cn/JSr9x Android Studio.exe 下载 2023 最新更新,网盘下载_hsj-obj的博客-CSDN博客 主要是19-25,其他的没有…...
【每日一题Day320】LC2651计算列车到站时间 | 数学
计算列车到站时间【LC2651】](https://leetcode.cn/problems/calculate-delayed-arrival-time/) 给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实…...
C语言柔性数组详解:让你的程序更灵活
柔性数组 一、前言二、柔性数组的用法三、柔性数组的内存分布四、柔性数组的优势五、总结 一、前言 仔细观察下面的代码,有没有看出哪里不对劲? struct S {int i;double d;char c;int arr[]; };还有另外一种写法: struct S {int i;double …...
Redis-带你深入学习数据类型list
目录 1、list列表 2、list相关命令 2.1、添加相关命令:rpush、lpush、linsert 2.2、查找相关命令:lrange、lindex、llen 2.3、删除相关命令:lpop、rpop、lrem、ltrim 2.4、修改相关命令:lset 2.5、阻塞相关命令:…...
react拖拽依赖库react-dnd
注:对于表格自定义行可以拖拽和树自定义节点可以拖拽等比较适用,其余的拖拽处理可以使用dragstart,drop等js原生事件来实现 react-dnd使用方法很简单,直接上干货 第一步安装依赖并引入 import { DndProvider } from react-dnd;…...
win10环境安装使用docker-maxwell
目的:maxwell可以监控mysql数据变化,并同步到kafka、mq或tcp等。 maxwell和canal区别: maxwell更轻量,canal把表结构也输出了 docker bootstrap可导出历史数据,canal不能 环境 :win10,mysql5…...
Docker部署RabbitMQ
Docker部署RabbitMQ 介绍 RabbitMQ是一个开源的消息队列系统,它被设计用于在应用程序之间传递消息。它采用了AMQP(高级消息队列协议)作为底层通信协议,这使得它能够在不同的应用程序之间进行可靠的消息传递。 那么,…...
23个react常见问题
1、setState 是异步还是同步? 合成事件中是异步 钩子函数中的是异步 原生事件中是同步 setTimeout中是同步 相关链接:你真的理解setState吗?: 2、聊聊 react16.4 的生命周期 图片 相关连接:React 生命周期 我对 Reac…...
【python基础】——Anaconda下包更新的坑及安装与卸载、及安装后Jupyter Notebook没反应的解决方法
文章目录 前言一、起因:如何一步步走到卸载重装anaconda?二、卸载anaconda二、重新安装anaconda三、关于安装Anaconda后,打开Jupyter Notebook运行代码没反应且in[ ]没有*前言 本文主要用来记录自己近期踩坑的一些复盘。其中坑有: ‘.supxlabel’ 不起作用的解决pip list 与…...
CSS 中的 display 和 visibility
CSS 中的 display 和 visibility 都可以设置一个元素在浏览器中的显示或隐藏效果。 display: 隐藏某个元素时,不会占用任何空间。换句话讲,不会影响布局。visibility: 隐藏某个元素时,仍需占用与未隐藏之前一样的空间。换句话讲,…...
解决mysql报错this is incompatible with DISTINCT
环境 centos 9 php7.4 mysql5.7 问题 mysql查询报如下错误: SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column hst_csc.q.timestamp which is not in SELECT list; this is incompatible with…...
C++-map和set
本期我们来学习map和set 目录 关联式容器 键值对 pair 树形结构的关联式容器 set multiset map multimap 关联式容器 我们已经接触过 STL 中的部分容器,比如: vector 、 list 、 deque 、forward_list(C11)等,这些容器统称为序列式…...
微信小程序AI类目-深度合成-AI问答/AI绘画 互联网信息服务算法备案审核通过教程
近期小程序审核规则变化后,很多使用人类小徐提供的chatGPT系统的会员上传小程序无法通过审核,一直提示需要增加深度合成-AI问答、深度合成-AI绘画类目,该类目需要提供互联网信息服务算法备案并上传资质,一般对企业来说这种务很难实…...
蓝桥杯官网练习题(星期一)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 整个 2020 世纪(1901 年 1 月 1 日至 2000 年 12 月 3131 日之间),一共有多少个星期一?(不要告诉我你不知道今天是星…...
centos7更新podman
实验环境:centos7.7.1908 1.安装podman并查看版本 yum install podman podman -v 当前podman版本信息是1.6.4 2.更新podman版本 通过查看资料显示centos 7 支持最高版本为 3.4.4,更新podman大致有以下四步: golang 安装(本次使用版本: 1.…...
Java特性之设计模式【抽象工厂模式】
一、抽象工厂模式 概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式 在抽象工厂模式中,接口是…...
机器学习简介
引言 为何现在机器学习如此热门? 主要原因是由于“人类无论如何也做不到在短时间内实现从大量的数据中自动的计算出正确的结果操作”。 什么是机器学习? 所谓的机器学习,就是通过对数据进行反复的学习,来找出其中潜藏的规律和模式…...
linux之perf(2)list事件
Linux之perf(2)list事件 Author:Onceday Date:2023年9月3日 漫漫长路,才刚刚开始… 参考文档: Tutorial - Perf Wiki (kernel.org)perf-list(1) - Linux manual page (man7.org) 1. 概述 perf list用于列出可用的性能事件,这…...
将多个EXCEL 合并一个EXCEL多个sheet
合并老版本xls using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using NPOI.HSSF.UserModel; …...
海口专业网站建设地址/在线排名优化
OpenCV是一个跨平台的计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Java、C#、Ruby、MATLAB、GO等语言的接口,实现了图像处理和计…...
做网站 用什么建站软件好/河南品牌网络推广外包
前言 疫情过去,真正的春暖花开又回来了,时不时的可以和朋友约个饭,感慨今年的工作竞争压力很大,工作很不好找。作为一个开发人员,你是否面上了理想的公司,拿到了理想中的薪资? 作为程序员&…...
宁波建站推广技术公司/湖北网络推广
方向不是靠想!而是靠探索!本系列文章由ex_net(张建波)编写,转载请注明出处。 http://blog.csdn.net/ex_net/article/details/8087707 作者:张建波 邮箱: 281451020qq.com 电话:13577…...
淘客推广佣金和服务费/seo蜘蛛池
文章目录前言一、基于SqlSugar的多库多表融合查询1.安装包2.订单表3.添加连接3.1 初始化添加3.2 动态添加4.查询4.1 子表对主表(一对一)查询4.2 主表对子表(一对多)查询4.3 用户权限角色(多对多)查询8.事务…...
做网站 还是淘宝店/成都网站优化公司
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。解集不能包含重复的组合…...
wordpress site-name/上海百度推广代理商
题目链接 题意: 有一棵树,所有的节点都是没有涂色的,Alice和Bob依次给没有涂色的节点涂色,Alice涂白色(先手),Bob涂黑色并且会把与这个黑色节点有树边直接相连的节点都涂成黑色(无论…...