我怎样才能获得所有EEE学生注册的课程的cid和cname?

时间:2017-03-21 20:12:17

标签: sql database oracle

我有以下数据。我有三个表格Student,Course和StudentCourse

学生(Sid,Sname,Sbranch,Sage) - 包含学生证,姓名,各自的分支和年龄。大学里只有分支机构,即CSE,EEE和IT。

StudentCourse(Sid,Cid) - 包含学生证和课程ID - 这表示哪个学生注册了哪个课程。

课程(Cid,Cname,CCredits) - 包含课程ID,课程名称和课程所承载的学分数。该学期共提供四门课程,即OS,DBMS,CNW和PHY。

如何编写查询以获取所有EEE学生注册的课程的cid,cname。

5 个答案:

答案 0 :(得分:0)

您的表格结构尚不清楚,但根据您的描述,您可以尝试类似的方法(更改表格的名称与数据库中的名称完全相同):

select distinct ct.c_name
from student_table st,
student_course sc,
course_table ct
where st.st_branch = 'EEE'
and st.st_id = sc.st_id
and ct.c_id = c_id;

另外,如果你发布你尝试过的内容会很好。

答案 1 :(得分:0)

这样的事情应该有效:

select c_id, c_name
from   course c
where  not exists ( 
                    select st_id
                    from   student
                    where  st_branch = 'EEE'
                      and  (st_id, c.c_id) not in (
                                                    select st_id, c_id
                                                    from   student_course
                                                  )
                  )
;

答案 2 :(得分:0)

此解决方案可能会按预期获得结果

select distinct
 c.cid, 
 cname,
 from course c
 join StudentCourse sc on c.cid=sc.cid
 join student s on s.sid=sc.sid
 where sbranch='EEE';

答案 3 :(得分:0)

  

如何编写查询以获取所有EEE学生注册的课程的cid,cname。

以下过滤了sbranch ='EEE'的学生,加入课程,然后使用distinct来获得一套独特的课程。

  -- Start of test data
  with student(sid, sname, sbranch, sage) as 
       (select 1, 'student1', 'EEE', 19 from dual union all
        select 2, 'student2', 'CSE', 20 from dual union all
        select 3, 'student3', 'IT', 18 from dual),
      studentcourse(sid, cid) as
       (select 1, 1 from dual union all
        select 2, 2 from dual union all
        select 3, 4 from dual),
      course(cid, cname, credits) as 
       (select 1, 'OS', 3 from dual union all
        select 2, 'DBMS', 3 from dual union all
        select 3, 'CNW', 4 from dual union all
        select 4, 'PHY', 5 from dual
        )
  -- End of test data
  -- Beginning of main query
  select distinct crs.cid, crs.cname
  from   course crs
   inner join studentcourse sc on (sc.cid = crs.cid)
   inner join student st on (st.sid = sc.sid)
  where st.sbranch = 'EEE'      ;

答案 4 :(得分:0)

SELECT Cid, Cname
 FROM Course C 
 WHERE Cid NOT IN (SELECT Cid
                    FROM Sudent S CROSS JOIN Course C1 LEFT OUTR JOIN (SELECT Sid, Cid
                                                                        FROM StudentCours) SC 
                                                        ON SC.Sid = S.Sid AND SC.Cid = C1.Cid   
                    WHERE SC.Sid IS NULL AND S.Sbranch = 'EEE')

中断子句中的子查询返回EEE stuents 采取的所有课程 所以我们需要在此列表中的课程 关键是CROSS JOIN,它给出了所有可能的课程 - 学生对