CREATE TABLE Course
(
课程名称 VARCHAR2(20) NOT NULL,
课程编号 VARCHAR2(5),
学分 NUMBER(2,1),
教师编号 VARCHAR2(5),
先修课程编号 VARCHAR2(5),
CONSTRAINT PK_Course PRIMARY KEY (课程编号)
);
CREATE TABLE Grade
(
学号 VARCHAR2 (5),
课程编号 VARCHAR2 (5),
成绩 NUMBER(3,0),
CONSTRAINT PK_Grade PRIMARY KEY (学号, 课程编号),
CONSTRAINT PK_Grade_TO_Students FOREIGN KEY (学号)
REFERENCES Students(学号),
CONSTRAINT PK_Grade_TO_Course FOREIGN KEY (课程编号)
REFERENCES Course (课程编号)
);查询每门课的课程名和选课人数:
SQL>create or replace view 课程选课人数(课程编号,选课人数) AS
select 课程编号,count(*) as 选修人数 from Grade
group by 课程编号;
SQL>select * from 课程选课人数;课程编号 选课人数
-------- ----------
00001 5
00002 5
00003 5
00004 5
00005 5
00006 5
00007 4
因为题中叫写课程名称和选课人数,如果我写成
SQL>create or replace view 课程选课人数(课程名称,选课人数) AS
select 课程名称,count(*) as 选修人数 from Course,Grade
group by 课程名称;
SQL>select * from 课程选课人数;
课程名称 选课人数
-------------------- ----------
程序设计 34
高数 34
计算机导论 34
数据库 34
体育 34
英语读写 34
英语听说 34结果就变成成这样了,34好像是把所有的人数都求和了,怎么样才能出现课程名称 选课人数
-------------------- ----------
程序设计 5
高数 5
计算机导论 5
数据库 5
体育 5
英语读写 5
英语听说 4这样的结果呀?
(
课程名称 VARCHAR2(20) NOT NULL,
课程编号 VARCHAR2(5),
学分 NUMBER(2,1),
教师编号 VARCHAR2(5),
先修课程编号 VARCHAR2(5),
CONSTRAINT PK_Course PRIMARY KEY (课程编号)
);
CREATE TABLE Grade
(
学号 VARCHAR2 (5),
课程编号 VARCHAR2 (5),
成绩 NUMBER(3,0),
CONSTRAINT PK_Grade PRIMARY KEY (学号, 课程编号),
CONSTRAINT PK_Grade_TO_Students FOREIGN KEY (学号)
REFERENCES Students(学号),
CONSTRAINT PK_Grade_TO_Course FOREIGN KEY (课程编号)
REFERENCES Course (课程编号)
);查询每门课的课程名和选课人数:
SQL>create or replace view 课程选课人数(课程编号,选课人数) AS
select 课程编号,count(*) as 选修人数 from Grade
group by 课程编号;
SQL>select * from 课程选课人数;课程编号 选课人数
-------- ----------
00001 5
00002 5
00003 5
00004 5
00005 5
00006 5
00007 4
因为题中叫写课程名称和选课人数,如果我写成
SQL>create or replace view 课程选课人数(课程名称,选课人数) AS
select 课程名称,count(*) as 选修人数 from Course,Grade
group by 课程名称;
SQL>select * from 课程选课人数;
课程名称 选课人数
-------------------- ----------
程序设计 34
高数 34
计算机导论 34
数据库 34
体育 34
英语读写 34
英语听说 34结果就变成成这样了,34好像是把所有的人数都求和了,怎么样才能出现课程名称 选课人数
-------------------- ----------
程序设计 5
高数 5
计算机导论 5
数据库 5
体育 5
英语读写 5
英语听说 4这样的结果呀?
select c.课程名称,count(g.*) as 选修人数 from Grade g, Course c
where c.课程编号 = g.课程编号
group by 课程编号;
SQL> create or replace view 课程选课人数(课程编号,选课人数) AS
2 select c.课程名称,count(g.*) as 选修人数 from Grade g, Course c
3 where c.课程编号 = g.课程编号
4 group by 课程编号;
select c.课程名称,count(g.*) as 选修人数 from Grade g, Course c
*
第 2 行出现错误:
ORA-01747: 无效的用户.表.列, 表.列, 或列规格
SELECT c.课程名称, COUNT(*) AS 选修人数
FROM Course c, Grade g
WHERE c.课程编号 = g.课程编号
GROUP BY c.课程名称;
grade表里有34条记录
而cource表里的每一条记录都会与其中一条对应
因此每个cource就对应有34条记录了