1.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。)selecttop10*fromAwhereidnotin(selecttop30idfromA)解2:selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)
2.写sql语句实现下列查询(表)tab(列)121314212231415352查询结果要求ab1221314152
(二)
Student(S#,Sname,Sage,Ssex)学生表Course(C#,Cname,T#)课程表SC(S#,C#,score)成绩表Teacher(T#,Tname)教师表
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,CoursewhereSC.C#=Course.C#GROUPBYSC.C#,Cname;
(三)
1.写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束--实现代码:CREATETABLEBORROW(CNOintFOREIGNKEYREFERENCESCARD(CNO),BNOintFOREIGNKEYREFERENCESBOOKS(BNO),RDATEdatetime,PRIMARYKEY(CNO,BNO))
2.找出借书超过5本的读者,输出借书卡号及所借图书册数--实现代码:SELECTCNO,借图书册数=COUNT(*)FROMBORROWGROUPBYCNOHAVINGCOUNT(*)>5
3.查询借阅了"水浒"一书的读者,输出姓名及班级--实现代码:SELECT*FROMCARDcWHEREEXISTS(SELECT*FROMBORROWa,BOOKSbWHEREa.BNO=b.BNOANDb.BNAME=N'水浒'ANDa.CNO=c.CNO)
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期--实现代码:SELECT*FROMBORROWWHERERDATE 5.查询书名包括"网络"关键词的图书,输出书号、书名、作者--实现代码:SELECTBNO,BNAME,AUTHORFROMBOOKSWHEREBNAMELIKEN'%网络%' 6.查询现有图书中价格最高的图书,输出书名及作者--实现代码:SELECTBNO,BNAME,AUTHORFROMBOOKSWHEREPRICE=(SELECTMAX(PRICE)FROMBOOKS) 7.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出--实现代码:SELECTa.CNOFROMBORROWa,BOOKSbWHEREa.BNO=b.BNOANDb.BNAME=N'计算方法'ANDNOTEXISTS(SELECT*FROMBORROWaa,BOOKSbbWHEREaa.BNO=bb.BNOANDbb.BNAME=N'计算方法习题集'ANDaa.CNO=a.CNO)ORDERBYa.CNODESC 8.将"C01"班同学所借图书的还期都延长一周--实现代码:UPDATEbSETRDATE=DATEADD(Day,7,b.RDATE)FROMCARDa,BORROWbWHEREa.CNO=b.CNOANDa.CLASS=N'C01' 9.从BOOKS表中删除当前无人借阅的图书记录--实现代码:DELETEAFROMBOOKSaWHERENOTEXISTS(SELECT*FROMBORROWWHEREBNO=a.BNO) 10.如果经常按书名查询图书信息,请建立合适的索引--实现代码:CREATECLUSTEREDINDEXIDX_BOOKS_BNAMEONBOOKS(BNAME) 11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)--实现代码:CREATETRIGGERTR_SAVEONBORROWFORINSERT,UPDATEASIF@@ROWCOUNT>0INSERTBORROW_SAVESELECTi.*FROMINSERTEDi,BOOKSbWHEREi.BNO=b.BNOANDb.BNAME=N'数据库技术及应用' 12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)--实现代码:CREATEVIEWV_VIEWASSELECTa.NAME,b.BNAMEFROMBORROWab,CARDa,BOOKSbWHEREab.CNO=a.CNOANDab.BNO=b.BNOANDa.CLASS=N'力01' 13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出--实现代码:SELECTa.CNOFROMBORROWa,BOOKSbWHEREa.BNO=b.BNOANDb.BNAMEIN(N'计算方法',N'组合数学')GROUPBYa.CNOHAVINGCOUNT(*)=2ORDERBYa.CNODESC 14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句--实现代码:ALTERTABLEBOOKSADDPRIMARYKEY(BNO) 15.1将NAME最大列宽增加到10个字符(假定原为6个字符)--实现代码:ALTERTABLECARDALTERCOLUMNNAMEvarchar(10) 15.2为该表增加1列NAME(系名),可变长,最大20个字符--实现代码:ALTERTABLECARDADD系名varchar(20) (四) 问题描述:为管理岗位业务培训信息,建立3个表:S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号、学员姓名、所属单位、学员年龄C(C#,CN)C#,CN分别代表课程编号、课程名称SC(S#,C#,G)S#,C#,G分别代表学号、所选修的课程编号、学习成绩 要求实现如下5个处理:1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位5.查询选修了课程的学员人数6.查询选修课程超过5门的学员学号和所属单位 1.使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名--实现代码:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMC,SCWHEREC.[C#]=SC.[C#]ANDCN=N'税收基础') 2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位--实现代码:SELECTS.SN,S.SDFROMS,SCWHERES.[S#]=SC.[S#]ANDSC.[C#]='C2' 3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位--实现代码:SELECTSN,SDFROMSWHERE[S#]NOTIN(SELECT[S#]FROMSCWHERE[C#]='C5') 4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位--实现代码:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCRIGHTJOINCONSC.[C#]=C.[C#]GROUPBY[S#]HAVINGCOUNT(*)=COUNT(DISTINCT[S#])) 5.查询选修了课程的学员人数--实现代码:SELECT学员人数=COUNT(DISTINCT[S#])FROMSC 6.查询选修课程超过5门的学员学号和所属单位--实现代码:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCGROUPBY[S#]HAVINGCOUNT(DISTINCT[C#])>5) (五) 一SQLSERVER管理部分 1有订单表,需要实现它的编号,格式如下:200211030001……200222039999等 2有表T1,T2,现有一事务,在向表T1添加数据时,同时也必须向T2也添加数据,如何实现该事务 3如何向T1中的编号字段(codevarchar(20))添加一万条记录,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值 4如何删除表中的重复数据,请使用游标与分组的办法 5如何求表中相邻的两条记录的某字段的值之差 6如何统计数据库中所有用户表的数据,显示格式如下: 表名记录数 sales23 7如何删除数据库中的所有用户表(表与表之间有外键关系) 8表Aeditor_idlb2_id123000123003123003456007456006表Blb2_idlb2_name000a003b006c007d显示a共1条(表A内lb2_id为000的条数)b共2条(表A内lb2_id为003的条数) 9人员情况表(employee):里面有一字段文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。 SELECTwhAS学历,ageas年龄,Count(*)AS人数, Count(*)*100/(SELECTCount(*)FROMemployee)AS百分比 FROMemployeeGROUPBYwh,age 学历年龄人数百分比 本科以上203414 大专203313 高中203313 初中以下2010040 本科以上215020 10现在有三个表student:(FID学生号,FName姓名), subject:(FSubID课程号,FSubName课程名), Score(FScoreId成绩记录号,FSubID课程号,FStdID学生号,FScore成绩) 怎么能实现这个表: 姓名英语数学语文历史 张萨78678976 王强89678496 SELECTa.FNameAS姓名, 英语=SUM(CASEb.FSubNameWHEN'英语'THENc.FScoreEND), 数学=SUM(CASEb.FSubNameWHEN'数学'THENc.FScoreEND), 语文=SUM(CASEb.FSubNameWHEN'语文'THENc.FScoreEND), 历史=SUM(CASEb.FSubNameWHEN'历史'THENc.FScoreEND) FROMStudenta,Subjectb,Scorec WHEREa.FID=c.FStdIdANDb.FSubID=c.FsubIDGROUPBYa.FName 11原始表的数据如下: PIDPTimePNo 1111112003-01-2804:30:09 1111112003-01-2818:30:00 2222222003-01-2804:31:09 3333332003-01-2804:32:09 1111112003-02-0903:35:25 2222222003-02-0903:36:25 3333332003-02-0903:37:25 查询生成表 PDate111111222222333333...... 2003-01-2804:30:0904:31:0904:32:09...... 2003-01-2818:30:00 2003-02-0903:35:2503:36:2503:37:25...... 12表一(AAA) 商品名称mc商品总量sl A100 B120 表二(BBB) 商品名称mc出库数量sl A10 A20 B10 B20 B30 用一条SQL语句算出商品A,B目前还剩多少? 一 declare@AAAtable(商品名称varchar(10),商品总量int) insertinto@AAAvalues('A',100) insertinto@AAAvalues('B',120) declare@BBBtable(商品名称varchar(10),出库数量int) insertinto@BBBvalues('A',10) insertinto@BBBvalues('A',20) insertinto@BBBvalues('B',10) insertinto@BBBvalues('B',20) insertinto@BBBvalues('B',30) selectTA.商品名称,A-BAS剩余数量FROM (select商品名称,sum(商品总量)ASA from@AAA groupby商品名称)TA, (select商品名称,sum(出库数量)ASB from@BBB groupby商品名称)TB whereTA.商品名称=TB.商品名称 二 select商品名称,sum(商品总量)剩余数量from(select*from@aaaunionallselect商品名称,-出库数量from@bbb)agroupby商品名称 13优化这句SQL语句 UPDATEtblExlTempYear SETtblExlTempYear.GDQC=tblExlTempMonth.GDQC FROMtblExlTempYear,tblExlTempMonth wheretblExlTempMonth.GDXM=tblExlTempYear.GDXMandtblExlTempMonth.TXDZ=tblExlTempYear.TXDZ (1)、加索引: tblExlTempYear(GDXM,TXDZ) tblExlTempMonth(GDXM,TXDZ) (2)、删除无用数据 (3)、转移过时数据 (4)、加服务器内存,升级服务器 (5)、升级网络系统 FROMtblExlTempYear(indexindexY),tblExlTempMonth(indexindexM) 14品种日期数量 P00012002-1-1010 P00012002-1-1011 P00012002-1-1050 P00012002-1-129 P00012002-1-128 P00012002-1-127 P00022002-10-105 P00022002-10-107 P00022002-10-120.5 P00032002-10-105 P00032002-10-127 P00032002-10-129 结果要先按照品种汇总,再按照日期汇总,结果如下: P00012002-1-1071 P00012002-1-1224 P00022002-10-1012 P00032002-10-1216 SQLSERVER能做出这样的汇总吗… 15在分組查循中with{cube|rollup}的區別是什么 如: usepangu selectfirm_id,p_id,sum(o_price_quantity)assum_values fromorders groupbyfirm_id,p_id withcube 與 withrollup 的區別是什么 CUBE和ROLLUP之间的区别在于: CUBE生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合。 例如,简单表Inventory中包含: ItemColorQuantity ------------------------------------------------------------------ TableBlue124 TableRed223 ChairBlue101 ChairRed210 下列查询将生成小计报表: SELECTCASEWHEN(GROUPING(Item)=1)THEN'ALL' ELSEISNULL(Item,'UNKNOWN') ENDASItem, CASEWHEN(GROUPING(Color)=1)THEN'ALL' ELSEISNULL(Color,'UNKNOWN') ENDASColor, SUM(Quantity)ASQtySum FROMInventory GROUPBYItem,ColorWITHROLLUP ItemColorQtySum ChairBlue101.00 ChairRed210.00 ChairALL311.00 TableBlue124.00 TableRed223.00 TableALL347.00 ALLALL658.00 (7row(s)affected) 如果查询中的ROLLUP关键字更改为CUBE,那么CUBE结果集与上述结果相同,只是在结果集的末尾还会返回下列两行: ALLBlue225.00 ALLRed433.00 CUBE操作为Item和Color中值的可能组合生成行。例如,CUBE不仅报告与Item值Chair相组合的Color值的所有可能组合(Red、Blue和Red+Blue),而且报告与Color值Red相组合的Item值的所有可能组合(Chair、Table和Chair+Table)。对于GROUPBY子句中右边的列中的每个值,ROLLUP操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP并不对每个Color值报告Item值的所有可能组合。ROLLUP操作的结果集具有类似于COMPUTEBY所返回结果集的功能;然而, ROLLUP具有下列优点:ROLLUP返回单个结果集;COMPUTEBY返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP可以在服务器游标中使用;COMPUTEBY不可以。有时,查询优化器为ROLLUP生成的执行计划比为COMPUTEBY生成的更为高效。 17用存储过程调用外部程序.不过要做成com控件用sp_OACreate存储过程)DECLARE@objectintDECLARE@hrintDECLARE@srcvarchar(255),@descvarchar(255)EXEC@hr=sp_OACreate'SQLDMO.SQLServer',@objectOUTIF@hr<>0BEGINEXECsp_OAGetErrorInfo@object,@srcOUT,@descOUTSELECThr=convert(varbinary(4),@hr),Source=@src,Description=@descRETURNEND (六) 1、在MSSQLServer中,用来显示数据库信息的系统存储过程是()Asp_dbhelpBsp_dbCsp_helpDsp_helpdb 2、SQL语言中,删除一个表的命令是()ADELETEBDROPCCLEARDREMORE 3、关系数据库中,主键是(__)A、为标识表中唯一的实体B、创建唯一的索引,允许空值C、只允许以表中第一字段建立D、允许有多个主键的 4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用关键字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),如果在SELECT语句中使用聚合函数时,一定在后面使用(4___)。⑴A、SELECT,INTOB、SELECT,FROMC、SELECT,GROUPD、仅SELECT⑵A、DISTINCTB、UNIONC、ALLC、TOP⑶A、JOINB、UNIONC、INTOC、LIKE⑷A、GROUPBYB、COMPUTEBYC、HAVINGD、COMPUTE 5、语句DBCCSHRINKDATABASE(Sample,25)中的25表示的意思是A、25MB、剩余占整个空间的25%C、已用空间占整个空间的25%D、以上都不对 6、你是一个保险公司的数据库开发人员,公司的保单信息存储在SQLServer2000数据库中,你使用以下脚本建立了一个名为Policy的表:CREATETABLEPolicy(PolicyNumberintNOTNULLDEFAULT(0),InsuredLastNamechar(30)NOTNULL,InsuredFirstNamechar(20)NOTNULL,InsuredBirthDatedatetimeNOTNULL,PolicyDatedatetimeNOTNULL,FaceAmountmoneyNOTNULL,CONSTRAINTPK_PolicyPRIMARYKEY(PolicyNumber))每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做? a.建立一个INSTEADOFINSERT触发器来产生一个新的保单号,并将这个保单号插入数据表中。b.建立一个INSTEADOFUPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。c.建立一个AFTERUPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。d.用AFTERUPDATE触发器替代DEFAULT约束条件产生一个新的保单号,并将这个保单号插入数据表中。 7、在SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资字段的取值不低于800元,最合适的实现方法是:A。在创建工资表时为”工资“字段建立缺省B。在创建工资表时为”工资“字段建立检查约束C。在工资表建立一个触发器D。为工资表数据输入编写一个程序进行控制 8、Select语句中用来连接字符串的符号是______.A.“+”B.“&”C.“||”D.“|” 9、你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:CREATEPROCEDUREget_sales_for_titletitlevarchar(80),@ytd_salesintOUTPUTASSELECT@ytd_sales=ytd_salesFROMtitlesWHEREtitle=@titleIF@@ROWCOUNT=0RETURN(-1)ELSERETURN(0)另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“NoSalesFound”,怎样建立这个脚本? A.DECLARE@retvalintDECLARE@ytdintEXECget_sales_for_title‘NetEtiquette’,@ytdIF@retval<0PRINT‘Nosalesfound’ELSEPRINT‘Yeartodatesales:’+STR(@ytd)GO B.DECLARE@retvalintDECLARE@ytdintEXECget_sales_for_title‘NetEtiquette’,@ytdOUTPUTIF@retval<0PRINT‘Nosalesfound’ELSEPRINT‘Yeartodatesales:’+STR(@ytd)GO C.DECLARE@retvalintDECLARE@ytdintEXECget_sales_for_title‘NetEtiquette’,@retvalOUTPUTIF@retval<0PRINT‘Nosalesfound’ELSEPRINT‘Yeartodatesales:’+STR(@ytd)GO D.DECLARE@retvalintDECLARE@ytdintEXEC@retval=get_sales_for_title‘NetEtiquette’,@ytdOUTPUTIF@retval<0PRINT‘Nosalesfound’ELSEPRINT‘Yeartodatesales:’+STR(@ytd)GO 10、Youareadatabasedeveloperforacontainermanufacturingcompany.Thecontainersproducedbyyourcompanyareanumberofdifferentsizesandshapes.ThetablesthatstorethecontainerinformationareshownintheSize,Container,andShapeTablesexhibit:SizeSizeIDSizeNameHeightContainerContainerIDShapeIDSizeIDShapeShapeIDShapeNameMeasurements Asampleofthedatastoredinthetablesisshownbelow:SizeTableSizeIDSizeNameHeight1Small402Medium603Large804Jumbo100ShapeTableShapeIDShapeNameMeasurement1Triangle102Triangle203Triangle304Square205Square306Square407Circle158Circle259Circle35Periodically,thedimensionsofthecontainerschange.Frequently,thedatabaseusersrequirethevolumeofacontainer.Thevolumeofacontaineriscalculatedbasedoninformationintheshapeandsizetables.YouneedtohidethedetailsofthecalculationsothatthevolumecanbeeasilyaccessedinaSELECTquerywiththerestofthecontainerinformation.WhatshouldyoudoA.Createauser-definedfunctionthatrequiresContainerIDasanargumentandreturnsthevolumeofthecontainer.B.CreateastoredprocedurethatrequiresContainerIDasanargumentandreturnsthevolumeofthecontainer.C.Addacolumnnamedvolumetothecontainertable.Createatriggerthatcalculatesandstoresvolumeinthiscolumnwhenanewcontainerisinsertedintothetable.D.Addacomputedcolumntothecontainertablethatcalculatesthevolumeofthecontainer. 2、描述(5分)表1student学生信息表IDint学生编号Namevarchar学生姓名Sexbit性别(男0女1)Classint班级编号 表2schedule课程信息表IDint课程编号Namevarchar课程名称 表3Grade成绩信息表IDint自动编号UIDint学生编号SIDint课程编号Numint考试成绩 (a)求各班的总人数(1分)(b)求1班女生和男生的平均成绩(2分)(c)各班"数据结构"(课程名称)不及格的人数(2分) (七) 1、问题描述:已知关系模式:S(SNO,SNAME)学生关系。SNO为学号,SNAME为姓名C(CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师SC(SNO,CNO,SCGRADE)选课关系。SCGRADE为成绩要求实现如下5个处理:1.找出没有选修过“李明”老师讲授课程的所有学生姓名2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩 2、问题描述:为管理岗位业务培训信息,建立3个表:S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号、学员姓名、所属单位、学员年龄C(C#,CN)C#,CN分别代表课程编号、课程名称SC(S#,C#,G)S#,C#,G分别代表学号、所选修的课程编号、学习成绩