SQLServer技术题面试题徐武峰

1.SQL语句查询出每门课都大于80分的学生姓名

namekechengfenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90

SQL1:selectdistinctnamefromtablewherenamein(selectdistinctnamefromtablewherefenshu>80)

SQL2:selectnamefromtablegroupbynamehavingmin(fenshu)>80

2.学生表如下:自动编号学号姓名课程编号课程名称分数12005001张三0001数学6922005002李四0001数学8932005001张三0001数学69

删除除了自动编号不同,其他都相同的学生冗余信息

SQL:deletetablenamewhere自动编号notin(selectmin(自动编号)fromtablenamegroupby学号,姓名,课程编号,课程名称,分数)

3.请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有1-12月份的发生额。AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。数据库名:JcyAudit,数据集:Select*fromTestDB

SQL:selecta.*fromTestDBa,(selectOccmonth,max(DebitOccur)Debit101ccurfromTestDBwhereAccID='101'groupbyOccmonth)bwherea.Occmonth=b.Occmonthanda.DebitOccur>b.Debit101ccur

4.怎么把这样一个表yearmonthamount199111.1199121.2199131.3199141.4199212.1199222.2199232.3199242.4查成这样一个结果yearm1m2m3m419911.11.21.31.419922.12.22.32.4

SQL:selectyear,(selectamountfromaaamwheremonth=1andm.year=aaa.year)asm1,(selectamountfromaaamwheremonth=2andm.year=aaa.year)asm2,(selectamountfromaaamwheremonth=3andm.year=aaa.year)asm3,(selectamountfromaaamwheremonth=4andm.year=aaa.year)asm4fromaaagroupbyyear

5.复制表(只复制结构,源表名:a新表名:b)

SQL:select*intobfromawhere1<>1

6.拷贝表(拷贝数据,源表名:a目标表名:b)

SQL:insertintob(a,b,c)selectd,e,ffromb;

SQL:selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b

8.外连接查询(表名1:a表名2:b)

SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c

9.日程安排提前五分钟提醒

10.两张关联表,删除主表中已经在副表中没有的信息

SQL:deletefrominfowherenotexists(select*frominfobzwhereinfo.infid=infobz.infid)

SQL:

SELECTa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')AStelyear,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'01',a.factration))ASJAN,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'02',a.factration))ASFRI,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'03',a.factration))ASMAR,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'04',a.factration))ASAPR,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'05',a.factration))ASMAY,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'06',a.factration))ASJUE,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'07',a.factration))ASJUL,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'08',a.factration))ASAGU,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'09',a.factration))ASSEP,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'10',a.factration))ASOCT,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'11',a.factration))ASNOV,

SUM(decode(TO_CHAR(a.telfeedate,'mm'),'12',a.factration))ASDEC

FROM(SELECTa.userper,a.tel,a.standfee,b.telfeedate,b.factration

FROMTELFEESTANDa,TELFEEb

WHEREa.tel=b.telfax)a

GROUPBYa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')

12.四表联查问题:

SQL:select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....

13.得到表中最小的未使用的ID号

SELECT(CASEWHENEXISTS(SELECT*FROMHandlebWHEREb.HandleID=1)THENMIN(HandleID)+1ELSE1END)asHandleID

FROMHandle

WHERENOTHandleIDIN(SELECTa.HandleID-1FROMHandlea)

14.表数据如下IDstuidstatus11001320014234315523642573331想得到下面结果stuid总数100,200,2343,3334

SQL:

SELECTstuff(Select','+convert(nvarchar(100),stuid)fromtableawherestatus=1orderbystuidFORXMLPATH('')),1,1,'')

ASstuid,count(*)as总数fromtableaasawherestatus=1

15.原表:courseidcoursenamescore-------------------------------------1java702oracle903xml404jsp305servlet80-------------------------------------为了便于阅读,查询此表后的结果显式如下(及格分数为60):courseidcoursenamescoremark---------------------------------------------------1java70pass2oracle90pass3xml40fail4jsp30fail5servlet80pass---------------------------------------------------写出此查询语句。

selectcourseid,coursename,score,

'mark'=CASEWHENscore>=60THEN'pass'WHENscore<60THEN'fail'

ENDfromtablea

16.原表:idproidproname11M12F21N22G31B32A

查询后的表:idpro1pro21MF2NG3BA

selectdistinctid,

(selectpronamefromtableaawhereproid=1anda.id=tablea.id)aspro1,

(selectpronamefromtableaawhereproid=2anda.id=tablea.id)aspro2

fromtablea

17.原表a:a1a21a1b2x2y2z查询后的表:ida31ab2xyzSQL用FORXMLPATH()实现

selectdistinct(select''+a2fromawherea1=1FORXMLPATH(''))as'1',(select''+a2fromawherea1=2FORXMLPATH(''))as'2'froma

18.行转列

姓名课程分数

-------------------------------

张三语文74

张三数学83

张三物理93

李四语文74

李四数学84

李四物理94

变成

姓名语文数学物理

-------------------------------------------

李四748494

张三748393

SQL1:

select姓名,

max(case课程when'语文'then分数else0end)语文,

max(case课程when'数学'then分数else0end)数学,

max(case课程when'物理'then分数else0end)物理

fromtb

groupby姓名

SQL2:select*fromtbpivot(max(分数)for课程in(语文,数学,物理))a

19.行转列结果加上总分、平均分

姓名语文数学物理总分平均分

------------------------------------------------------

李四74849425284.00

张三74839325083.33

max(case课程when'物理'then分数else0end)物理,

sum(分数)总分,

cast(avg(分数*1.0)asdecimal(18,2))平均分

20.列转行

-------------------------

select*from

(

select姓名,课程='语文',分数=语文fromtb

unionall

select姓名,课程='数学',分数=数学fromtb

select姓名,课程='物理',分数=物理fromtb

)t

orderby姓名,case课程when'语文'then1when'数学'then2when'物理'then3end

21.获取不同name的最小的year和最小的month的其中的id字段

yearmonthidname2014101a201492a2013123a201314a201325a2014106b201597b2012128b201219b2012210b20141011b20151112b20131213c2013114c2013215c

结果:

yearmonthidname201314a201219b2013114c

select*from(select*,row_number()over(partitionbynameorderbyyears)asnfromtablesa)twheret.n=1

22.如图,如何将表A和表B合并成表C。记得sql有一个关键字可以实现,可怎么就是想不起来了。(不使用ISNULL()来设定固定值)

selectb.Cate_no,a.Size_no,a.Size_name,isnull(c.Qty,0)'Qty'from(selectdistinctCate_nofrom表B)bcrossjoin表Aaleftjoin表Bconb.Cate_no=c.Cate_noanda.Size_no=c.Size_no

23.题为:有两个表,t1,t2,Tablet1:

SELLER|NON_SELLER----------

ABACADBABCBDCACBCDDADBDC

Tablet2:

SELLER|COUPON|BAL-----------------------A9100B9200C9300D9400A9.5100B9.520A1080

要求用SELECT语句列出如下结果:

------如A的SUM(BAL)为B,C,D的和,B的SUM(BAL)为A,C,D的和.......且用的方法不要增加数据库负担,如用临时表等.

NON-SELLER|COUPON|SUM(BAL)---------------A9900B9800C9700D9600A9.520B9.5100C9.5120D9.5120A100B1080C1080D1080

SQL:未找到

***********************************************************************************

24.问题:

一百个账户各有100$,某个账户某天如有支出则添加一条新记录,记录其余额。一百天后,请输出每天所有账户的余额信息

这个问题的难点在于每个用户在某天可能有多条纪录,也可能一条纪录也没有(不包括第一天)

返回的记录集是一个100天*100个用户的纪录集

思路:

1.创建表并插入测试数据:我们要求username从1-100CREATETABLE[dbo].[TABLE2]([username][varchar](50)NOTNULL,--用户名[outdate][datetime]NOTNULL,--日期[cash][float]NOTNULL--余额)ON[PRIMARY

declare@iintset@i=1while@i<=100begininserttable2values(convert(varchar(50),@i),'2001-10-1',100)inserttable2values(convert(varchar(50),@i),'2001-11-1',50)set@i=@i+1endinserttable2values(convert(varchar(50),@i),'2001-10-1',90)

select*fromtable2orderbyoutdate,convert(int,username)

2.组合查询语句:a.我们必须返回一个从第一天开始到100天的纪录集:如:2001-10-1(这个日期是任意的)到2002-1-8由于第一天是任意一天,所以我们需要下面的SQL语句:selecttop100dateadd(d,convert(int,username)-1,min(outdate))asoutdatefromtable2groupbyusernameorderbyconvert(int,username)这里的奥妙在于:convert(int,username)-1(记得我们指定用户名从1-100:-))groupbyusername,min(outdate):第一天就可能每个用户有多个纪录。返回的结果:outdate------------------------------------------------------2001-10-0100:00:00.000.........2002-01-0800:00:00.000

b.返回一个所有用户名的纪录集:selectdistinctusernamefromtable2返回结果:username--------------------------------------------------110100......99

c.返回一个100天记录集和100个用户记录集的笛卡尔集合:select*from(selecttop100dateadd(d,convert(int,username)-1,min(outdate))asoutdatefromtable2groupbyusernameorderbyconvert(int,username)

)asACROSSjoin(selectdistinctusernamefromtable2)asBorderbyoutdate,convert(int,username)返回结果100*100条纪录:outdateusername2001-10-0100:00:00.0001......2002-01-0800:00:00.000100

d.返回当前所有用户在数据库的有的纪录:selectoutdate,username,min(cash)ascashfromtable2groupbyoutdate,username

orderbyoutdate,convert(int,username)返回纪录:outdateusernamecash2001-10-0100:00:00.000190......2002-01-0800:00:00.00010050

e.将c中返回的笛卡尔集和d中返回的纪录做leftjoin:selectC.outdate,C.username,D.cashfrom(select*from(selecttop100dateadd(d,convert(int,username)-1,min(outdate))asoutdatefromtable2groupbyusernameorderbyconvert(int,username))asACROSSjoin(selectdistinctusernamefromtable2)asB)asCleftjoin(selectoutdate,username,min(cash)ascashfromtable2groupbyoutdate,username)asDon(C.username=D.usernameanddatediff(d,C.outdate,D.outdate)=0)

orderbyC.outdate,convert(int,C.username)注意:用户在当天如果没有纪录,cash字段返回NULL,否则cash返回每个用户当天的余额outdateusernamecash2001-10-0100:00:00.0001902001-10-0100:00:00.0002100......2001-10-0200:00:00.000190

2001-10-0200:00:00.0002NULL<--注意这里......

2002-01-0800:00:00.00010050

f.好了,现在我们最后要做的就是,如果cash为NULL,我们要返回小于当前纪录日期的第一个用户余额(由于我们使用orderbycash,所以返回top1纪录即可,使用min应该也可以),这个余额即为当前的余额:caseisnull(D.cash,0)when0then(selecttop1cashfromtable2wheretable2.username=C.usernameanddatediff(d,C.outdate,table2.outdate)<0orderbytable2.cash)elseD.cashendascash

g.最后组合的完整语句就是selectC.outdate,C.username,caseisnull(D.cash,0)when0then(selecttop1cashfromtable2wheretable2.username=C.usernameanddatediff(d,C.outdate,table2.outdate)<0orderbytable2.cash)elseD.cashendascashfrom(select*from(selecttop100dateadd(d,convert(int,username)-1,min(outdate))asoutdatefromtable2groupbyusernameorderbyconvert(int,username))asACROSSjoin(selectdistinctusernamefromtable2)asB)asCleftjoin(selectoutdate,username,min(cash)ascashfromtable2groupbyoutdate,username)asDon(C.username=D.usernameanddatediff(d,C.outdate,D.outdate)=0)

orderbyC.outdate,convert(int,C.username)

返回结果:outdateusernamecash2001-10-0100:00:00.0001902001-10-0100:00:00.0002100......2002-01-0800:00:00.00010050

25.取出sql表中第31到40的记录(以自动增长ID为主键)

SQL1:selecttop10*fromtwhereidnotin(selecttop30idfromtorderbyid)ordebyid

SQL2:selecttop10*fromtwhereidin(selecttop40idfromtorderbyid)orderbyiddesc

26.有表a存储二叉树的节点,要用一条sql语句查出所有节点及节点所在的层.表ac1c2A----------1--------/\ABBC--------2AC//\BDDNE------3CE/\\DFFKI---4EIDKCN

所要得到的结果如下

jdcs---------A1B2C2D3N3E3F4K4I4有高手指导一下,我只能用pl/sql写出来,请教用一条sql语句的写法

SQL:selectc2,level+1lv

fromteststart

withc1='A'connectbyc1=priorc2

union

select'A',1fromdual

orderbylv;

C2LV------------A1B2C2D3E3N3F4I4K4

已选择9行。

27.表内容:2005-05-09胜2005-05-09胜2005-05-09负2005-05-09负2005-05-10胜2005-05-10负2005-05-10负

如果要生成下列结果,该如何写sql语句

日期胜负2005-05-09222005-05-1012

SQL1:selectrq,sum(casewhenshengfu='胜'then1else0end)'胜',sum(casewhenshengfu='负'then1else0end)'负'from#tmpgroupbyrq

SQL2:selectN.rq,N.勝,M.負from(selectrq,勝=count(*)from#tmpwhereshengfu='胜'groupbyrq)Ninnerjoin(selectrq,負=count(*)from#tmpwhereshengfu='负'groupbyrq)MonN.rq=M.rq

SQL3:selecta.col001,a.a1胜,b.b1负from(selectcol001,count(col001)a1fromtemp1wherecol002='胜'groupbycol001)a,(selectcol001,count(col001)b1fromtemp1wherecol002='负'groupbycol001)bwherea.col001=b.col001

28.表中有ABC三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

SQL:select(casewhena>bthenaelsebend),(casewhenb>cthenbeslecend)fromtable_name

SQL:select*fromtbwheredatediff(dd,SendTime,getdate())=0

30.一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。显示格式:语文数学英语及格优秀不及格

select(casewhen语文>=80then'优秀'when语文>=60then'及格'else'不及格')as语文,(casewhen数学>=80then'优秀'when数学>=60then'及格'else'不及格')as数学,(casewhen英语>=80then'优秀'when英语>=60then'及格'else'不及格')as英语,fromtable

31.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别

用户临时表:createtable#xx(IDint,IDValuesint)系统临时表:createtable##xx(IDint,IDValuesint)

区别:用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.当创建它的进程消失时这个临时表就自动删除.

全局临时表对整个SQLServer实例都可见,但是所有访问它的Session都消失的时候,它也自动删除

32.Sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。

它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQLServer的存储容量是可以扩大的.

SQLServer2000数据库有三种类型的文件:

主要数据文件主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是.mdf。

次要数据文件次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是.ndf。

日志文件日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是.ldf。

33.从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。如使用存储过程也可以。

table1

月份mon部门dep业绩yj-------------------------------一月份0110一月份0210一月份035二月份028二月份049三月份038

table2

部门dep部门名称dname--------------------------------01国内业务一部02国内业务二部03国内业务三部04国际业务部

table3(result)

部门dep一月份二月份三月份--------------------------------------0110nullnull02108null03null5804nullnull9

SQL1:selecta.部门名称dname,b.业绩yjas'一月份',c.业绩yjas'二月份',d.业绩yjas'三月份'fromtable1a,table2b,table2c,table2dwherea.部门dep=b.部门depandb.月份mon='一月份'anda.部门dep=c.部门depandc.月份mon='二月份'anda.部门dep=d.部门depandd.月份mon='三月份'and

SQL2:selecta.dep,sum(casewhenb.mon=1thenb.yjelse0end)as'一月份',sum(casewhenb.mon=2thenb.yjelse0end)as'二月份',sum(casewhenb.mon=3thenb.yjelse0end)as'三月份',sum(casewhenb.mon=4thenb.yjelse0end)as'四月份',sum(casewhenb.mon=5thenb.yjelse0end)as'五月份',sum(casewhenb.mon=6thenb.yjelse0end)as'六月份',sum(casewhenb.mon=7thenb.yjelse0end)as'七月份',sum(casewhenb.mon=8thenb.yjelse0end)as'八月份',sum(casewhenb.mon=9thenb.yjelse0end)as'九月份',sum(casewhenb.mon=10thenb.yjelse0end)as'十月份',sum(casewhenb.mon=11thenb.yjelse0end)as'十一月份',sum(casewhenb.mon=12thenb.yjelse0end)as'十二月份',fromtable2aleftjointable1bona.dep=b.dep

34.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

selectid,Count(*)fromtbgroupbyidhavingcount(*)>1select*from(selectcount(ID)ascountfromtablegroupbyID)TwhereT.count>1

35.drop,delete,truncate区别drop隐式提交,不能回滚,删除表结构及所有从数据,将表所占空间全部释放。删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。delete逐行删除,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作。truncate删除所有数据,TRUNCATE不记录日志,表结构及其列、约束、索引等保持不变。

36.select1,count(1)两个用法?select1fromtable增加临时列,每行的列值是写在select后的数,这条sql语句中是1count(1)表的行数

37.exists介绍1.子查询与外表的字段有关系时select字段1,字段2from表1whereexists(select字段1,字段2from表2where表2.字段2=表1.字段2)这时候,此SQL语句相当于一个关联查询。它先执行表1的查询,然后把表1中的每一条记录放到表2的条件中去查询,如果存在,则显示此条记录2.子查询与外表的字段没有任何关联Select字段1,字段2from表1whereexists(select*from表2where表2.字段=‘条件‘)在这种情况下,只要子查询的条件成立,就会查询出表1中的所有记录,反之,如果子查询中没有查询到记录,则表1不会查询出任何的记录。当子查询与主表不存在关联关系时,简单认为只要exists为一个条件判断,如果为true,就输出所有记录。如果为false则不输出任何的记录。

38.exists与in区别?in是在内存里遍历比较,而exists需要查询数据库,所以当B表数据量较大时,exists效率优于in。exists()会执行A.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是其内查询语句的结果集空或者非空,空则返回false,非空则返回true。外表大,用IN;内表大,用EXISTSnotin和notexists如果查询语句使用了notin那么内外表都进行全表扫描,没有用到索引;而notextsts的子查询依然能用到表上的索引。所以无论那个表大,用notexists都比notin要快。

39.on与where区别?on条件是在生成临时表时使用的条件where条件是在临时表生成好后,再对临时表进行过滤的条件on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。

41.优化修改删除语句如果你同时修改或删除过多数据,会造成cpu利用率过高从而影响别人对数据库的访问。

42.根据如下三张表查询

S(SNO,SNAME)学生关系。SNO为学号,SNAME为姓名C(CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师SC(SNO,CNO,SCGRADE)选课关系。SCGRADE为成绩

1).找出没有选修过“李明”老师讲授课程的所有学生姓名

SelectSNAMEFROMSWhereNOTEXISTS(Select*FROMSC,CWhereSC.CNO=C.CNOANDCNAME='李明'ANDSC.SNO=S.SNO)

2).列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

SelectS.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)FROMS,SC,(SelectSNOFROMSCWhereSCGRADE<60GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)>=2)AWhereS.SNO=A.SNOANDSC.SNO=A.SNOGROUPBYS.SNO,S.SNAME

3).列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

SelectS.SNO,S.SNAMEFROMS,(SelectSC.SNOFROMSC,CWhereSC.CNO=C.CNOANDC.CNAMEIN('1','2')GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)=2)SCWhereS.SNO=SC.SNO

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

SelectS.SNO,S.SNAMEFROMS,(SelectSC1.SNOFROMSCSC1,CC1,SCSC2,CC2WhereSC1.CNO=C1.CNOANDC1.NAME='1'ANDSC2.CNO=C2.CNOANDC2.NAME='2'ANDSC1.SCGRADE>SC2.SCGRADE)SCWhereS.SNO=SC.SNO

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

SelectS.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]FROMS,(SelectSC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADEFROMSCSC1,CC1,SCSC2,CC2WhereSC1.CNO=C1.CNOANDC1.NAME='1'ANDSC2.CNO=C2.CNOANDC2.NAME='2'ANDSC1.SCGRADE>SC2.SCGRADE)SCWhereS.SNO=SC.SNO

6).求其中同一个号码的两次通话之间间隔大于10秒的通话记录ID

selectsum(销售金额),datename(week,销售日期-1)fromsaleswhere销售日期betweebegindateandenddategroupbydatename(week,销售日期-1)

8).使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名

selects#,snfromswhereS#in(selectS#fromc,scwherec.c#=sc.c#andcn=’税收基础’)

9).使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位

selectsn,sdfroms,scwheres.s#=sc.s#andsc.c#=’c2’

10).使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位

selectsn,sdfromswheres#notin(selects#fromscwherec#=’c5’)

11).查询选修了课程的学员人数

select学员人数=count(distincts#)fromsc

12).查询选修课程超过5门的学员学号和所属单位

selectsn,sdfromswheres#in(selects#fromscgroupbys#havingcount(distinctc#)>5)

13).查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列

selecttop10*fromAwhereID>(selectmax(ID)from(selecttop30IDfromAorderbyA)T)orderbyA

14).查询表A中存在ID重复三次以上的记录

SELECT*fromAWHEREIDin(selectIDfromAgroupbyIDhavingCOUNT(ID)>3)

43.testtable1和testtable2表联合查询testtable1:iddepartment1设计2市场3售后

testtable2:iddptIDname11张三21李四32王五43彭六54陈七

iddptIDdepartmentname11设计张三21设计李四32市场王五43售后彭六54黑人陈七

SELECTtesttable2.*,ISNULL(department,'黑人')FROMtesttable1rightjointesttable2ontesttable2.dptID=testtable1.ID

44.有表A,结构如下:A:p_IDp_Nums_id11001112022801311013803其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为:p_IDs1_ids2_ids3_id110120280031108其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

selectp_id,sum(casewhens_id=1thenp_numelse0end)ass1_id,sum(casewhens_id=2thenp_numelse0end)ass2_id,sum(casewhens_id=3thenp_numelse0end)ass3_idfrommyProgroupbyp_id

1.在cpxs数据库的产品表中增加”产品简介“列,之后在删除该列。

ALTERTABLE[dbo].[product]ADD[产品简介]textALTERTABLE[dbo].[product]DROPCOLUMN[产品简介]2.将产品数据库的产品表中每种商品的价格打8UPDATE[dbo].[product]SET[价格]=[价格]*0.83.将产品数据库的产品表中价格打8折后低于50元的商品删除DELETE[dbo].[product]WHERE[价格]<504.查找价格在2000~2900元之间的商品名。SELECT[产品名称]FROM[dbo].[product]WHERE[价格]BETWEEN2000AND29005.计算所有商品的总价格。

SELECTSUM([价格]*[库存量])FROM[dbo].[product]6.在产品销售数据库上创建电冰箱产品表的视图bxcp。

CREATEVIEW[dbo].[bxcp]ASSELECTdbo.product.*FROMdbo.productWHERE[产品名称]='电冰箱'7.在bxcp视图中查询库存量在100台以下的产品编号。SELECT*FROM[dbo].[bxcp]WHERE[库存量]<1008.使用EXISTS关键字引入的子查询与使用IN关键字引入的子查询在语法上有哪些不同?//EXISTS方式SELECT*FROMAWHEREEXISTS(SELECT*FROMBWHEREB.id=A.uid);//in方式SELECT*FROMAWHEREidIN(SELECTidFROMB);46.删除姓名、年龄重复的记录Idnameagesalary

1yzk801000

2yzk802000

3tom2020000

4tom2020000

5im2020000

//取得不重复的数据

select*fromPersonswhereIdin(SELECTMAX(Id)ASExpr1FROMPersonsGROUPBYName,Age)

根据姓名、年龄分组,取出每组的Id最大值,然后将Id最大值之外的排除。

删除重复的数据:

deletefromPersonswhereIdnotin(SELECTMAX(Id)ASExpr1FROMPersonsGROUPBYName,Age)

题目:

条件查询:

1、在GRADE表中查找80-90份的学生学号和分数

select学号,分数fromgradewhere分数between80and90

2、在GRADE表中查找课程编号为003学生的平均分

selectavg(分数)fromgradewhere课程编号='003'

3、在GRADE表中查询学习各门课程的人数

select课程编号,count(学号)as人数fromgradegroupby课程编号

4、查询所有姓张的学生的学号和姓名

select姓名,学号fromstudent_infowhere姓名like'张%'

嵌套查询:

1、查询和学号’0001’的这位同学性别相同的所有同学的姓名和出生年月

select姓名,出生年月fromstudent_infowhere性别in(select性别fromstudent_infowheresno='0001')

2、查询所有选修课程编号为0002和0003的学生的学号、姓名和性别

select学号,姓名,性别fromstudent_infowhere学号in(select学号fromgradewhere课程编号='0002'and学号in(select学号fromgradewhere课程编号='0001'))

3、查询出学号为0001的学生的分数比0002号学生最低分高的课程编号的课程编号和分数

select课程编号,分数fromgradewhere学号='0001'and分数>(selectmin(分数)fromgradewhere学号='0002')

多表查询:

1、查询分数在80-90分的学生的学号、姓名、分数

selectstudent_info.学号,student_info.姓名,grade.分数fromstudent_info,gradewheregrade.分数between80and90

2、查询学习了’C语言’课程的学生学号、姓名和分数

selectstudent_info.学号,student_info.姓名,grade.成绩fromstudent_info,grade,curriculumwherestudent_info.学号=grade.学号andgrade.课程号=curriculum.课程号andcurriculum.课程名='C语言'

3、查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选课的学生总成绩为空。

selectgrade.学号,student_info.姓名,sum(grade.成绩)as总成绩fromstudent_info,gradewheregrade.学号=student_info.学号groupbygrade.学号,student_info.姓名

48.本题用到下面三个关系表:

CARD借书卡:(CNO卡号,NAME姓名,CLASS班级)

BOOKS图书:(BNO书号,BNAME书名,AUTHOR作者,PRICE单价,QUANTITY库存册数)

BORROW借书记录:(CNO借书卡号,BNO书号,RDATE还书日期

备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。

1、要求实现如下处理:

写出自定义函数,要求输入借书卡号能得到该卡号所借书金额的总和:

CREATEFUNCTIONgetSUM

@CNOint

)

RETURNSint

AS

BEGIN

declare@sumint

select@sum=sum(price)fromBOOKSwherebnoin(selectbnofromBORROWwherecno=@CNO)

return@sum

END

GO

2、找出借书超过5本的读者,输出借书卡号及所借图书册数。

selectCNO,count(BNO)as借书数量fromBORROWgroupbyCNOhavingcount(BNO)>3

3、查询借阅了"水浒"一书的读者,输出姓名及班级。

selectname,classfromcardwherecnoin(selectcnofromborrowwherebnoin(selectbnofromBOOKSwherebname='水浒'))

4、查询过期未还图书,输出借阅者(卡号)、书号及还书日期。

selectCNO,BNO,RDATEfromborrowwheregetdate()>RDATE

5、查询书名包括"网络"关键词的图书,输出书号、书名、作者。

selectbno,bname,authorfrombookswherebnamelike'网络%'

6、查询现有图书中价格最高的图书,输出书名及作者。

selectbname,authorfrombookswherepricein(selectmax(price)frombooks)

7、查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。

selectcnofromborrowwherebnoin(selectbnofrombookswherebname='计算方法')andcnonotin(selectcnofromborrowwherebnoin(selectbnofrombookswherebname='计算方法习题集'))orderbycnodesc

SELECTa.CNO

FROMBORROWa,BOOKSb

WHEREa.BNO=b.BNOANDb.BNAME=N'计算方法'

ANDNOTEXISTS(

SELECT*FROMBORROWaa,BOOKSbb

WHEREaa.BNO=bb.BNO

ANDbb.BNAME=N'计算方法习题集'

ANDaa.CNO=a.CNO)

ORDERBYa.CNODESC

8、将"C01"班同学所借图书的还期都延长一周。

updateborrowsetrdate=dateadd(day,7,rdate)fromBORROWwherecnoin(selectcnofromcardwhereclass='一班')

9、从BOOKS表中删除当前无人借阅的图书记录。

DELETEAFROMBOOKSa

WHERENOTEXISTS(

SELECT*FROMBORROW

WHEREBNO=a.BNO)

10、如果经常按书名查询图书信息,请建立合适的索引。

CREATECLUSTEREDINDEXIDX_BOOKS_BNAMEONBOOKS(BNAME)

11、在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)

CREATETRIGGERTR_SAVEONBORROW

FORINSERT,UPDATE

IF@@ROWCOUNT>0

INSERTBORROW_SAVESELECTi.*

FROMINSERTEDi,BOOKSb

WHEREi.BNO=b.BNO

ANDb.BNAME=N'数据库技术及应用'

12、建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。

CREATEVIEWV_VIEW

selectname,bname

frombooks,card,borrow

whereborrow.cno=card.cnoandborrow.bno=books.bnoandclass='一班'

13、查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。

selecta.cnofromborrowa,borrowb

wherea.cno=b.cnoand

a.bnoin(selectbnofrombookswherebname='计算方法')and

b.bnoin(selectbnofrombookswherebname='组合数学')

orderbya.cnoasc

WHEREa.BNO=b.BNO

ANDb.BNAMEIN('计算方法','组合数学')

GROUPBYa.CNO

HAVINGCOUNT(*)=2

ORDERBYa.CNOasc

14、用事务实现如下功能:一个借书卡号借走某书号的书,则该书的库存量减少1,当某书的库存量不够1本的时候,该卡号不能借该书

alterPROCEDUREpro_jieshu

@cnoint,

@bnoint,

@datedatetime

begintran

declare@quantityint

select@quantity=quantityfrombookswherebno=@bno

insertintoborrowvalues(@cno,@bno,@date)

updatebookssetquantity=@quantity-1wherebno=@bno

if(@quantity>0)

begin

committran

end

else

print'已无库存'

rollback

Student(S#,Sname,Sage,Ssex)学生表

Course(C#,Cname,T#)课程表

SC(S#,C#,score)成绩表

Teacher(T#,Tname)教师表

1)查询“001”课程比“002”课程成绩高的所有学生的学号;

selecta.S#from(selects#,scorefromSCwhereC#='001')a,(selects#,score

fromSCwhereC#='002')b

wherea.score>b.scoreanda.s#=b.s#;

2)查询平均成绩大于60分的同学的学号和平均成绩;

selectS#,avg(score)fromscgroupbyS#havingavg(score)>60;

3)查询所有同学的学号、姓名、选课数、总成绩;

selectStudent.S#,Student.Sname,count(SC.C#),sum(score)fromStudentleftOuterjoinSConStudent.S#=SC.S#groupbyStudent.S#,Sname

4)查询姓“李”的老师的个数;

selectcount(distinct(Tname))fromTeacherwhereTnamelike'李%';

5)查询没学过“叶平”老师课的同学的学号、姓名;

selectStudent.S#,Student.SnamefromStudent

whereS#notin(selectdistinct(SC.S#)fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname='叶平');

6)查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

selectStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=SC.S#andSC.C#='001'andexists(Select*fromSCasSC_2whereSC_2.S#=SC.S#andSC_2.C#='002');

7)查询学过“叶平”老师所教的所有课的同学的学号、姓名;

selectS#,SnamefromStudentwhereS#in(selectS#fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname='叶平'

groupbyS#havingcount(SC.C#)=(selectcount(C#)fromCourse,TeacherwhereTeacher.T#=Course.T#andTname='叶平'));

8)查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

SelectS#,Snamefrom(selectStudent.S#,Student.Sname,score,(selectscorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#='002')score2

fromStudent,SCwhereStudent.S#=SC.S#andC#='001')S_2wherescore2

9)查询所有课程成绩小于60分的同学的学号、姓名;

selectS#,SnamefromStudentwhereS#notin(selectStudent.S#fromStudent,SCwhereS.S#=SC.S#andscore>60);

10)查询没有学全所有课的同学的学号、姓名;

selectStudent.S#,Student.SnamefromStudent,SC

whereStudent.S#=SC.S#groupbyStudent.S#,Student.Snamehavingcount(C#)<(selectcount(C#)fromCourse);

11)查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

selectS#,SnamefromStudent,SCwhereStudent.S#=SC.S#andC#inselectC#fromSCwhereS#='1001';

12)查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;

selectdistinctSC.S#,SnamefromStudent,SCwhereStudent.S#=SC.S#andC#in(selectC#fromSCwhereS#='001');

13)把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

updateSCsetscore=(selectavg(SC_2.score)fromSCSC_2whereSC_2.C#=SC.C#)fromCourse,TeacherwhereCourse.C#=SC.C#andCourse.T#=Teacher.T#andTeacher.Tname='叶平');

14)查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;

selectS#fromSCwhereC#in(selectC#fromSCwhereS#='1002')

groupbyS#havingcount(*)=(selectcount(*)fromSCwhereS#='1002');

15)删除学习“叶平”老师课的SC表记录;

DeleteSCfromcourse,Teacher

whereCourse.C#=SC.C#andCourse.T#=Teacher.T#andTname='叶平';

16)向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;

InsertSCselectS#,'002',(Selectavg(score)

fromSCwhereC#='002')fromStudentwhereS#notin(SelectS#fromSCwhereC#='002');

17)按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

SELECTS#as学生ID

,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='004')AS数据库

,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='001')AS企业管理

,(SELECTscoreFROMSCWHERESC.S#=t.S#ANDC#='006')AS英语

,COUNT(*)AS有效课程数,AVG(t.score)AS平均成绩

FROMSCASt

GROUPBYS#

ORDERBYavg(t.score)

18)查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

SELECTL.C#As课程ID,L.scoreAS最高分,R.scoreAS最低分

FROMSCL,SCASR

WHEREL.C#=R.C#and

L.score=(SELECTMAX(IL.score)

FROMSCASIL,StudentASIM

WHEREL.C#=IL.C#andIM.S#=IL.S#

GROUPBYIL.C#)

AND

R.Score=(SELECTMIN(IR.score)

FROMSCASIR

WHERER.C#=IR.C#

GROUPBYIR.C#

);

19)按各科平均成绩从低到高和及格率的百分数从高到低顺序

SELECTt.C#AS课程号,max(course.Cname)AS课程名,isnull(AVG(score),0)AS平均成绩

,100*SUM(CASEWHENisnull(score,0)>=60THEN1ELSE0END)/COUNT(*)AS及格百分数

FROMSCT,Course

wheret.C#=course.C#

GROUPBYt.C#

ORDERBY100*SUM(CASEWHENisnull(score,0)>=60THEN1ELSE0END)/COUNT(*)DESC

20)查询如下课程平均成绩和及格率的百分数(用"1行"显示):企业管理(001),马克(002),OO&UML(003),数据库(004)

SELECTSUM(CASEWHENC#='001'THENscoreELSE0END)/SUM(CASEC#WHEN'001'THEN1ELSE0END)AS企业管理平均分

,100*SUM(CASEWHENC#='001'ANDscore>=60THEN1ELSE0END)/SUM(CASEWHENC#='001'THEN1ELSE0END)AS企业管理及格百分数

,SUM(CASEWHENC#='002'THENscoreELSE0END)/SUM(CASEC#WHEN'002'THEN1ELSE0END)AS马克思平均分

,100*SUM(CASEWHENC#='002'ANDscore>=60THEN1ELSE0END)/SUM(CASEWHENC#='002'THEN1ELSE0END)AS马克思及格百分数

,SUM(CASEWHENC#='003'THENscoreELSE0END)/SUM(CASEC#WHEN'003'THEN1ELSE0END)ASUML平均分

,100*SUM(CASEWHENC#='003'ANDscore>=60THEN1ELSE0END)/SUM(CASEWHENC#='003'THEN1ELSE0END)ASUML及格百分数

,SUM(CASEWHENC#='004'THENscoreELSE0END)/SUM(CASEC#WHEN'004'THEN1ELSE0END)AS数据库平均分

,100*SUM(CASEWHENC#='004'ANDscore>=60THEN1ELSE0END)/SUM(CASEWHENC#='004'THEN1ELSE0END)AS数据库及格百分数

FROMSC

21)查询不同老师所教不同课程平均分从高到低显示

SELECTmax(Z.T#)AS教师ID,MAX(Z.Tname)AS教师姓名,C.C#AS课程ID,MAX(C.Cname)AS课程名称,AVG(Score)AS平均成绩

FROMSCAST,CourseASC,TeacherASZ

whereT.C#=C.C#andC.T#=Z.T#

GROUPBYC.C#

ORDERBYAVG(Score)DESC

22)查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML(003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

SELECTDISTINCTtop3

SC.S#As学生学号,

Student.SnameAS学生姓名

T1.scoreAS企业管理,

T2.scoreAS马克思,

T3.scoreASUML,

T4.scoreAS数据库,

ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)as总分

FROMStudent,SCLEFTJOINSCAST1

ONSC.S#=T1.S#ANDT1.C#='001'

LEFTJOINSCAST2

ONSC.S#=T2.S#ANDT2.C#='002'

LEFTJOINSCAST3

ONSC.S#=T3.S#ANDT3.C#='003'

LEFTJOINSCAST4

ONSC.S#=T4.S#ANDT4.C#='004'

WHEREstudent.S#=SC.S#and

ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)

NOTIN

(SELECT

DISTINCT

TOP15WITHTIES

FROMsc

LEFTJOINscAST1

ONsc.S#=T1.S#ANDT1.C#='k1'

LEFTJOINscAST2

ONsc.S#=T2.S#ANDT2.C#='k2'

LEFTJOINscAST3

ONsc.S#=T3.S#ANDT3.C#='k3'

LEFTJOINscAST4

ONsc.S#=T4.S#ANDT4.C#='k4'

ORDERBYISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)DESC);

23)统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[<60]

SELECTSC.C#as课程ID,Cnameas课程名称

,SUM(CASEWHENscoreBETWEEN85AND100THEN1ELSE0END)AS[100-85]

,SUM(CASEWHENscoreBETWEEN70AND85THEN1ELSE0END)AS[85-70]

,SUM(CASEWHENscoreBETWEEN60AND70THEN1ELSE0END)AS[70-60]

,SUM(CASEWHENscore<60THEN1ELSE0END)AS[60-]

FROMSC,Course

whereSC.C#=Course.C#

GROUPBYSC.C#,Cname;

24)查询学生平均成绩及其名次

SELECT1+(SELECTCOUNT(distinct平均成绩)

FROM(SELECTS#,AVG(score)AS平均成绩

)AST1

WHERE平均成绩>T2.平均成绩)as名次,

S#as学生学号,平均成绩

FROM(SELECTS#,AVG(score)平均成绩

)AST2

ORDERBY平均成绩desc;

25)查询各科成绩前三名的记录:(不考虑成绩并列情况)

SELECTt1.S#as学生ID,t1.C#as课程ID,Scoreas分数

FROMSCt1

WHEREscoreIN(SELECTTOP3score

WHEREt1.C#=C#

ORDERBYscoreDESC

ORDERBYt1.C#;

26)查询每门课程被选修的学生数

selectc#,count(S#)fromscgroupbyC#;

27)查询出只选修了一门课程的全部学生的学号和姓名

selectSC.S#,Student.Sname,count(C#)AS选课数

fromSC,Student

whereSC.S#=Student.S#groupbySC.S#,Student.Snamehavingcount(C#)=1;

28)查询男生、女生人数

Selectcount(Ssex)as男生人数fromStudentgroupbySsexhavingSsex='男';

Selectcount(Ssex)as女生人数fromStudentgroupbySsexhavingSsex='女';

29)查询姓“张”的学生名单

SELECTSnameFROMStudentWHERESnamelike'张%';

查30)询同名同性学生名单,并统计同名人数

selectSname,count(*)fromStudentgroupbySnamehavingcount(*)>1;

32)1981年出生的学生名单(注:Student表中Sage列的类型是datetime)

selectSname,CONVERT(char(11),DATEPART(year,Sage))asage

fromstudent

whereCONVERT(char(11),DATEPART(year,Sage))='1981';

32)查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

SelectC#,Avg(score)fromSCgroupbyC#orderbyAvg(score),C#DESC;

33)查询平均成绩大于85的所有学生的学号、姓名和平均成绩

selectSname,SC.S#,avg(score)

fromStudent,SC

whereStudent.S#=SC.S#groupbySC.S#,Snamehavingavg(score)>85;

34)查询课程名称为“数据库”,且分数低于60的学生姓名和分数

SelectSname,isnull(score,0)

fromStudent,SC,Course

whereSC.S#=Student.S#andSC.C#=Course.C#andCourse.Cname='数据库'andscore<60;

35)查询所有学生的选课情况;

SELECTSC.S#,SC.C#,Sname,Cname

FROMSC,Student,Course

whereSC.S#=Student.S#andSC.C#=Course.C#;

36)查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

SELECTdistinctstudent.S#,student.Sname,SC.C#,SC.score

FROMstudent,Sc

WHERESC.score>=70ANDSC.S#=student.S#;

37)查询不及格的课程,并按课程号从大到小排列

selectc#fromscwherescore<60orderbyC#;

38)查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

selectSC.S#,Student.SnamefromSC,StudentwhereSC.S#=Student.S#andScore>80andC#='003';

39)求选了课程的学生人数

selectcount(*)fromsc;

40)查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

selectStudent.Sname,scorefromStudent,SC,CourseC,Teacher

whereStudent.S#=SC.S#andSC.C#=C.C#andC.T#=Teacher.T#andTeacher.Tname='叶平'andSC.score=(selectmax(score)fromSCwhereC#=C.C#);

41)查询各个课程及相应的选修人数

selectcount(*)fromscgroupbyC#;

42)查询不同课程成绩相同的学生的学号、课程号、学生成绩

selectdistinctA.S#,B.scorefromSCA,SCBwhereA.Score=B.ScoreandA.C#<>B.C#;

43)查询每门功成绩最好的前两名

WHEREscoreIN(SELECTTOP2score

44)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

selectC#as课程号,count(*)as人数

fromsc

groupbyC#

orderbycount(*)desc,c#

45)检索至少选修两门课程的学生学号

selectS#

groupbys#

havingcount(*)>=2

46)查询全部学生都选修的课程的课程号和课程名

selectC#,Cname

fromCourse

whereC#in(selectc#fromscgroupbyc#)

47)查询没学过“叶平”老师讲授的任一门课程的学生姓名

selectSnamefromStudentwhereS#notin(selectS#fromCourse,Teacher,SCwhereCourse.T#=Teacher.T#andSC.C#=course.C#andTname='叶平');

48)查询两门以上不及格课程的同学的学号及其平均成绩

selectS#,avg(isnull(score,0))fromSCwhereS#in(selectS#fromSCwherescore<60groupbyS#havingcount(*)>2)groupbyS#;

49)检索“004”课程分数小于60,按分数降序排列的同学学号

selectS#fromSCwhereC#='004'andscore<60orderbyscoredesc;

THE END
1.平湖0平湖素质类精品课程秒杀 只需9.9元起抢最高8课时/门 平湖23家机构任选! 赶紧冲吧! 1 国锋练字 29.9元 6课时硬笔书法体验课 报名对象: 幼儿园大班及以上(只限新生) 2 优途体育 19.9元 4课时篮球课 19.9元 4课时体适能课 报课抵用券: 报50次卡可抵扣400元 https://www.163.com/dy/article/JJSGGMHS0514BE54.html
2.50元一次!“上夜校”在武汉年轻人中走红,负责人:大多35岁以下2024-07-23 17:02:4300:460来自湖北省 九派新闻 只提供最有价值的信息https://pit.ifeng.com/c/8bSFpLwHLZG
3.「全球说」用户对音频外语学习课程付费意愿问卷调查历史项目您是否愿意为全球说上,不同国家的课程开发者制作的优质音频主题课程付费? 不愿意,希望所有课程都免费 若价格合理,愿意支付合理费用鼓励老师制作更多优质课程 若主题课程能帮您解决实际学习问题,您愿意为这个主题课程支付的费用是多少? 10元以下 10-50元 50-100元 100-200元 200元以上 您愿意为哪类https://www.wenjuan.com/m/j/6ZJ7ni/
4.或者50人以上100人以下重伤,或者5000万元以上一亿元以下直接造成10人以上30人以下死亡,或者50人以上100人以下重伤,或者5000万元以上一亿元以下直接财产损失的火灾属于由湖北事业单位考试网提供同步湖北人事考试网。更多关于事业单位考试真题,教师招聘考试试题,事业单位试题,湖北事业单位常识试题的内容,请关注湖北事业单位考试频道/湖北人事考试网!咨询电话:027-87870401。湖北事业单位考https://hb.huatu.com/changshi/1647050.html
5.青年志愿者志愿服务活动调查问卷(精选14篇)(二)具有以下情形之一的,罚款50元: 1、带头闯红灯的; 2、曾因闯红灯被处罚过1次的; 3、交通高峰期间(工作日上午7-9时、下午17-19时)闯红灯的。 (三)除上述 (一)、(二)情形外,处罚款20元。 (四)违法行为人自愿协助维护交通秩序的,执勤交警可以免除其罚款处罚;对上述 https://www.360wenmi.com/f/filey47k71yr.html
6.50元4节课,百特英语价值1000元中外课程等你来领取!50元体验980元精品课程 (1次外教口语课程+3次中教辅导课程) 报名即赠超值学习大礼包 (精品书包+精美水杯+精美笔袋) 咨询热线: 0779-203355313978879856 校址: 广西北海市北海大道136号明丽金楼C403 咨询微信 中外教结合的授课模式 让孩子100%完全浸泡于地道英文环境当中 https://m.beihai365.com/wap/thread/view-thread/tid/11996608
7.创新创业创意计划书6篇(全文)7、您一般愿意在农家乐人均一次性消费 A、50元以下 B、50~80元 C、80~110元 D、110~140元 E、140~170元 F、170~200元 G、200元以上 8、您到农家乐主要目的是 A、游览观光 B、休闲度假 C、娱乐 D、逃避城市生活 E、其他 9、您来农家乐的时间一般会选择在 A、平常日 B、周末 https://www.99xueshu.com/w/file7oat6dne.html
8.双11,我们盘点了那些单价不超过50元的在线英语课程。今天我们就来看看50元以下有哪些好物! 10-20元: ABC360: 课程基本信息: ABC360专注于菲律宾语教学。 这是一对一的课程,适合广泛的人群。 4-16岁任何人都可以学习。 课程时间也比其他在线英语机构更短:0.5节课时间,17分钟。 孩子可以选择参加0.5课时或1课时。 灵活性比较高。 https://zh.acadsoc.com/post/1259.html
9.老师工资绩效方案(通用8篇)1.师德表现:(50元)按国家教委颁发的《教师职业道德规范》安排考评;学期内出现以下情况之一者,本项不得分: 1.违法乱纪,违反园规园纪,不遵守社会公德,有损幼儿园名誉;10分 2.体罚、变相体罚(罚站、罚吃、罚睡、推拉、打骂、讽刺、挖苦、起绰号)扣5分,情节严重的做出书面检查。 https://www.ruiwen.com/gongzifangan/6290828.html
10.如何进行企业制度管理(精选11篇)六、奖励条件(凡符合以下条件,可获得50―1000元奖金) 1、对改进企业管理,提高服务质量有重大贡献者; 2、工作态度好,为企业创造良好声誉者(可定月或不定月评选); 3、如有重大事故发生,及时采取有效措施者; 4、有合理化建议提出,经采纳实施有成效者; https://www.jy135.com/guanli/146003.html
11.有志从事证券保险行业的你看准啦!广东金融高新区这些企业虚位以待3、电脑操作熟练,反应敏捷,打字速度50字/分钟以上 4、有较强的抗压能力,能接受轮班轮休工作制(每天工作7-8小时,月休6-8天) 薪酬福利: 1、保底工资+绩效奖金+补贴+年终奖+其他奖金补贴…… 2、试用期2700-3300/月,转正稳定后税前均薪4500元/月以上,服务质量佳、工作效率高者可达9000元/月 https://www.thepaper.cn/newsDetail_forward_6322814
12.户外拓展活动方案(精选16篇)为有力保证事情或工作开展的水平质量,时常需要预先制定一份周密的方案,方案是有很强可操作性的书面计划。怎样写方案才更能起到其作用呢?以下是小编整理的户外拓展活动方案,欢迎阅读,希望大家能够喜欢。 户外拓展活动方案 1 第一阶段:胜兵先胜而后求战 1. 明https://www.unjs.com/huodongfangan/202303/6591433.html
13.头条文章▼以下为金融监管研究院推荐课程▼ 『上海』跨境业务全体系研修班——线下课程来啦!——点击下方图片扫码了解更多课程详细内容~ 课程大纲 专题一、跨境人民币全体系(一天) 一、 人民币国际化发展现状 1.1 支付、贸易融资的市场份额 1.2 人民币跨境交易的主要地域 https://m.weibo.cn/ttarticle/p/show?id=2309404912858038403162
14.2023凯妈教基章节刷题题库课请大家在购买之前仔细阅读以下问题呦! 1.学员问:怎么购买课程,在哪个软件上课?购买可以直接点击凯妈朋友圈呈现的app链接进行购买我们统一在CCTALK APP上课,有回放且可以倍速。已购买防盗版功能,在授课的全过程中严厉打击盗版! 2.学员问:课程形式?每周末会制定好下周课程表。课程表中包括做题周计划+简答题背诵计划+https://www.cctalk.com/m/group/90546019
15.江西省2022年引进高层次和急需紧缺人才岗位表(高校类)11 江西中医药大学 高校 高层次人才 教育 科研岗 博士 80 医学、理学、工学相关专业;年龄一般在50周岁以下。 引进待遇30-65万不等,按规定享受国家基本工资、学校绩效工资,博士津贴500元/月(发3年),提供1年公租房一间免费使用,或发放租房补贴1200元/月(发1年);享受学校相应奖励及附属三甲医院提供的优质医疗保障http://www.sdsgwy.com/article/html/4502191.html
16.小学奖励性绩效工资分配方案(精选11篇)(1)月随机质量调研(30元、20元、10元)。 (2)学期质量调研(60元、40元、20元)。 (3)全市质量调研(平均分高出全市平均分3分以内每分奖50元,3分以上超过部分每分奖100元)。 (4)设立进步奖(每学期结束对照期初调研情况和学期每次调研情况,以平均分、培优补差的进步表现予以100元-200元的奖励)(具体见《https://mip.wenshubang.com/fangan/2774070.html
17.可行性方案(精选15篇)凡病假每天扣款10元,病假必须由本人提供有效证明,否则作事假处理;一月内迟到、早退或中途外出(早退、中途外出要履行请假手续),每累计4次折算事假半天,每月事假1天扣款10元,累计2天以上(含2天)每天扣款20元;旷课每节扣50元;旷工每天扣100元。病假满半个月的取消当月奖励性绩效工资,事假每月累计超过7天的,取消当月https://www.oh100.com/a/202211/5541058.html