Mysql入门技能树-子查询

文章介绍了MySQL中的子查询概念,包括如何使用子查询进行数据过滤和查询。讨论了相关子查询的示例,以及ANY和ALL关键字在排除特定条件下数据的用法。同时,解释了Exists操作符在查找无特定条件记录时的作用。
摘要由CSDN通过智能技术生成

前言

Mysql入门技能树-子查询
Mysql入门技能树

子查询

MySQL子查询是指在查询语句中嵌套另一个查询语句,通常用于在查询结果中筛选或者过滤一些数据。在子查询中,我们需要选择需要查询的列和满足条件的数据。在主查询中,我们可以根据子查询中的结果来筛选或者过滤数据。总的来说,MySQL子查询可以帮助我们处理复杂的数据过滤和查询操作,但是需要注意它的性能问题,过多的嵌套子查询会影响查询效率。

相关子查询

现有员工表

create table employee
(
id serial primary key,
name varchar(256),
dept varchar(256),
salary decimal(12, 4)
);

Joe 希望找出比销售部(dept 为 sale)工资最高的员工工资更高的那部分人,查询出他们的完整信息,下面哪一项可以满足要求?
在这里插入图片描述
在这里插入图片描述
答案是:C

A 语法错误
B having一般用于分组后的筛选,与group by一起使用
D 要找比销售部工资最高的还高的,where后还限定了dept=‘sale’,很明显不对

ANY

Joe 想要从员工表构造一个员工列表,排除每个部门最高工资的员工。这个查询可以怎样写?

在这里插入图片描述
在这里插入图片描述
答案是:D

A取的是部门最高工资的员工信息
B是排除了部门最高工资的员工,但是数据可能会有重复
C直接会报错,字段未指定别名,不知道是o的还是i的,即使指定了别名,结果也有可能会有重复的

ALL

Joe 想从员工表

create table employee(
id int primary key auto_increment,
dept_id int,
name varchar(256),
post varchar(16)
)

中找出所有其所在部门没有助理(post 为 assistant)的员工信息。由于 Joe 没有其它表的查询权限,他只能查询员工表,这个查询应该是:
在这里插入图片描述
在这里插入图片描述

相似正确答案:D
A如果有一个部门post 为 assistant,那么整个结果无数据,导致其他部门的即使post 不为 assistant,也不会筛选出来
B也会筛选出有助理的人员信息
C是筛选人人都有助理的部门人员信息
小插曲:题目中给的表结构是部门id dept_id ,答案中都是dept ,严格来讲,无正确答案,哈哈

Exists

Joe 想从员工表中找出所有其所在部门没有助理(post 为 assistant)的员工信息。由于 Joe 没有其它表的查询权限, 他只能查询员工表,并且这一次他想用 exists 实现。这个查询应该是:
在这里插入图片描述
在这里插入图片描述
答案是:B

AD语法错误
题目需要排除有助理的,所以是不存在有助理的部门人员,C是存在,B是不存在,所以选B

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空空star

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

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

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

打赏作者

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

抵扣说明:

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

余额充值