Sql常会面试题(总结)
1.用一条SQL语句查询出每门课都不小于80分的学生姓名?
name??kecheng??fenshu
张三????语文??????81
张三????数学??????75?李四????语文??????76
李四????数学??????90
王五????语文??????81
王五????数学??????100?王五????英语??????90
??
A:selectdistinctnamefromtable?where?namenotin(selectdistinctnamefromtablewherefenshu=80)??2.学生表如下:
自动编号??学号??姓名课程编号课程名称分数
1???????001?张三?0001?????数学???69
2???????002?李四?0001?????数学???89
3???????001?张三?0001?????数学???69?删除除了自动编号不一样,其他都相似的学生冗余信息
?A:deletefromtablenamewhere自动编号notin(selectmin(自动编号)fromtablenamegroupby学号,姓名,课程编号,课程名称,分数)
一种叫department的表,里面只有一种字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,目前四个球对进行比赛,用一条sql语句显示所有也许的比赛组合.?你先按你自己的想法做一下,当作果有我的这个简朴吗?
答:selecta.name,b.name?fromteama,teamb
wherea.name<b.name
请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目对应月份的发生额高的科目。请注意:TestDB中有诸多科目,均有1-12月份的发生额。?AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。
数据库名:JcyAudit,数据集:Select*fromTestDB
答:selecta.*
fromTestDBa?,(selectOccmonth,max(DebitOccur)Debit101ccurfromTestDBwhereAccID=101groupbyOccmonth)b?wherea.Occmonth=b.Occmonthanda.DebitOccurb.Debit101ccur
************************************************************************************
面试题:怎么把这样一种表儿?year??monthamount
1991??1????1.1
1991??2????1.2
1991??3????1.3?1991??4????1.4
1992??1????2.1?1992??2????2.2?1992??3????2.3
1992??4????2.4
查成这样一种成果?yearm1??m2??m3??m4
19911.11.21.31.4?19922.12.22.32.4??答案一、?selectyear,
(selectamountfrom??aaamwheremonth=1??andm.year=aaa.year)asm1,?(selectamountfrom??aaamwheremonth=2??andm.year=aaa.year)asm2,?(selectamountfrom??aaamwheremonth=3??andm.year=aaa.year)asm3,?(selectamountfrom??aaamwheremonth=4??andm.year=aaa.year)asm4?fromaaa??groupbyyear
这个是ORACLE??中做的:
select*from(selectname,yearb1,lead(year)over?(partitionbynameorderbyyear)b2,lead(m,2)over(partitionbynameorderbyyear)b3,rank()over(?partitionbynameorderbyyear)rkfromt)whererk=1;
*