一个SQL面试题目惭愧啊

zjfc_xth 2009-04-23 08:23:42
加精
阿里baba的面试题
有三个表
学生表 S
SID SNAME
教师课表 T
TID TNAME TCL
成绩表 SC
SID TCL SCR
各字段的含义不用我标明了吧,大侠哥哥么!呵呵
现在要求写SQL查询
1、选修了A、B课程,并且A课程的成绩大于B成绩的学生姓名?
2、没有选修‘li’老师的课程的学生,要求不能用in,exists 等词?
...全文
6201 221 打赏 收藏 转发到动态 举报
写回复
用AI写文章
221 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingwen3699 2010-10-13
  • 打赏
  • 举报
回复
其实面试的题目很基础,希望大家把基础弄好。:)
非凡602 2010-10-11
  • 打赏
  • 举报
回复
学习了
CNCTJL 2010-10-09
  • 打赏
  • 举报
回复
学习中………………
RealStalish 2010-10-06
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 everyou 的回复:]
问题一:
SELECT SID SNAME FROM S ,(SELECT SID FROM (SELECT SID,SRC FROM SC WHERE TCL='A') A,(SELECT SID,SRC WHERE TCL='B') B WHERE A.SID=B.SID AND A.SRC>B.SRC) AS C WHERE S.SID = C.SID;
问题二:
SELECT SC.……
[/Quote]
这个好像是对的
seanlitow 2010-10-01
  • 打赏
  • 举报
回复
现在就是在学数据库,这个题还是比较合适的
kumanong 2010-09-30
  • 打赏
  • 举报
回复
学习中!
luoyukang 2010-09-28
  • 打赏
  • 举报
回复
--第一条要修改一下,写成
select sname from s,SC b where s.sid = b.sid and b.tcl='A'
and b.scr>(select scr from sc c where c.tcl='B' and c.sid=b.sid);
luoyukang 2010-09-28
  • 打赏
  • 举报
回复
--1.
select sname from s,SC b where s.sid = b.sid and b.tcl='A'
and b.scr>(select scr from sc c where c.tcl='B' and c.sid=b.sid and b.scr>c.scr);
--或者
select s.sid,sname from s,sc b,sc c
where b.tcl='A' and c.tcl='B' and s.sid=b.sid and b.sid=c.sid and b.scr>c.scr;

--2.
select distinct sc.sid from sc where sc.sid!=All(select a.sid from sc a,t where a.tcl=t.tcl and tname='li');
luoyukang 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zwbhanye 的回复:]
1
SELECT SNAME FROM S,
(SELECT SID,MAX(SCR) FROM SC WHERE TCL='A' OR TCL='B' GROUP BY SID
HAVING COUNT(SID)=2) M
WHERE S.SID = M.SID --100%正确


2
SELECT SID
FROM T, SC
WHERE T.TCL = SC……
[/Quote]

第二条错了,明显一个学生不可能只选一门课程
love0milk 2010-06-24
  • 打赏
  • 举报
回复
学习一下!!!!!!!!!
lksphinx21 2010-06-23
  • 打赏
  • 举报
回复
小题目有大智慧啊。。。
cactus123456 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wangjanson99 的回复:]
第一题:
select A.SName from
(select S.SName,SC.*
from S,SC
where S.Sid = SC.SID
and TCL = 'A') A,
(select S.SName,SC.*
from S,SC
where S.Sid = SC.SID
and TCL = 'B') B
where A.SCR > B.SCR
a……
[/Quote]

同意该解决方案
daihua_1113 2010-06-21
  • 打赏
  • 举报
回复
接分的……
eeff 2010-06-10
  • 打赏
  • 举报
回复

-- 第一题
select s.sname from
(select sid,scr from sc where tcl = 'a') t1,
(select sid,scr from sc where tcl = 'b') t2, s where t1.sid = t2.sid and t1.scr > t2.scr
and s.sid = t1.sid;

-- 第二题
select s.sname from
(select sid from sc,t where sc.tcl = t.tcl and t.tname <> 'li'
minus
select sid from sc,t where sc.tcl = t.tcl and t.tname = 'li') t,s where s.sid= t.sid;
tch16818 2010-06-08
  • 打赏
  • 举报
回复
学习了
zw87804600 2010-06-08
  • 打赏
  • 举报
回复
题目2
问题描述: 已知
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
select SNAME
from S
where SNO not in (select S.SNO
from S,C,SC
where S.SNO=SC.SNO and SC.CNO=C.CNO and C.CNAME='李明')


2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
select S.SNAME,avg(SC.scgrade)
from SC,S
where SC.SNO=S.SNO
group by S.SNAME,S.SNO
having count(SC.scgrade<60)>=2


3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
selcet S.SNO,S.NAME
from S
where SNO in (select SNO
from SC
where CNO=1)
and SNO in (select SNO
from SC
where CNO=1)

4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号

select SNO
from SC
where cno=1 and scgrade>(select scgrade
from SC
where SNO=2 and CNO=1)

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

select a.scgrade,b.scgrade,SNO
from SC a,SC b
where a.CNO=1 and b.CNO=2 and a.scgrade>b.scgrade and SNO in (selcet S.SNO,S.NAME
from S
where SNO in (select SNO
from SC
where CNO=1)
and SNO in (select SNO
from SC
where CNO=2))


realclimax 2010-06-08
  • 打赏
  • 举报
回复
阿里baba的面试题
有三个表
学生表 S
SID SNAME
教师课表 T
TID TNAME TCL
成绩表 SC
SID TCL SCR
各字段的含义不用我标明了吧,大侠哥哥么!呵呵
现在要求写SQL查询
1、选修了A、B课程,并且A课程的成绩大于B成绩的学生姓名?
2、没有选修‘li’老师的课程的学生,要求不能用in,exists 等词?
------------------------------------------------------------
如果是sqlserver可以这么写,db2第二问这种语句没试过,应该可以
1.
select distinct S.SNAME
from S inner join SC sc1 on sc1.TCL = 'A' and sc1.SID = S.SID
inner join SC sc2 on sc2.TCL = 'B' and sc2.SID = S.SID

2.
select distinct S.SNAME
from S left join SC sc1 on sc1.SID = S.SID
left join T on sc1.TCL = T.TCL and T.TNAME = 'li'
where T.TNAME is null
dh9450 2010-06-06
  • 打赏
  • 举报
回复
问题2。

select S.* From S
inner join SC on S.SID=SC.SID
inner join T on SC.TCL=T.TCL and T.TNAME<>'li'
dh9450 2010-06-06
  • 打赏
  • 举报
回复
问题一,如果每个学生每科目只有一个成绩


select SNAME from S a inner join (
select SID,sum(case when TCL='a' then SCR else 0 end -case when TCL='b' then SCR else 0 end) CC From SC group by SID
)b on a.SID=b.SID and b.CC>0
chuchuzinnia 2010-06-04
  • 打赏
  • 举报
回复

问题一。参考某楼
select
s.sname as '姓名',sc1.scr as 'A成绩',sc2.scr as 'B成绩'
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
加载更多回复(201)

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧