本题目要求编写 Insert语句, 检索所授每门课程平均成绩均大于70分的教师姓名,并将检索的值插入一个新的教师表faculty
表中
表结构:
请在这里写定义表结构的SQL语句。例如:
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
)
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`)
);
CREATE TABLE `faculty` (
`tname` char(10) DEFAULT NULL
)
表样例
请在这里给出上述表结构对应的表样例。例如:
cou
表:
sc
表:
输出样例:
教师表faculty
表,如下:
解题方法:
这题其实如果你想正向求每个老师所授有几门课程,然后再求每个课程是否平均分>70其实是比较困难的,所以,我们换个思路,我们可以先求没有被学生选修课程的老师,即在sc
表中没有出现的cno
对应的老师以及在sc
表中课程平均成绩<=70的老师,然后用not in
把不满足条件的老师筛选出来,结果即为题目所求
代码:
insert into faculty
select distinct teacher
from cou
where teacher not in (
select teacher
from (select cno ,avg(grade) avg_grade from sc group by sc.cno) a inner join cou on cou.cno=a.cno
where avg_grade<=70
)
and teacher in (
select teacher
from sc inner join cou on cou.cno=sc.cno)
小结:
有些东西如果正向求解麻烦,不如反向试试,也许会有惊喜。
希望能帮到你哦!