我创建了四个表
第一个表:学生表
Create table student(
sid  number(20)  primary key ,
sname nvarchar2 (20) not null,
gender  nvarchar2(1) constraint  g_ck check (gender  in ('m','w')),
age number(3) not null,
birthday nvarchar2(30) not null,
address nvarchar2(50) not null,
political nvarchar2(50) not null,
college nvarchar2(50) not null,
branches nvarchar2(20) not null,
class nvarchar2(20) not null
);
第二个表:课程表
create table course(
cid number(20) primary key,
cname nvarchar2(20) not null,
credit number(4) not null,
hour nvarchar2(20) not null,
total number(3) not null,
description nvarchar2(200) not null
);
insert into  course 
第三个表:教师表
Create table teacher(
tid number(20) primary key,
tname nvarchar2(20) not null,
gender  nvarchar2(1)  constraint  t_ck check (gender  in ('m','w')),
age number(3) not null,
college nvarchar2(50) not null,
title nvarchar2(20) not null,
branches nvarchar2(20) not null,
professional nvarchar2(100) not null
);
第四个表:选课信息表course_info
create table course_info (
sid  number (sequence) references student(sid),
tid number(sequence) references teacher(tid),
cid number(sequence) references course(cid),
counter number(5) not null,
check_date date(20) not null,
open_date date(20) not null,
teach_date date(20) not null
); 我想实现这个功能
 查询学生选择课程人数最多的前三门课程的课程编号(cid),课程名称(cname),授课教师(tname),从而对其进行教学评估。
我的代码如下:select d.cid,b.cname,c.tname from
 (
select d.cid,b.cname,c.tname
 
from course b,teacher c,course_info d 
where b.cid=d.cid 
and c.tid=d.tid
order by 
(select d.counter 
from course_info d) desc)
where rownum<4;可总是报第 1 行出现错误:
ORA-00911: 无效字符本人初学oracle 不知道到底是哪里错了,调试很久了,哪位能告诉到底要怎么写阿!

解决方案 »

  1.   

    不知道你的第4个表怎么设计的counter字段是做什么的?
    下面的语句帮你查询出来选课最多的课程的id和name,没有老师。如果课程能够和老师关联的话你可以自己写
    select a.cid,b.cname,
    (select cid,count(cid) as c from course_info group by cid order by count(cid) desc) a,
    course b where a.cid=b.cid and a.rownum<4
      

  2.   

    把表的别名去掉:
    SELECT CID, CNAME, TNAME
      FROM (SELECT D.CID, B.CNAME, C.TNAME
              FROM COURSE B, TEACHER C, COURSE_INFO D
             WHERE B.CID = D.CID
               AND C.TID = D.TID
             ORDER BY (SELECT D.COUNTER FROM COURSE_INFO D) DESC)
     WHERE ROWNUM < 4;