题目要求
阿里baba的面试题
有三个表
学生表 S
SID SNAME
教师课表 T
TID TNAME TCL
成绩表 SC
SID TCL SCR
各字段的含义不用我标明了吧,大侠哥哥么!呵呵
现在要求写SQL查询
1、选修了A、B课程,并且A课程的成绩大于B成绩的学生姓名?
2、没有选修‘li’老师的课程的学生,要求不能用in,exists 等词?
create table SC(
SID varchar(64) ,
TCL varchar(64) ,
SCR int) ;
create table S (
SID varchar(64) ,
SNAME varchar(64)
) ;
create table T
(
TID varchar(64),
TNAME varchar(64),
TCL varchar(64)
) ;
insert into S VALUES ('1','11') ;
insert into S VALUES ('2','22') ;
insert into S VALUES ('3','33') ;
insert into S VALUES ('4','44') ;
insert into SC VALUES ('1','a',100) ;
insert into SC VALUES ('1','b',90) ;
insert into SC VALUES ('2','a',77) ;
insert into SC VALUES ('3','b',34) ;
insert into SC VALUES ('4','a',59) ;
insert into SC VALUES ('4','b',88) ;
insert into T VALUES ('5','li','a');
第一个问题的答案
select
s.sname,sc1.scr,sc2.scr
from
s,sc sc1,sc sc2
where s.sid=sc1.sid
and s.sid=sc2.sid
and sc1.tcl='a'
and sc2.tcl='b'
and sc1.scr>sc2.scr
运行结果:
11 ,100 , 90
第二题的答案
select sid from
(select s.sid,a.tcl from (select sc.sid,sc.tcl from sc,t where sc.tcl=t.tcl and t.tname='li' ) a
right join s
on a.sid=s.sid ) b
where b.tcl is null
运行结果
3
与持久表一样,优化器创建并维护临时表的分布统计信息,并跟踪它的基数。当索引临时表时,这种能力尤其重要。当优化器需要评估选择性时,它就可以根据这些分布统计信息生成经过优化的计划。这是临时表在性能方面不同于表变量的主要特性之一。
此外,因为临时表会维护统计信息,如果上次编译后被引用表有足够多的行发 ......