请问这两个数据库查询语句是一样的吗

有下面两个表A和B,如果要查询不在1班和2班的学生姓名,以下两个查询语句效果是一样的吗?谢谢!!!1.selectA.姓名fromAwherenotexists(sele... 有下面两个表A和B,如果要查询不在1班和2班的学生姓名,以下两个查询语句效果是一样的吗?谢谢!!!1.select A.姓名 from A where not exists (select 1 from B where A.学号=B.学号 and B.班级 in ('1班','2班'))2.select A.姓名 from A,B where A.学号=B.学号 and B.班级 not in ('1班','2班') 展开
 我来答
wyd52x
2016-10-09 · TA获得超过1943个赞
知道小有建树答主
回答量:520
采纳率:0%
帮助的人:627万
展开全部

有区别的,当2表没有外键约束而b表缺一个班时,最后数据不一样

如果不存在这种情况还是可以认为结果一样

当然,这里的结果是指出来的查询数据结果


效率和查询过程结果是很不一样的,语句1使用了 not exists子查询,效率差些

因为子查询是逐行查询,每条数据都会被查询一次,所以效率低,所以子查询不被推荐,除非万不得已,不然都建议使用From a left join b where b.id is null 类似的来代替


对比语句2效率比语句一高一些,因为只是2个笛卡尔积间匹配,在匹配过程中加了个条件,但匹配次数是不变的,次数都是等于 a数据行数*b数据行数,不产生额外的查询


不过,from後给2个表的写法并不被推荐


改写下:

select A.姓名 from A Inner Join B On A.学号=B.学号 and B.班级 not in ('1班','2班')
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式