MySQL子查询介绍和where后的标量子查询

子查询介绍

出现在其他语句中的select语句,被包裹的select语句就是子查询或内查询

包裹子查询的外部的查询语句:称主查询语句

sql 复制代码
select last_name from employees
where department_id in(
select department_id from departments
where location_id=1700
);

子查询分类

通过位置来分

select 后面:仅仅支持标量子查询

from 后面:支持表子查询

where 或having 后面:支持标量子查询(重要)\列子查询(重要)\行子查询(用的较少)

exists 后面(相关查询):支持表子查询

按结果集的行列数不同分类

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

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

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

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

子查询特点

子查询放在小括号内

子查询一般放在条件的右侧

标量子查询,一般搭配着单行操作符来使用(> < >= =)

列子查询,一般搭配着多行操作符使用:in any/some all

子查询的执行顺序优先于主查询(select后的子查询存在例外)

案例

1.where后面的标量子查询

案例:查询工资比Abel这个人的高的员工信息

sql 复制代码
select * from employees
where salary>(
select
salary
from employees
where last_name='Abel'
);

2.查询job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资

sql 复制代码
select last_name,job_id,salary
from employees
where job_id=(select job_id from employees
where employee_id=142 ) and salary>(select salary
from employees where employee_id=143);
(这个案例说明一个主查询里可以放很多个子查询)

3.子查询里用到分组函数:查询公司工资最少的员工的last_name,job_id和salary

sql 复制代码
select last_name,job_id,salary from employees
where salary=(select min(salary) from employees);

4.用到having的子查询:查询最低工资大于50号部门最低工资的部门id和其最低工资

sql 复制代码
select department_id , min(salary) from employees
group by department_id
having min(salary)>(select min(salary) from employees where department_id=50);
相关推荐
I Am a robert girl2 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒2 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB3 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB3 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB3 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj198545 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse
1024奇点6 小时前
【仓颉语言入门 · 第二篇 第 12 课】
开发语言·数据库·ide·mysql·开源
冰暮流星6 小时前
mysql之insert优化
数据库·mysql
北方的银狐-Zero6 小时前
OntoL 7.0|面向工业多智能体的语义本体套件,让异构系统真正 “看懂彼此”——OntoL的本体产品矩阵
人工智能·mysql·sqlite·1024程序员节·本体论·本体产品
海鸥-w6 小时前
数据库冗余字段设计笔记
java·数据库·笔记·oracle