MySQL --- 子查询 - 标量子查询

标量子查询

MySQL --- 子查询 - 子查询概念、规范、分类

子查询返回的是单行单列的数据,就是一个值

主要用在WHERE子句中

需要用到一些运算符 大于>、小于<、等于=、不等于<>、!=

子查询的书写方式

①从外往内写

②从内往外写

  • 查询出基本工资比ALLEN低的全部员工信息

从外往内写

-- 查询出全部员工信息
SELECT * FROM emp;
-- ALLEN的工资
SELECT sal FROM emp WHERE ename='ALLEN';
-- 查询出([基本工资比ALLEN低的]全部员工信息)
SELECT * FROM emp WHERE sal<(SELECT sal FROM emp WHERE ename='ALLEN');

 

  • 查询基本工资高于公司平均工资的全部员工信息

-- 查询公司平均工资
SELECT AVG(sal) FROM emp;/*1988.3333*/
-- 查询基本工资高于公司平均工资的全部员工信息
SELECT * FROM emp WHERE sal>1988.3333;
-- 查询[基本工资高于(公司平均工资)的全部员工信息]
SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);

从内往外写

MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询

  • 查询出与ALLEN从事同一工作,并且基本工资高于员工编号为7521的全部员工信息

-- 查询出与ALLEN从事同一工作 
SELECT * FROM emp
WHERE job=(SELECT job FROM emp WHERE ename='ALLEN')
-- 并且基本工资高于员工编号为7521的全部员工信息
AND sal>(SELECT sal FROM emp WHERE empno=7521)
-- 把 ALLEN 从查询结果中剔除
AND ename<>'ALLEN';

 

可以发现查询结果中包含 ALLEN,需要把 ALLEN 从查询结果中剔除

单行子查询

子查询返回的是单行多列的数据,就是一条记录

  • 查询与SCOTT从事同一工作且工资相同的员工信息

-- 查询与SCOTT从事同一工作且工资相同的员工信息
SELECT * FROM emp
WHERE job=(SELECT job FROM emp WHERE ename='SCOTT')
AND sal=(SELECT sal FROM emp WHERE ename='SCOTT')
AND ename<>'SCOTT';

使用标量子查询

使用单行子查询

-- 查询SCOTT的员工信息
SELECT job,sal FROM emp WHERE ename='SCOTT';
-- 查询与SCOTT从事同一工作且工资相同的员工信息
SELECT * FROM emp WHERE (job,sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT');

  • 查询与员工编号为7566从事同一工作且领导相同的全部员工信息

-- 查询与员工编号为7566从事同一工作且领导相同的全部员工信息
SELECT * FROM emp WHERE 
(job,mgr)=(SELECT job,mgr FROM emp WHERE empno=7566);

  • 查询与ALLEN从事同一工作且在同一年雇佣的全部员工信息(包含ALLEN)

列数相同、数据类型相同可以直接进行比较

MySQL --- 常用函数 - 数值函数、时间日期函数、条件判断函数、其他函数

-- 查询与ALLEN从事同一工作且在同一年雇佣的全部员工信息(包含ALLEN)
SELECT * FROM emp WHERE
(job,DATE_FORMAT(hiredate,'%Y'))=
(SELECT job,DATE_FORMAT(hiredate,'%Y') FROM emp WHERE ename='ALLEN');

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值