现在有3个表:
student(sno,sname,ssex,sage,sdept)---学生表(学号,姓名,性别,年龄);
course(cno,cname)---课程表(课程号,课程名);
sc(sno,cno)---选课关系表(学号,课程号)
(1)题目的要求是查询既选修了现代数据库技术,又选修了网络操作系统的学生的详细信息。
我的做法是集合查询,使用的是交操作“intersect”但是查询分析器总是报错“intersect附近语法错误”,搞不懂是怎么回事
代码如下:
select*
from student
where sno in(
select sno
from sc
where cno=(
select cno
from course
where cname='现代数据库技术'))
intersect 
select *
from student
where sno in(
select sno
from sc
where cno=(
select cno
from course
where cname='网络操作系统'))
(2)查询计算机院没有选修现代数据库技术课程的学生的信息
我的代码如下,但是查询出来的结果与是错的,分析了好久,也不晓得问题出在什么地方了
select *
from student
where sdept='cs'and
not exists(
select sno
from sc
where cno=(
select cno
from course
where cname='现代数据库技术'))
初学数据库,希望大家支持。

解决方案 »

  1.   

    select * from student where sid in
    (
    select a.sid from
    (select sid from sc where cid in (select cid from course where cname='现代数据库技术')) a 
    inner join 
    (select sid from sc where cid in (select cid from course where cname='网络操作系统')) b
    on a.sid=b.sid
    )
      

  2.   

    (1)题目的要求是查询既选修了现代数据库技术,又选修了网络操作系统的学生的详细信息。--intersect 这个不是这么用的
    语句:select s.* 
    from student s 
    join (
    select sno from sc 
    join  (
    select cno from course 
    where cname ='网络操作系统' or cname ='现代数据库技术'
    ) c on  sc.cno =c.cno 
    group by sno 
    having count(cno)>=2
    ) t on s.sno =t.sno
      

  3.   

    2
    select s.* 
    from student s 
    where not exists (select 1 from sc join course c on sc.cno =c.cno where sc.cname ='现代数据库技术' and sc.sno =s.sno )
      

  4.   

    这个查询:
    select * from student where sid in
    (
    select a.sid from
    (select sid from sc where cid in (select cid from course where cname='现代数据库技术')) a 
    inner join 
    (select sid from sc where cid in (select cid from course where cname='网络操作系统')) b
    on a.sid=b.sid
    )结果是:
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'sid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'cid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'cid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'sid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'cid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'cid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'sid' 无效。
      

  5.   

    (1)题目的要求是查询既选修了现代数据库技术,又选修了网络操作系统的学生的详细信息。select * from student where sno in 
    (
    select sno from
    (
    select sc.sno from sc , course
    where sc.cno = course.cno and (course.cname = '现代数据库技术' or course.cname = '网络操作系统')
    ) a
    group by sno having count(*) = 2) b(2)查询计算机院没有选修现代数据库技术课程的学生的信息
    select * from student where sdept = '计算机院' and sno not exists 
    (
    select sc.sno from sc , course
    where sc.cno = course.cno and course.cname = '现代数据库技术'
    ) a
      

  6.   

    这个查询:
    select * from student where sid in
    (
    select a.sid from
    (select sid from sc where cid in (select cid from course where cname='现代数据库技术')) a 
    inner join 
    (select sid from sc where cid in (select cid from course where cname='网络操作系统')) b
    on a.sid=b.sid
    )
    修改SID和CID之后通过。
    谢谢哦