MySQL基础篇第9章(子查询)

news2025/1/2 0:11:22

文章目录

  • 1、需求分析与问题解决
    • 1.1 实际问题
    • 1.2 子查询的基本使用
    • 1.3 子查询的分类
  • 2、单行子查询
    • 2.1 单行比较操作符
    • 2.2 代码示例
    • 2.3 HAVING中的子查询
    • 2.4 CASE中的子查询
    • 2.5 子查询中的空值问题
    • 2.6 非法使用子查询
  • 3、多行子查询
    • 3.1 多行比较操作符
    • 3.2 代码示例
    • 3.3 空值问题
  • 4、相关子查询
    • 4.1 相关子查询执行流程
    • 4.2 代码示例
    • 4.3 EXISTS 与 NOT EXISTS关键字
    • 4.4 相关更新
    • 4.5 相关删除
  • 5、抛一个思考题

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集 合)进行比较。

1、需求分析与问题解决

1.1 实际问题

在这里插入图片描述

现有的解决方式:

#方式一:
SELECT salary
FROM employees
WHERE last_name = 'Abel';#11000

SELECT last_name,salary
FROM employees
WHERE salary > 11000;

#方式二:自连接
SELECT e2.last_name,e2.salary
FROM employees e1,employees e2
WHERE e1.last_name = 'Abel'
AND e1.`salary` < e2.`salary`
#方式三:子查询
#方式三:子查询
SELECT last_name,salary
FROM employees
WHERE salary > (
	SELECT salary
	FROM employees
	WHERE last_name = 'Abel'
);

1.2 子查询的基本使用

在这里插入图片描述

1.3 子查询的分类

在这里插入图片描述
在这里插入图片描述

2、单行子查询

2.1 单行比较操作符

在这里插入图片描述

2.2 代码示例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3 HAVING中的子查询

  • 首先执行子查询
  • 想主查询中的HAVING子句返回结果

在这里插入图片描述

2.4 CASE中的子查询

在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
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;

2.5 子查询中的空值问题

SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');

在这里插入图片描述

2.6 非法使用子查询

SELECT employee_id, last_name
FROM employees
WHERE salary =(
	SELECT MIN(salary)
	FROM employees
	GROUP BY department_id
);

在这里插入图片描述

3、多行子查询

  • 也称为集合比较子查询
  • 内查询返回多行
  • 使用多行比较操作符

3.1 多行比较操作符

在这里插入图片描述

3.2 代码示例

题目:返回其它job_id中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary

在这里插入图片描述

题目:返回其它job_id中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id以及salary

在这里插入图片描述

题目:查询平均工资最低的部门id

#方式1:
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
	SELECT MIN(avg_sal)
	FROM (
		SELECT AVG(salary) avg_sal
		FROM employees
		GROUP BY department_id
	) dept_avg_sal
)
#方式2:
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) <= ALL (
	SELECT AVG(salary) avg_sal
	FROM employees
	GROUP BY department_id
)

3.3 空值问题

SELECT last_name
FROM employees
WHERE employee_id NOT IN (
	SELECT manager_id
	FROM employees
);

在这里插入图片描述

4、相关子查询

4.1 相关子查询执行流程

在这里插入图片描述

4.2 代码示例

在这里插入图片描述
在这里插入图片描述

4.3 EXISTS 与 NOT EXISTS关键字

在这里插入图片描述
在这里插入图片描述

4.4 相关更新

在这里插入图片描述

4.5 相关删除

在这里插入图片描述

5、抛一个思考题

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vuepress - - - 首页底部版权信息加a标签超链接跳转或备案信息跳转链接

修改前 默认的底部版权信息只能填写纯文本&#xff0c;加不了超链接跳转等。 对应\docs\README.md内容&#xff1a; 修改后 修改后&#xff0c;点击Zichen跳转会打开新的网页。 看官网例子 底部添加了备案号跳转链接。 找到官网的github部署的文件。点导航栏中的“指…

flutter开发实战-实现webview与Javascript通信JSBridge

flutter开发实战-实现webview与H5中Javascript通信JSBridge 在开发中&#xff0c;使用到webview&#xff0c;flutter实现webview是使用原生的插件实现&#xff0c;常用的有webview_flutter与flutter_inappwebview 这里使用的是webview_flutter&#xff0c;在iOS上&#xff0c;…

【IMX6ULL驱动开发学习】20. input子系统(按键实现ls命令)

一、input子系统相关结构体 二、input子系统实例实现&#xff1a; static struct input_dev *key_input;...... ....../* 1.申请空间 */ key_input input_allocate_device(); if(key_input NULL){printk("input alloc failed\n");return -ENOMEM; } /* 2.设置事件类…

Go实现WebSocket

Go语言标准包里面没有提供对WebSocket的支持&#xff0c;但是在由官方维护的go.net子包中有对这个的支持&#xff0c;你可以通过如下的命令获取该包&#xff1a; go get golang.org/x/net/websocket WebSocket分为客户端和服务端&#xff0c;接下来我们将实现一个简单的例子:…

云进销存是什么意思,云进销存系统该如何选?

云进销存是指基于云计算技术的一种进销存管理系统&#xff0c;云进销存系统可以帮助企业或中小商户实时监控库存情况、优化采购和销售流程、提高物流效率&#xff0c;以及生成各类报表和统计分析&#xff0c;从而提升企业或商户的运营效率和管理水平。 一、云进销存对中小商户有…

C#,数值计算——不完全 Beta 函数(incomplete beta function)的源代码

Incomplete Beta Function The incomplete beta function (also called the Euler Integral) is a generalized β-function; An independent integral (with integral bounds from 0 to x) replaces the definite integral. The formula is: Where: 0 ≤ x ≤ 1, a, b > 0…

Pro白嫖esri数据

最近用Pro比较多,想跟大家谈谈一些关于Pro的 技巧。在谈之前,我想问大家一个问题,你真的了解ArcGIS Pro吗? 我想大多数刚刚接触Pro的用户应该是把Pro当做像Map一样的数据处理分析工具,只是简单的从其他地方下载数据来加入工程进行处理和分析 或许在你眼里的Pro和Map仅有…

在Orangepi上使用raspberry的dashboard

树莓派实验室整了一个比较酷的dashboard&#xff0c;可以用来显示树莓派状态&#xff0c;主要内容是基于js和php来实现&#xff0c;因为orangepi的用户名和密码都是一个套路&#xff0c;首先想到能不能移植。 https://www.rstk.cn/news/860562.html?actiononClick 首先需要做…

Docker把公共镜像推送到harbor私服的流程(企业级)

如果构建项目时&#xff0c;使用了k8s docker Jenkins的模式。 那么我们在docker构建镜像时&#xff0c;如果需要使用了Nodejs&#xff0c;那么我们必须得从某个资源库中拉取需要的Nodejs。 在企业里&#xff0c;正常都会把自己项目涉及的库都放在harbor私服里。 下面讲一下&…

数据分类分级

数据分类是数据管理的第一步&#xff0c;是数据治理的先行条件。当前&#xff0c;数据应用方兴未艾。“数据”作为新的生产要素资源&#xff0c;支撑供给侧结构性改革、驱动制造业转型升级的作用日益显现&#xff0c;正成为推动质量变革、效率变革、动力变革的新引擎。但与此同…

python3+requests+unittest实战系列【二】

前言&#xff1a;上篇文章python3requestsunittest&#xff1a;接口自动化测试&#xff08;一&#xff09;已经介绍了基于unittest框架的实现接口自动化&#xff0c;但是也存在一些问题&#xff0c;比如最明显的测试数据和业务没有区分开&#xff0c;接口用例不便于管理等&…

ROS中bag的录制、播放和使用

文章目录 前言一、bag录制二、bag信息查看三、bag播放四、bag的使用&#xff08;以A-LOAM为例&#xff09; 前言 传感器获取到的信息&#xff0c;有时我们可能需要实时处理&#xff0c;有时可能只是采集数据&#xff0c;事后分析&#xff0c;比如: 机器人导航实现中&#xff0…

Tomcat 基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、安装 三、 目录结构 四、启停 五、配置文件 1. server.xml (1) Server (2) Listener (3) GlobalNamingResources (4) Service 01.Connector (1) port…

硬件故障恢复出文件之后数据库故障处理---惜分飞

客户那边硬件故障(raid损坏磁盘超过了极限,导致raid offline),通过硬件恢复出来数据文件,然后尝试自行恢复,我接手的时候大量数据文件resetlogs scn异常. 重建控制文件报错 WARNING: Default Temporary Tablespace not specified in CREATE DATABASE command Default Tempora…

Git安装详解(写吐了,看完不后悔)

Git 是一个非常流行的分布式版本控制系统&#xff0c;它帮助开发者管理和跟踪项目中的代码变化。通俗地说&#xff0c;可以认为 Git 就像是一个代码的时间机器&#xff0c;它记录了项目从开始到结束的每一次代码变动。 无论你是个人开发者还是团队成员&#xff0c;掌握 Git 都能…

三防平板在工业生产中的物料追溯与供应链管理

科技的不断发展和技术的不断进步&#xff0c;越来越多的企业开始关注物料追溯和供应链管理的重要性。特别是在工业生产中&#xff0c;确保物料的安全性和可追溯性对于提高生产效率和产品质量至关重要。10.1寸三防平板采用新一代英特尔Jasper Lake平台处理器赛扬RN5100&#xff…

SpringBoot2+Vue2实战(十七)vue集成markdown实现多级评论功能

新建数据库表 Article Data TableName("sys_article") public class Article implements Serializable {private static final long serialVersionUID 1L;TableId(value "id", type IdType.AUTO)private Integer id;/*** 标题*/private String name;/…

FreerRTOS(二值信号量和计数型信号量)

什么是信号量&#xff1f; 信号量&#xff08;Semaphore&#xff09;&#xff0c;是在多任务环境下使用的一种机制&#xff0c;是可以用来保证两个或多个关键代 码段不被并发调用。 信号量这个名字&#xff0c;我们可以把它拆分来看&#xff0c;信号可以起到通知信号的作用&…

机器学习 day26(多标签分类,Adam算法,卷积层)

多标签分类 多标签分类&#xff1a;对于单个输入特征&#xff0c;输出多个不同的标签y多类分类&#xff1a;对于单个输入特征&#xff0c;输出单个标签y&#xff0c;但y的可能结果有多个 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不…

C++14新特性扫盲探究

闲暇之时&#xff0c;聊到C14&#xff0c;实际上C14相对之前的11并没有太大的改动&#xff0c;或者说更像C11标准基础上的查漏补缺&#xff0c;C14之后&#xff0c;还有17、20甚至23&#xff0c;所以说&#xff0c;C14更像个过渡版本。 下面粗略聊聊C14新特性&#xff1a; 语言…