前言
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