永发信息网

sql 列出与“李四”同性别并位于同一个系的所有同学的姓名。能不能用EXISTS语句实现

答案:2  悬赏:10  手机版
解决时间 2021-04-01 13:30
  • 提问者网友:niaiwoma
  • 2021-03-31 13:33
sql 列出与“李四”同性别并位于同一个系的所有同学的姓名。能不能用EXISTS语句实现
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-03-31 14:07
首先必须强调一下,exists(存在)子查询是sql语言中一个令人纠结的"存在"。因为exists子查询有两种查询方式,一种是独立存在子查询,另一种是父子关联存在子查询,我们如果弄不明白的话,就很容易用错它。

前者(独立exists子查询),在子查询里不关联引用父查询中的记录,子查询返回的结果集不会对父查询构成筛选作用。它对父查询的影响只有两种情况,要么全部输出父查询结果集(在子查询查出存在记录行时);要么强制父查询输出空记录集(在子查询返回空记录集时),即使父查询原本有记录返回也是如此。

后者在子查询里会引用参考父查询记录源中的记录,因此它会对父查询输出的记录行构成筛选作用,它通常可返回父表中与子表记录行的交集(exists)或非交集(not exists)。

提问给出的语句中,其子查询里没有引用关联父表中的记录,它属于独立exists子查询,因此只要有李四同学的记录存在,自然就会返回父表中所有的同学姓名。

如要sql 列出与“李四”同性别并位于同一个系的所有同学的姓名,建议使用父子关联子查询,请参考下列sql语句写法:

假设表结构是
XSQK(学号,姓名,性别,院系)

select a.姓名 from XSQK a where exists
(select * from XSQK b where b.姓名='李四'
and b.性别=a.性别 and b.院系=a.院系);

请注意,上述语句如果同一个院系里同时存在男李四和女李四的话,那么同系里的所有男女生会被全部选出,这不表示语句有问题,因为逻辑上就是应该如此。

最后再给一个需要留意的提示,那就是not exists子查询在碰到大数据表时,如果没有可被利用的索引,运行效率将会极低,此时应避免使用。
全部回答
  • 1楼网友:逐風
  • 2021-03-31 15:25
同一个系没有体现啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯