一、选择题1、对分组聚合的结果集要进行过滤应使用()A)WHERE子句B)HAVING子句C)算数比较符D)逻辑比较符参考答案:B2、关系数据库中数据库的()最不可能为空值A)非主属性B)编号C)主键D)外键参考答案:C3、在结果集中过滤掉重复的记录使用关键字()A)UNIQUEB)IDENTITYC)DISTINCTD)ONLY参考答案:C4、使用SQL命令将教师表teacher中工资salary字段的值增加200,应该使用的命令是A)Replacesalarywithsalary+200B)Updateteachersalarywithsalary+200C)Updatesetsalarywithsalary+200D)Updateteachersetsalary=salary+200参考答案:D5、查询city列的值为空的记录,在where子句中的条件应写为()A)city=nullB)city='null'C)cityisnullD)cityis'null'参考答案:C6、设有图书管理数据库图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))借阅(借书证号C(4),总编号C(6),借书日期D(8))对于图书管理数据库,求CIE单位借阅图书的读者的人数SELECT___1___FROM借阅WHERE借书证号___2___A)COUNT(DISTINCT借书证号),IN(SELECT借书证号FROM读者WHERE单位=’CIE’)B)COUNT(DISTINCT借书证号),IN(SELECT借书证号FROM借阅WHERE单位=’CIE’)C)SUM(DISTINCT借书证号),IN(SELECT借书证号FROM读者WHERE单位=’CIE’)D)SUM(DISTINCT借书证号),IN(SELECT借书证号FOR借阅WHERE单位=’CIE’)参考答案:A7、查询结果根据价格从大到小排序,使用的orderby子句为()A)orderbypriceascB)orderbypricedescC)orderbypriceD)orderbydescprice参考答案:B8、将多个查询结果返回一个结果集合的运算符是()A、JOINB、UNIONC、INTOD、LIKE参考答案:B9、从货物定单数据表(orders)中查询出其中定单金额(orders_price)在1000和5000之间的定单的详细信息,并按照定单金额(orders_price)降序排列A)SELECT*FROM[orders]WHERE[orders_price]BETWEEN1000AND5000orderby[order_price]ASCB)SELECT*FROM[orders]WHERE[orders_price]BETWEEN1000AND5000orderby[order_price]DESCC)SELECT*FROMordersWHEREorders_priceBETWEEN1000AND5000orderbyorder_priceESCD)SELECT*FROM[orders]WHERE1000[orders_price]5000orderby[order_price]DESC参考答案:B10、以下哪种文件不是ORACLE数据库所必须包含的文件A.数据文件B.控制文件C.联机日志文件D.归档日志文件参考答案:D二、简答题1、T_Score(分数表)Stu_idLession_idScore001L00190001L00286002L00184002L00475003L00385004L00598…..T_Stu_Profile(学生表)Stu_idStu_NameSexAgeClass_id001郭东F160611002李西M180612003张北F160613004钱南M170611005王五F170614006赵七F160615……T_Lession(课程表)Lession_idLession_NameL001语文L002数据L003英语L004物理L005化学(用oracle或sqlserver实现)1)写出学生没有参加考试的课程,以下形式显示学生姓名班级课程以最简单SQL语句显示,最好不要使用游标与变量selectstu_name,class_id,lession_namefrom(selectstu_id,stu_name,class_id,lession_id,lession_namefromT_Stu_Profile,T_Lession)bwherenotexists(select1fromt_scorecwherec.stu_id=b.stu_idandc.lession_id=b.lession_id);2)找出课程的前三名,以下列形式显示课程第一名(姓名+分数)第二名(姓名+分数)第三名(姓名+分数)语文数学英语物理化学以最简单SQL语句显示,最好不要使用游标与变量selectl.lession_name,max(decode(tmp.id,1,st.stu_name||':'||tmp.score,null))asHighest,max(decode(tmp.id,2,st.stu_name||':'||tmp.score,null))asSecond,max(decode(tmp.id,3,st.stu_name||':'||tmp.score,null))asThirdfrom(selectrow_number()over(partitionbylession_idorderbyscoredesc)asid,sc.*fromt_scoresc)tmpleftjoint_stu_profilestontmp.stu_id=st.stu_idleftjoint_lessionlontmp.lession_id=l.lession_idgroupbyl.lession_name;3)找出0611班所有人成绩,以下列格式显示姓名语文数学英语物理化学总分以最简单SQL语句显示,最好不要使用游标与变量selecttmp.stu_name,max(decode(tmp.lession_name,'YW',tmp.score,null))YW,max(decode(tmp.lession_name,'SX',tmp.score,null))SX,max(decode(tmp.lession_name,'YY',tmp.score,null))YY,max(decode(tmp.lession_name,'WL',tmp.score,null))WL,max(decode(tmp.lession_name,'HX',tmp.score,null))HX,SUM(TMP.SCORE)SUMfrom(select*fromt_scorescleftjoint_stu_profilestonst.stu_id=sc.stu_idleftjoint_lessionlonl.lession_id=sc.lession_idwherest.class_id='0611')tmpgroupbytmp.stu_name;2、ETL的基本操作步骤1)建立源和目的数据源2)配置数据转换关系3)执行ETL测试4)配置定时任务3、SQL联接有哪几类?说明其主要区别并写出关键字。联接可分为以下几类:内部联接(典型的联接运算,使用类似于=或的比较运算符)。内部联接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。关键字INNERJOIN外部联接。外部联接可以是左向外部联接、右向外部联接或完整外部联接。在FROM子句中可以用下列某一组关键字来指定外部联接:LEFTJOIN或LEFTOUTERJOIN。左向外部联接的结果集包括LEFTOUTER子句中指定此子句左侧的数据表的所有行,而不仅仅是联接列所匹配的行。如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,来自此子居右侧数据表的所有选择列表列均为空值。RIGHTJOIN或RIGHTOUTERJOIN右向外部联接是左向外部联接的反向联接。将返回右表的所有行。如果右表的某一行在左表中没有匹配行,来自此子居左侧数据表的所有选择列表列均为空值。FULLJOIN或FULLOUTERJOIN完整外部联接将返回左侧数据表和右侧数据表中的所有行。当某一行在另一个表中没有匹配行时,另一个表的选择列表列将包含空值。4、在ORACLE数据库中,归档和非归档模式之间有何不同,并介绍它们的优缺点归档模式是指你可以备份所有的数据库transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高5、SQLServer中的聚集索引,非聚集索引的区别聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。6、数据库的性能优化方法有那些?1)集群2)实例性能优化3)逻辑库规范化4)查询优化(索引、IO吞吐、内存、计算列创建、查询返回记录量过大、语句优化、锁与死锁)5)存储过程优化(跨库操作创建view进行、语句规范、索引等)6)操作系统优化7)存储设备优化7、请删除除了id号不同,其他都相同的学生冗余信息学生表如下:id号学号姓名课程编号课程名称分数12005001张三0001数学6922005002李四0001数学8932005001张三0001数学69deletefromstudent2whereidnotin(selectmidfrom(selectmin(id)midfromstudent2groupbyname)ast);或者:deletefromstudent2whereidnotin(selectmin(id)from(select*fromstudent2)astgroupbyt.name);8、假如用户表中有上千万记录,需要每天凌晨将用户积分清零,如何处理?updateusersetscore=0;假设上面的代码要执行好长时间,超出容忍范围,那就altertableuserdropcolumnscore;altertableuseraddcolumnscoreint。