永发信息网

关于sql语句的问题

答案:6  悬赏:0  手机版
解决时间 2021-04-22 00:55
  • 提问者网友:两耳就是菩提
  • 2021-04-21 05:31

有两表,学生(学号,姓名),成绩(课程号,课程名,成绩)

要查询有哪些学生选课!我学的语句是select *from 学生
where exists(select *from 成绩 )为什么运行得到的是全部学生的信息!

我知道正确的写法,我想知道为什么错了

最佳答案
  • 五星知识达人网友:玩家
  • 2021-04-21 05:42
是不是你问过类似的问题啊??
select *from 学生
where exists(select *from 成绩,学生 where 成绩.学号=学生.学号)
里面的exists条件永远成立,所以会把所有的学生信息全部查询出来。
改成select *from 学生
where exists(select *from 成绩 where 成绩.学号=学生.学号)
全部回答
  • 1楼网友:傲气稳了全场
  • 2021-04-21 10:46

select *from 学生where exists(select *from 成绩)

是子查询 只是查出来所有存在成绩的学生信息!并不会显示学生的成绩信息等!

而且数据库设计的时候没有主外键关系!导致查询时条件模糊!所以出现了错误

  • 2楼网友:千杯敬自由
  • 2021-04-21 09:48

你的这两张表设置没有任何主外键关联关系 【成绩(课程号,课程名,成绩)】这张表应该添加一个字段与学生表关联,最好表的设置为:【成绩(课程号,学号,课程名,成绩)】

select * from 学生表 where 学号 in (select 学号 from 成绩表)就可以查出所有有成绩的学生信息了

  • 3楼网友:独行浪子会拥风
  • 2021-04-21 09:10
exists(select *from 成绩 )总是为真。所以你得到的是全部学生信息
  • 4楼网友:撞了怀
  • 2021-04-21 07:51

按照你写的那样 两张表根本就没关联 select* from成绩 这句肯定能执行 所以写where exists(select *from 成绩)返回值为true 也就是说相当于where限制条件白写了 select * from 学生 查出来的当然是全部学生的信息了 后边限制条件是没用的

  • 5楼网友:琴狂剑也妄
  • 2021-04-21 06:53
最后一个select子句不对,不应该选取全部信息的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯