练习题(SQL)1.请列出SQL有几个版本,各版本的适应范围。个人版:普通用户,只可运行于非server版操作系统。企业版:标准版,开发版2.请列出SQL备份有几种类型,各类型有什么特点。完全备份:完全备份数据库,备份用时长。差异备份:事物日志备份:1、完全备份这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。2、事务日志备份事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。3、差异备份也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。4、文件备份数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。数据库文件和文件组备份:3.请设计一个门诊备份方案,假定客户为东华医院,东华医院情况如下:(1)三甲医院,日平均门诊量为5000人/次。(2)同时工作站台数为260台。(3)日门诊数量增量约200M。(4)在线数据量约20G。方案要求:(1)良好的抗灾能力。(2)故障出现时最快的数据恢复能力。(3)不影响业务开展。提示:要考虑备份任务的密度,时间,地点,数据的存放等因素。1、每星期日晚上2:30做一个完全备份,备份文件以时间为前缀,存放于服务器D:\dbbak_everydate。删除早于1周前的文件。2、做一个后台任务,将完全备份数据库文件转存到另一台性能稳定服务器。3、每二小时做一个差异备份,存放于服务器D:\dbbak。4.请写出SELECT的基本语法。SELECT[ALL|DISTINCT][TOPn[PERCENT][WITHTIES]]select_listselect_list::={*|{table_name|view_name|table_alias}.*|{column_name|expression|IDENTITYCOL|ROWGUIDCOL}[[AS]column_alias]|column_alias=expression}[,...n]5.使用SQL语句,建立二张表,,表结构如下:表一:std_infoCreatetablestd_info(Std_idchar(20)notnullPRIMARYKEYCLUSTERED,Std_namevarchar(20)notnull,Sexchar(1)notnull)表二:std_scoreCREATETABLE[std_score123]([Std_id][char](20)NOTNULL,[Score_Date][char](10)NOTNULL,[Chinese][decimal](10,2)NOTNULL,[Math][decimal](10,2)NOTNULL,[Score_sum][decimal](10,2)NULL,[Place][int]NULL,PRIMARYKEY([Std_id],[Score_Date]))为当日日期转换为YYYY.MM.DD字符串格式。Insertintostd_score(std_id,score_date,chinese,math,score_sum,place)values('20020701',CONVERT(varchar(20),GETDATE(),102),83,69,83+69,null)Insertintostd_score(std_id,score_date,chinese,math,score_sum,place)values('20020702',CONVERT(varchar(20),GETDATE(),102),80,90,80+90,null)Insertintostd_score(std_id,score_date,chinese,math,score_sum,place)values('20020703',CONVERT(varchar(20),GETDATE(),102),70.5,92,70.5+91,null)Insertintostd_score(std_id,score_date,chinese,math,score_sum,place)values('20020704',CONVERT(varchar(20),GETDATE(),102),95,85,95+85,null)Insertintostd_score(std_id,score_date,chinese,math,score_sum,place)values('20020705',CONVERT(varchar(20),GETDATE(),102),68,53,68+53,null)7.请使用sql语句,将总分写入std_score表中的score_sum列。Updatestd_scoresetscore_sum=Chinese+math8.请编写一个存储过程,计算出每个学生的名次,如果总分相同,则名次一样,请将名次写入到std_score表中的place列。Createprocproc_orderAsselectIDENTITY(int,1,1)asplace1,score_sumintotemp#fromstd_scoregroupbyscore_sumorderbyscore_sumdescupdatestd_scoresetplace=b.place1fromstd_scorea,temp#bwherea.score_sum=b.score_sumdroptabletemp#go9.请编写一个触发器,如果std_score表中Place不为空,则不允许删除本条记录。CREATETRIGGER[TRIGGERNAME]ON[dbo].[std_score]FORDELETEASif(selectplacefromdeleted)isnotnullbeginrollbacktranenda.std_name姓名,casea.sexwhen'0'then'女'when'1'then'男'else'未说明'end性别,b.chinese语文,b.math数学,b.score_sum总分,b.place名次fromstd_infoa,std_scoreborderbyb.placedesc11.简答题:为什么要创建索引?利用索引可以快速访问数据库表中的特定信息。12.简答题:索引创建的原则是什么?索引将占用磁盘空间,并且降低添加、删除和更新行的速度,所以应用程序非常频繁地更新数据,或磁盘空间有限,那么最好限制索引的数量。13.简答题:如何规划索引的填充因子?14.简答题:索引有哪些类型,具有什么特点?唯一索引、主键索引和聚集索引,15.如何建立远程链接服务器,并访问其数据?1、展开服务器组,然后展开服务器2、展开安全性,对住连接服务器右键点击新建连接服务器输入连接服务器名字设置要连接的数据库或sp_addlinkedserver@server=N'dbserver'gosp_addlinkedsrvlogin'dbserver','false',null,'sa','password'godbserver为远程服务器16.什么是左连接、右连接、内连接,请举例。左连接(leftjoin),右连接可以返回两表关联的记录,用左连接时,反回左表中所示记录,右表中关联数据,右表中不符合关联条件的记录用空值表示;右连接(riftjoin)用右连接时,反回右表中所示记录,左表中关联数据,左表中不符合关联条件的记录用空值表示。内连接只返回符合关联条件的记录。17.视图有什么特点?①可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求。②使用视图可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重新组织数据以便输出到其他应用程序中。③视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。④视图大大地简化了用户对数据的操作。⑤视图可以让不同的用户以不同的方式看到不同或者相同的数据集。⑥在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。⑦视图提供了一个简单而有效的安全机制。18.Select*fromtable_name(nolock)中的带nolock,什么情况下应带nolock,不带nolock有什么影响?在select语句中使用,带nolock不产生共享锁,不会引起数据库死锁。19.CREATETABLE[dbo].[mz_receipt20071217]([p_id][varchar](12)COLLATEChinese_PRC_BINNOTNULL,[account_sn][int]NOTNULL)ON[PRIMARY]请问COLLATEChinese_PRC_BIN是什么用处?显式指定表的排序规则为COLLATEChinese_PRC_BIN。20.21.查看数据库的进程数。数据库有哪几类锁,特点如何,如何查看数据库死锁情况并解锁?企业管理器--展开服务器组,然后展开服务器--管理--当前活动--进程信息数据库锁有:共享锁,独占锁sp_locksp_whosp_who2Select*fromsysprocesseswhereblocked0死锁记录Killspid解锁