===========就一道练习题:=============
需求及表结构
传智播客为了更好的管理学员成绩信息,开发《学员成绩管理系统》。
表结构如下:
1.班级(T_CLASS)
字段名 类型(位数) 是否必填 说明
id number 必填 主键
name Varchar2(15) 必填 班级名称
2.学员(T_STUDENT)
字段名 类型(位数) 是否必填 说明
id number 必填 主键
name Varchar2(30) 必填 名称
sex number(1) 性别 0:女 1:男
edu Varchar2(30) 学历
tele Varchar2(30) 电话
cardno Varchar2(18) 身份证号
classid number 班级编号
3.课程(T_COURSE)
字段名 类型(位数) 是否必填 说明
id number 必填 主键
name Varchar2(30) 必填 课程名称
4.成绩表(T_MARK)
字段名 类型(位数) 是否必填 说明
id number 必填 主键
courseid number 必填 课程ID
studentid number 必填 学员ID
score number 分数
练习一:创建表、序列 并录入测试数据
答案:
--班级
CREATE TABLE T_CLASS
(ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(30) NOT NULL UNIQUE
);
--学生
CREATE TABLE T_STUDENT
( ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(30),
SEX NUMBER(1) CHECK(SEX IN (0,1)),
EDU VARCHAR2(30),
TELE VARCHAR2(30),
CARDNO VARCHAR2(18) ,
CLASSID NUMBER
);
--课程
CREATE TABLE T_COURSE
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR2(50)
);
--成绩
CREATE TABLE T_MARK
(
ID NUMBER NOT NULL PRIMARY KEY,
COURSEID NUMBER,
STUDENTID NUMBER,
SCORE NUMBER
);
-----序列:
CREATE SEQUENCE SEQ_CLASS;
CREATE SEQUENCE SEQ_STUDENT;
CREATE SEQUENCE SEQ_COURSE;
CREATE SEQUENCE SEQ_MARK;
练习二:统计每门课程的平均成绩
--我的:
分析:每门课程:按课程分组。
select c.name,m.courseid, avg(m.score) avgScore
from t_marke m,t_course c
where m.courseid=c.id
group by c.id,m.courseid,c.name;
--【这里《按多条件分组》:实际上c.name对分组结果无影响,效果按c.id分组一样。---只为了符合group by 查询字段要求语法:多条件分组。
-- 这里只是为了分组结果,多一个c.name列,更直观】
--老师:
select m.courseid,c.name,
round(avg(m.score)) avgscore
from t_marke m,t_course c
where m.courseid=c.id
group by m.courseid,c.name
===================================