请问这两个数据库查询语句是一样的吗
有下面两个表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班')
展开
展开全部
有区别的,当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班')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询