这样一个领导

现在是北京时间2013-12-03 23:28:30,我还在公司,我右手的右手的右手的右手正坐着一位这篇文章的主人公--我的领导的领导的领导H。

场景一:

听着噼里啪啦的键盘声,突然想到上个星期的一个事故,来的突然,来的措手不及,每个人都开始焦躁,不知道如何解决。这时候,我们的领导出现了,跟着我们连续通宵了3晚,这3晚,在别人眼神迷离,键盘都敲不动的时候,他仍然思维清晰,安排这所有的工作和安抚所有人的情绪;在别人已经小憩的时候,他仍然在规划着算法,重新编写坏掉的模块;在别人在测试模块不知如何下手的时候,他亲自上阵了。。。

 

场景二:

早上xx点,我们的业务突然断了,整个团队都在围绕着修复,寻找根因在转圈圈,情况持续到晚上12点,H作为领导询问情况,发现还卡在那,指导我们,让我们看了一个文件,然后,,,就是这个文件,根因找到了。

 

场景三:

H的老婆两年前生了个大胖小子,儿子在4个月之内晚上都需要喝奶奶,于是H每天晚上醒四次,给儿子冲奶粉,把屎把尿,每晚都睡不踏实,每天都惶惶忽忽的上班,就这样还因为业绩突出,破格被提升,除此之外,还考了好几个证书~

 

后续:

小领导们都很敬佩这位大神H,闲暇之余,就咨询他为什么通宵那么久都还那么清醒,H回答:IT是一个拼体力脑力的行业,体力不好,脑力会在关键时候掉链子,所以平时没事运动运动,做做按摩,打打球,时间一长,体力就上来了,就可以应付突如其来的负荷了~

小白有感:1. 小白已经在实行定期跑步的计划了

                  2. 提高自己的运维能力,出问题时,知道通过什么日志,查看什么内容,修改什么配置...来定位问题点

                  3. 向H学习,爱生活,爱工作。

<think>好的,我现在需要解决的问题是从EMP表中筛选出非领导员工的数据。用户问的是如何通过SQL查询语句实现这一点。首先,我得理解什么是“非领导员工”。通常,员工表中可能会有职位(job)字段或者是否有下属的字段来区分领导和普通员工。但根据提供的引用内容,这里可能涉及到的是是否有下属的情况,也就是员工的员工编号(empno)是否出现在其他员工的主管字段(mgr)中。 参考引用[1]提到了子查询的使用,格式是select...from...where...(select...from...)。这可能适用于当前情况。因为如果要找非领导员工,也就是那些empno没有出现在mgr字段中的员工。所以,可以通过子查询来检查员工的empno是否不在mgr的列表中。 首先,我需要找到所有领导,也就是在mgr字段中出现的empno。然后,筛选出那些不在这个列表中的员工。因此,子查询应该从emp表中选出所有mgr的值,然后主查询选择empno不在这个子查询结果中的员工。 具体来说,子查询会是:select distinct mgr from emp where mgr is not null。这样可以获取所有有下属的领导员工编号。然后主查询中使用not in来排除这些员工。需要注意的是,mgr字段可能有null值,所以子查询中需要排除null,否则会导致整个条件失败。 另一个方法是使用not exists子句,这可能更高效,尤其是在处理大量数据时。使用exists时,需要关联子查询和主查询,检查是否存在有员工的mgr等于当前员工的empno。如果不存在这样的记录,则该员工是非领导。 此外,还要考虑是否有员工既是领导又是非领导的情况,但一般来说,一个员工要么是领导(有下属),要么不是,所以这里应该不会有重叠。 可能的SQL语句有两种方式: 1. 使用not in子查询: select * from emp where empno not in (select distinct mgr from emp where mgr is not null); 2. 使用not exists: select * from emp e where not exists (select 1 from emp where mgr = e.empno); 这两种方法哪种更好呢?not in在处理null值时需要注意,如果子查询返回null,那么not in会无法匹配,所以需要确保子查询中的mgr不为null。而not exists则不需要担心这个问题,因为它会直接检查是否存在相关记录,即使mgr有null值也不会影响结果。 此外,还要考虑性能。如果mgr字段上有索引,not exists可能会更高效,因为它可以使用索引进行查找。而not in在某些数据库中可能会转换为不同的执行计划,效率可能有所不同。 根据引用[2]中的例子,使用了子查询和左连接,这可能也适用于当前情况,但这里不需要计算统计信息,只需要简单的筛选。所以直接使用子查询更为合适。 总结,正确的SQL语句应该是通过子查询找出所有领导,然后选择不在其中的员工。需要确保子查询排除了null值,或者使用exists来避免这个问题。</think>### 从EMP表中筛选非领导员工的SQL实现步骤 #### 分析逻辑 非领导员工的特征是**其员工编号`empno`未出现在其他员工的`mgr`(主管编号)字段中**。需要通过以下两步实现: 1. **获取所有领导列表**:从`mgr`字段中提取所有非空的员工编号(即现任领导的`empno`) 2. **反向筛选非领导**:使用`NOT IN`或`NOT EXISTS`排除属于领导的员工 --- #### 方法1:使用`NOT IN`子查询 ```sql SELECT * FROM emp WHERE empno NOT IN ( SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL -- 排除空值避免逻辑错误 ); ``` - **子查询**:`SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL` 提取所有有效领导编号[^1] - **主查询**:通过`WHERE empno NOT IN (...)`反向筛选出非领导员工 --- #### 方法2:使用`NOT EXISTS`关联查询 ```sql SELECT * FROM emp e WHERE NOT EXISTS ( SELECT 1 FROM emp WHERE mgr = e.empno -- 检查是否有员工将当前员工作为主管 ); ``` - **关联子查询**:通过`WHERE mgr = e.empno`动态检查每个员工是否为他人主管 - **性能优化**:若`mgr`字段有索引,此方法效率更高[^2] --- #### 两种方法的对比 | 方法 | 优点 | 注意事项 | |---------------|-------------------------------|------------------------------| | `NOT IN` | 语法简单直观 | 必须处理子查询中的`NULL`值 | | `NOT EXISTS` | 自动处理`NULL`,效率更优 | 依赖索引优化查询性能 | ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值