zl程序教程

您现在的位置是:首页 >  其他

当前栏目

一个SQL面试题详解数据库

面试题数据库SQL 详解 一个
2023-06-13 09:20:10 时间

 题目要求

阿里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

运行结果


 

 

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4395.html