Mysql 子查询

MYSQL——子查询&关联子查询 文章目录子查询标量子查询关联子查询 子查询 一次性的视图,将用来定义视图的select语句,直接用于from子句当中。需要为子查询定义名称 标量子查询 必须而且只能返回1行1列的结果,因此标量子查询的返回值可以用在=或者<>这样需要单一值的比较运算符之中。 在where子句中使用标量子查询 如果想要挑选售价大于平均单价的条件,但是不能使用如下语句,因为不能在where使用聚合函数 “... 阅读详情

子查询含义:出现在其他语句中的select语句,称为子查询或内查询

外部查询语句称为主查询或父查询

举个例子

select first_name from employees where
department_id in(
select department_id from departments
where location_id = 1700
)

分类:

按子查询出现的位置:

select 后面
仅仅支持标量子查询
from 后面
支持表子查询
where或having后面
标量子查询(单行子查询)
列子查询(多行子查询)
行子查询
exists 后面(相关子查询)
表子查询

按结果集的行列数不同:

标量子查询(结果集只有一行一列)

列子查询(结果集只有一列多行)

行子查询(结果集有一行多列)

表子查询(结果集为多行多列)

 

一、where或having后面的子查询

1.标量子查询(单行子查询)

2.列子子查询(多行子查询)

3.行子查询 (用的较少)

特点:

1.子查询放在小括号内

2.子查询一般放在条件内测

3.标量子查询,一边拿搭配着单行操作符使用

> < >= <= = <>

列子查询,一般搭配着多行操作符使用

in any/some all

4.子查询优先于主查询执行

1.标量子查询

谁的工资比Abel高?

第一步:查Abel的工资

select salary
from employees
where last_name = 'Abel'

第二部:查询员工的信息,满足salary>第一步的结果

select *
from employees
where salary>(
select salary
from employees
where last_name = 'Abel'

)//因为这里Abel的工资可以变,所以不能直接给定一个值作为Abel的工资

返回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)

查询最低工资大于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.列子查询(多行子查询)

特点:

返回多行

使用多行比较操作符如

in/not in 等于列表中的任意一个

any/some 和子查询返回的某一个值比较

例如
a >any(10,15,20)
a = 12则满足条件
也就是说a大于any中的任何一个就可以

all 和子查询返回的所有值比较

例如
a > all(10,15,20)
a = 22满足条件
也就是说a的值大于all中所有的数据项

 

使用in返回location_id是1400或1700的部门中的所有员工姓名

第一步查询location_id 是1400或1700的部门

第二步查询员工姓名,要求部门号是第一步结果列表中的一个

select last_name
from employees
where department_id in(
select department_id from departments where location_id = 1400 or location_id =1700
);

使用any返回其他部门中比job_id为‘IT_PROG’部门任一工资低的员工的工号、姓名、job_id已经salary

select employee_id,last_name,job_id,salary
from employees
where salary<any(
select distinct salary
from employees
where job_id ='IT_PROG'
)and job_id <>'IT_PROG';

使用all返回其他部门中比job_id为‘IT_PROG’部门所有工资低的员工的工号、姓名、job_id以及salary

 

select employee_id,last_name,job_id,salary
from employees
where salary<all(
select distinct salary
from employees
where job_id ='IT_PROG'
)and job_id <>'IT_PROG';

3.行子查询

查询员工编号最小并且工资最高的员工信息

select *
from employees
where employee_id =
(select min(employee_id)
from employees
)and salary=(
select max(salary)
from employees
);

我们可以使用多个标量子查询来进行查询,然而我们也可以用行子查询

select *
from employees
where (employee_id,salary)=(
select min(employee_id),max(salary)
from employees
);

只有在多个条件变量 的运算符相同时才可以用行子查询

二、放在select后面

只能返回一行一列

查询每个部门的员工个数

select d.*,(
select count(*)
from employees e
where e.department_id = d.department_id
)个数
from departments d;

这个用分组查询也可以做,但是差不了没有员工的部门

三、放在from后面

查询每个部门的平均工资的工资等级

select ag,department_id,grade_level
from (
select avg(salary),department_id
from employees
group by department_id
) ag_dep,
inner join job_grades g
on dg_dep.ag between lowest_sal and highest_sal;

查询每个部门中工资高于部门平均工资的员工姓名 工号 工资

1.首先查每个部门的平均工资

select avg(salary) g,department_id
from employees
group by department_id

2.如果用having 的话 由于工资是大于的关系,部门号是等于的关系,所以不能使用行子查询,但是又要保证比较的时候部门号一样所以只能将

两个表连接起来

select employee_id,last_name,salary
from employees e
inner join (select avg(salary) g,department_id
from employees
group by department_id
) a
on a.department_id = e.department_id
where salary >a.g;

四、exists后面(相关子查询)

先执行外查询,在执行子查询

select exists(select employee_id from employees);

查询结果为1

也就是说exists 是判断有没有符合条件的结果,如果有则返回1,反之返回0

查询有员工的部门名

select department_name
from departments
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
);

查询没有女朋友的男神信息

select boy.*
from boy bo
where exists(
select boyfriend_id
from beauty b
where bo.id = b.boyfriend_id
);

 

MySQL不使用子查询的原因 这些案例展示了如何通过不同优化策略提升MySQL查询性能,特别是在处理子查询时。创建合适的索引:经常用于WHERE和JOIN的字段应建立索引,避免在低选择性的字段上建立索引(如性别字段)。避免索引失效的情况:使用函数计算的字段不会使用索引,如应优化为。组合索引的最左前缀法则:确保查询条件从组合索引的最左列开始。使用EXPLAIN分析查询执行计划:通过EXPLAIN关键字可以帮助我们了解查询的执行计划,从而发现性能瓶颈。优化查询语句:避免使用SELECT *,使用LIMIT。 阅读详情

相关推荐

多孔材料吸附性质模拟程序RASPA的离线和在线安装方法

RASPA-2.0是今年美国西北大学教授Randall Q. Snurr等人开发的针对于MC,MD,分子力学优化等用途的程序,相比于之前开发的MUSIC软件,RASPA的功能更加齐全,操作更加简便,可以在MC的吸附过程中考虑骨架的柔性,也可以想MUSIC一样先制作积分格点(music中的map)。 A、离线安装(centos为例): (1)、安装之前要检查一下是否装了automake,

youyno的博客 1万+

MySQL——子查询用法

文章目录MySQL——子查询用法1、子查询概述2、子查询的使用2.1、单行子查询2.2、多行子查询2.3、相关子查询子查询练习题 MySQL——子查询用法 1、子查询概述 子查询简介 子查询指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件,这个特性从MySQL4.1开始引入。 SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

万里顾一程的博客 2万+

Delphi 12.3 精简绿色版下载

Delphi精简绿色版基于原版安装,去掉了InterBase、法语、德语、日语,只保留了Delphi Windows 32和Delphi Windows 64桌面开发,其余部分未做任何修改。Delphi精简绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用Delphi,请购买正版。绿色版基于原版安装,未做任何精简和修改。绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用RAD Studio,请购买正版。

全粘工程师 4302

MySQL基础-子查询

子查询概念:子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较子查询的基本语法结构:说明:子查询(内查询)在主查询之前一次执行完成子查询的结果被主查询(外查询)使用子查询要包含在括号内建议将子查询放在比较条件的右侧,便于阅读。

~ 1万+

OCS2 移动机械臂深度解析:ocs2_mobile_manipulator 与 ocs2_mobile_manipulator_ros 源码全拆解

摘要:本文深入解析OCS2移动机械臂MPC控制框架的两个核心工具包。ocs2_mobile_manipulator负责算法建模,通过MobileManipulatorInterface统一构建最优控制问题,支持4种机械臂模型并实现自动维度推导;ocs2_mobile_manipulator_ros负责ROS集成,包含MPC求解、虚拟跟踪等4个核心节点。文章详细剖析了工具包分工、最优控制建模架构(含动力学、代价约束设计)、ROS运行管线、参数配置映射,并提供了高效的源码阅读顺序建议,帮助开发者快速掌握移动机械

m0_73309445的博客 655

DNS入侵检测 datacon2020

DNS入侵检测 datacon2020。

weixin_51491521的博客 523

MySQL:子查询(全面详解)

本博主将用优快云记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

weixin_52533007的博客 1万+

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

MYSQL 子查询

十六、子查询 如果在一个查询语句中出现了另一个查询,称为子查询。因此子查询按照查询出现的位置分为外部查询和子查询。 1、查询的结果集分为几种情况 (1)返回标量值 select sum(quanlity) from t_orderitem (2)返回值列表 select cust_id from t_customers (3)返回虚拟表 select * from t_cu

norang的博客 5876

GNSS气象学入门:从ZTD到PWV的水汽反演全流程解析(含精度评估)

本文详细解析了GNSS气象学中从ZTD到PWV的水汽反演全流程,包括基础概念、反演原理、数据处理步骤及精度评估方法。通过PRIDE软件和MATLAB代码示例,展示了如何高效提取ZTD数据并结合ERA5气象数据进行PWV计算,为气象研究和业务应用提供了实用指南。

weixin_28707365的博客 573

Spring Boot集成ShardingSphere实现数据加密及数据脱敏 | Spring Cloud 48

利用ShardingSphere实现: - 数据加密 - 数据脱敏

gmHappy 1万+

【⑦MySQL】· 一文了解四大子查询

【MySQL子查询】:从标量到表子,让你的查询更高效

热爱编程的小K的博客 9064

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

【MySQL】子查询

子查询是嵌套在另一个查询内部的SELECT语句,它可以提供主查询所需的数据或条件。子查询使SQL语句更加灵活和强大,能够处理复杂的数据检索和分析需求。

Guiat的博客 901

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL 嵌套子查询 with子句 from子查询 in子查询 join子查询

with子句、from子查询、join子查询、in子查询,在复杂查询问题中经常会用到这几种方法,以3个由简到难的案例说明这些方法的用法。

我的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql怎么子查询_在mysql中如何进行子查询?

在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT、UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为“WHERE (另一个查询语句)”。(推荐教程:mysql视频教程)子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDAT...

weixin_33902056的博客 4932

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MySQL 子查询

具体实现方式是:在 SQL 执行过程中,第一次需要子查询结果时执行子查询并将子查询的结果保存为临时表(一般情况下优化器就会帮我们做这件事) ,后续对子查询结果集的访问将直接通过临时表获得。假设我们有一个学生表 student 和班级表 class,学生表记录了学生的学号 stu_no,而班级表记录了班级信息以及每个班级的班长的学号 monitor_no。此时,整个查询的执行逻辑不再是像我们想象的一样:先执行子查询获取到一个小的结果集,然后以这个小结果集在 g1 中作为过滤条件去过滤。

干就完了!!! 951

MySQL——子查询

我们按内查询是否被执行多次,将子查询划分为 `相关(或关联)子查询` 和 `不相关(或非关联)子查询`。 子查询从数据表中查询了数据结果,如果这个数据结果`只执行一次`,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做`不相关子查询`。 同样,如果子查询需要执行多次,即采用循环的方式,先从`外部查询`开始,每次都`传入子查询`进行查询,然后再将结果反馈给外部,这种`嵌套的执行`方式就称为`相关子查询`。

程邓楠的博客 1266

[mysql]相关子查询

我们前面把单行子查询和多行子查询就已经说完了,我们现在要把继续把相关子查询的内容给大家说明白,因为之前用的都是不相关子查询的案例,我们来谈一谈相关子查询,记住单行子查询和多行子查询是可以进行相关子查询,只是我们刚才写的案例都是相关子查询的案例.我们看一下,如果子查询的执行依赖于外部查询,用到了外部的表,每次查询的时候都要执行一次外部查询,那么这样的子查询就被我们叫做关联子查询,下面列出了子查询的步骤,比如我们之前的案例,查询比abel这个人工资高的员工姓名和工资。

qq1021091799qq的博客 1656

MySQL子查询

子查询的基本语法结构:子查询(内查询)在主查询之前一次执行完成。子查询的结果被主查询(外查询)使用。子查询要包含在括号内将子查询放在比较条件的右侧单行操作符对应单行子查询,多行操作符对应多行子查询。

曦 1603

mysql 什么是子查询_mysql子查询是什么

MySql的子查询是多表查询的一个重要组成部分,常常和连接查询一起使用,是多表查询的基础。下面本篇文章就来带大家了解一下子查询,希望对你们有所帮助。什么是子查询?子查询,又叫内部查询。当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。子查询最常用于SELECT-SQL命令的WHERE子句中。子查询是一个 SELECT 语句,它嵌套在一个 SELECT、...

weixin_39616339的博客 242

子查询在 MySQL 中是怎么执行的

MySQL学习系列 想象子查询的执行方式 想象中子查询的执行方式是这样的: 如果该子查询是不相关子查询, 比如下边这个查询: SELECT * FROM s1 WHERE order_note IN (SELECT order_note FROM s2); 先单独执行(SELECT order_note FROM s2)这个子查询。 然后在将上一步子查询得到的结果当作外层查询的参数再执行外层查询 SELECT * FROM s1 WHERE order_note IN (…)。 如果该子查询是相关子查.

m0_37607945的博客 1093

Mysql-子查询

嵌套在另一条 SQL 语句(如SELECTINSERTUPDATEDELETE)中的 ​**SELECT查询**。它的核心作用是为外层查询(或者操作)提供数据支持(如条件过滤、值比较或数据源)。1.2 作用:子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者 需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量(单行),也可能是某个集合(多行))进行比较。

firethehome666的博客 1195

mysql 子查询类型_【MySQL】子查询之一

MySQL 从版本4 开始支持 SQL 标准要求的所有子查询格式和操作,同时扩展了特有的几种特性。本文会介绍子查询的类型以及相关的注意点。一 什么是子查询子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用。如:SELECT * FROM t1 WHERE vid in (SELECT vid FROM t2);二 MySQL 子查询分类根据子查询的返回数据形...

weixin_28803437的博客 643

什么是mysql子查询_mysql子查询指的是什么

mysql子查询指的是什么发布时间:2020-11-21 10:45:37来源:亿速云阅读:105作者:小新小编给大家分享一下mysql子查询指的是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!MySql的子查询是多表查询的一个重要组成部分,常常和连接查询一起使用,是多表查询的基础。下面本篇文章就来带大家了解一下子查询,希望对你们有所帮助。什么是子查询?子查询,又叫内部查询。当一...

weixin_29147539的博客 1269
上一篇: Mysql连接查询
下一篇: Mysql分页查询和联合查询
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值