预览模式: 普通 | 列表

12 种健康杀手,全是常见的食品!

1、泡泡糖

  泡泡糖中的天然橡胶虽无毒,但制泡泡糖所用的一级白片胶是加入了具有一定毒性的硫化促进剂、防老剂等添加剂,多吃会对身体不利。

2、加糖鲜榨橙汁

查看更多...

Tags: 健康 食品

分类:饮食与健康 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 34

的补肾法-肾气足,百病除

       中医理论认为:“肾气足,百病除”。
人体内的左肾为阳,右肾为阴。左肾司六腑之功能,右肾辖五脏之运行。肾对五脏六腑起着至关重要的温煦(xu)、滋润、濡(ru)养、激发等作用。
肾中之元气,又叫元精,是生命的原动力。肾虚则生命力减弱,各种疾病会接踵而来。肾生精,精生髓,髓壮骨,髓通脑,脑为髓海。肾亏则髓空,髓空则骨软,骨软则腰膝酸麻,牙齿脱落,骨质增生,椎间盘突出,关节炎、颈椎神经痛,甚至出现头晕目眩,耳鸣健忘,反应迟钝,精力下降,脱发皮皱等现象。肾阳虚衰,男人表现为阳痿、早泄、遗精;女人则带下不止,月经不调,痛经、宫寒不孕等。
中医认为,肾亏是人体疾病的根源,许多内脏疾患的治疗,应从补肾入手。中医还有个歌诀:“肝病先调肾,肾病先调肺,肺病先调脾,脾病先调心,心病先调肝”。可见个脏腑之间有着密不可分的关系。
人体自身补肾法,就是外劳宫补肾法。具体方法是:每晚临睡前将两手背紧靠腰部,仰卧于床上,5-10分钟后,其热感会逐渐传遍全身。开始时,双掌被腰压住会出现麻胀现象,3-5天后即可适应消除,双腿会感到轻松灵活。常酗酒的人,脑门还会渗出汗珠,有的腰部会出汗。这是因为人的两手外劳宫紧贴二肾后,双掌的热量直接温煦了二肾,将肾内虚寒之气逼出,通过运行,变成汗水排出体外。尤其是晚上10点半至11点,是亥时尾、子时头,此刻地气最旺,地气通过内劳宫吸入,穿过外劳宫直接注入二肾,伴随二掌的热量和五行之气,温煦了二肾。不论是晚上,还是白天,只要你躺在床上,坚持两手背紧贴两肾半小时,便可收到奇效。

查看更多...

Tags: 补肾

分类:饮食与健康 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 40

你的救命水

      当我们人体代谢的时候正是体内巨大负荷的时候,这是人体代谢最旺盛的时候,希望大家抓住这个时候。早餐的开始就是早晨起来的第一杯水。早上起来的第一杯水对健康人来说很重要,对孕妇更重要。我们平常会很慎重的告诉你,这第一杯水就是救命水,你觉得太恐惧了,在这儿讲我恨不得毛孔都竖起来,不舒服,其实我们说得平淡一点就是健康水。因为人体经过一夜的代谢之后,身体的所有垃圾都需要一种洗刷,这个洗刷的过程中我们需要给一个外力,这个外力就是清澈的一杯水,我们的细胞是像一个干燥的海绵,当水进去以后就捕捉这个水,很快就通过40分钟左右排泄出了,排泄这个水就是体内代谢的一个过程,就是我们所关注的排毒。

当把身体的废弃物排下去之后,我们摄取的食物就是人体吸收的营养素的净化了,所以早晨这杯水非常重要。

有人说早晨这杯水喝蜂蜜水、白开水,我们所说的H2O是没有任何糖份和其他的营养物质的,我们吃了就排泄了,如果我们喝了蜜水就有糖份,在体内还有转化的过程,这个过程就不能急速地把我们体内的垃圾带走,这就是早上喝这杯清澈的水的重要性。

查看更多...

Tags: 健康

分类:饮食与健康 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 36

60条令你大吃一惊的小常识

1.吃了辣的东西,感觉就要被辣死了,就往嘴里放上少许盐,含一下,吐掉,漱下口,就不辣了;

2.牙齿黄,可以把花生嚼碎后含在嘴里,并刷牙三分钟,很有效;
3.若有小面积皮肤损伤或者烧伤、烫伤,抹上少许牙膏,可立即止血止痛;
4.经常装茶的杯子里面留下难看的茶渍,用牙膏洗之,非常干净;

查看更多...

Tags: 常识

分类:饮食与健康 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 38

SQL的触发器

SQL代码
  1. [1].触发器的概念  
  2. 触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称被直接调用,更不允许设置参数。  
  3.   
  4. 在SQL Server中一张表可以有多个触发器。用户可以跟据InsertUpdateDelete语句对触发器进行设置,也可以对一张表上的特定操作设置多个触发器。触发器可以包含复杂的Transact-SQL语句。不论触发器所进行的操作有多复杂,触发器都只作为一个独立的单元被执行,被看作是一个事务。如果在执行触发器的过程中发生了错误,则整个事务将会自动回滚。  
  5.   
  6. [2].触发器的优点  
  7. 1.触发器自动执行  
  8. 对表中的数据进行修改后,触发器立即被激活。  
  9.   
  10. 2.可以调用存储过程  
  11. 为了实现复杂的数据库更新操作,触发器可以调用一个或多个存储过程,甚至可以通过调用外部过程(不是数据库管理系统本身)完成相应的操作。  
  12.   
  13. 3.可以强化数据条件约束  
  14. 触发器能够实现比CHECK约束更为复杂的数据完整性约束。在数据库中,为了实现数据完整性约束,可以使用CHECK约束或触发器。CHECK约束不允许引用其他表中的列来完成检查工作,而触发器可以引用其他表中的列。它更适合在大型数据库管理系统中用来约束数据的完整性。  
  15.   
  16. 4.触发器可以楚止或回滚违反引用完整性的更改  
  17. 触发器可以检测数据库内的操作,从而取消了数据库未经许可的更新操作,使数据库修改、更新操作更安全,数据库的运行也更稳定。  
  18.   
  19. 5.级联、并行运行  
  20. 触发器能够对数据库中的相关表实现级联更改。触发器是基于一个表创建的,但是可以针对多个表进行操作,实现数据库中相关表的级联更改。  
  21.   
  22. 6.同表多触发器  
  23. 一个表中可以同时存在3个不同操作的触发器(InsertUpdateDelete)。  
  24.   
  25. [3].触发器的种类  
  26. SQL Server支持两种类型的触发器:AFTER触发器和INSTEAD OF触发器。  
  27.   
  28. AFTER触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功完成后执行。此类触发器只有在执行某一操作(InsertUpdateDelete)之后,触发器才被触发,如果修改语句错误,触发器将不会执行。AFTER触发器只能定义在表上,不能创建在视图上,但可以为针对表的同一操作定义多个触发器。可使用 sp_settriggerorder指定表上第一个和最后一个执行的AFTER触发器,在表上只能为每个INSETR、UpdateDelete操作规程指定第一个执行和最后一个执行的AFTER触发器。  
  29.   
  30. INSTEAD OF触发器又称为替代触发器,当引起触发器执行的修改语句停止时,该类触发器代替触发操作执行。它可以在表上定义,也可以在视图上定义。对于每个触发操作(InsertUpdateDelete),只能定义一个INSTEAD OF触发器。  
  31.   
  32. INSTEAD OF触发器与AFTER触发器的最大不同之处在于INSTEAD OF触发器并不是在执行预定义的操作(如InsertUpdateDelete)时被触发,而仅仅是执行触发器本身。  
  33.   
  34. [4].触发器的创建  
  35.   
  36. 1.使用企业管理器创建触发器  
  37.   
  38. 在企业管理器中为数据库“MR_SQL”中的“MR_Stu_XX”表创建一个名为 “TRI_StuXX_Insert”的触发器,实现在“MR_Stu_XX”表中添加数据时,在“TRI_pp”表中自动添加数据。  
  39.   
  40. 操作步骤如下:  
  41.   
  42. (1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“企业管理器” 命令,打开控制台目录。  
  43.   
  44. (2)在控制台目录中依次展开Microsoft SQL Server、SQL Server组、服务器、数据库的节点。  
  45.   
  46. (3)选择指定数据库中的指定表,单击鼠标右键,在快捷菜单中选择“所有任务”→“管理触发器”命令。  
  47.   
  48. (4)执行“管理触发器”命令后,打开“触发器属性”对话框,如图1所示。在“名称”文本框中输入触发器的名称,例如用触发器名“TRI_StuXX_Insert”替换[TRIGGER NAME],如图2所示。  
  49.   
  50. (5)删除FOR关键字后面的UpdateDelete,使触发器具有添加(Insert)功能,如果让触发器具有更新或删除的功能,在FOR关键字后面保留Update或 DeleteInsert 、UpdateDelete可以同时使用。  
  51.   
  52. (6)在“文本”文本框中输入触发器文本,SQL语句如下。  
  53. Insert INTO TRI_pp (MR_id,MR_name,MR_char,MR_sum,MR_eng) VALUES ('001','张三',0.0,0.0,0.0)  
  54.   
  55. (7)如果没有任何错误,单击“应用”按钮,将触发器保存到数据库中。  
  56.   
  57.   
  58. 2.使用Transact-SQL创建触发器  
  59.   
  60. Create TRIGGER语句用于创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。 SQL Server 允许为任何给定的InsertUpdateDelete语句创建多个触发器。  
  61.   
  62. 语法:  
  63.   
  64. Create TRIGGER trigger_name  
  65.   
  66. ON { table | view }  
  67.   
  68. WITH ENCRYPTION ]  
  69.   
  70. {  
  71.   
  72.    { { FOR | AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] }  
  73.   
  74.       [ WITH APPEND ]  
  75.   
  76.       [ NOT FOR REPLICATION ]  
  77.   
  78.       AS  
  79.   
  80.       [ { IF Update ( column )  
  81.   
  82.       [ { AND | or } Update ( column ) ]  
  83.   
  84.          [ ...n ]  
  85.   
  86.       | IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask )  
  87.   
  88.         { comparison_operator } column_bitmask [ ...n ]  
  89.   
  90.       } ]  
  91.   
  92.       sql_statement [ ...n ]  
  93.   
  94.    }  
  95.   
  96. }  
  97.   
  98. 参数说明:  
  99.   
  100. l    trigger_name:触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须惟一。可以选择是否指定触发器所有者名称。  
  101.   
  102. l    table | view:执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。  
  103.   
  104. l    AFTER:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才被激活。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。  
  105.   
  106. l    INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。  
  107.   
  108. l    WITH APPEND:指定应该添加现有类型的其他触发器。只有当兼容级别是65或更低时,才需要使用该可选子句。  
  109.   
  110. l    NOT FOR REPLICATION:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。  
  111.   
  112. l    AS:触发器要执行的操作。  
  113.   
  114. l    sql_statement:触发器的条件和操作。触发器条件指定其他准则,以确定DeleteInsertUpdate语句是否导致执行触发器操作。  
  115.   
  116. l    column:要测试 InsertUpdate操作的列名。该列可以是SQL Server支持的任何数据类型。  
  117.   
  118. l    bitwise_operator:用于比较运算的位运算符。  
  119.   
  120. l    updated_bitmask:整型位掩码,表示实际更新或插入的列。  
  121.   
  122. l    comparison_operator:比较运算符。使用等号(=)检查updated_bitmask中指定的所有列是否都实际进行了更新。使用大于号(>)检查 updated_bitmask中指定的任一列或某些列是否已更新。  
  123.   
  124. l    column_bitmask:要检查的列的整型位掩码,用来检查是否已更新或插入了这些列。  
  125.   
  126. 本示例是建立两个相关表“MR_Stu_XX”和“MR_Stu_CJ”,它们都有“学生编号”和 “学生姓名”字段,并且类型相同。在“MR_Stu_XX”表中创建三个触发器,在对“MR_Stu_XX”表进行添加修改的同时,对 “MR_Stu_CJ”表也进行相应的操作。  
  127. 操作步骤如下:  
  128. (1)在“MR_SQL”数据库中创建“MR_Stu_CJ”表和 “MR_Stu_XX”表。  
  129. (2)为“MR_Stu_XX”表创建触发器,SQL语句如下:  
  130. Insert语句创建触发器,当在 “MR_Stu_XX”表中添加数据时,“MR_Stu_CJ”表也添加相应的数据。SQL语句如下:  
  131.   
  132. USE MR_SQL  
  133. GO  
  134. Create TRIGGER TRI_StuXX_Insert ON dbo.MR_Stu_XX  
  135. FOR Insert  
  136. AS  
  137. DECLARE @id Char(4),@name Char(10)  
  138. Select @id=学生编号,@name=学生姓名  from inserted  
  139. Insert INTO MR_Stu_CJ (学生编号,学生姓名,语文,数学,英语) VALUES (@id,@name,0.0,0.0,0.0)  
  140. GO  
  141. 注意:在表中添加数据时,将添加的数据存放在系统临时表“inserted”中。  
  142.   
  143. Delete语句创建触发器,当在 “MR_Stu_XX”表中删除数据时,“MR_Stu_CJ”表也删除相应的数据。SQL语句如下:  
  144. USE MR_SQL  
  145. GO  
  146. Create TRIGGER TRI_StuXX_Delete ON [dbo].[MR_Stu_XX]  
  147. FOR Delete  
  148. AS  
  149. DECLARE @id char(4),@name char(10)  
  150. select @id=学生编号,@name=学生姓名 from deleted  
  151. Delete MR_Stu_CJ where 学生编号=@id and 学生姓名=@name  
  152. GO  
  153. 注意:在表中删除数据时,将删除的数据存放在系统临时表deleted中。  
  154.   
  155. Update语句创建触发器,当在“MR_Stu_XX”表中更新数据时,“MR_Stu_CJ”表也更新相应的数据。SQL语句如下:  
  156. USE MR_SQL  
  157. GO  
  158. Create TRIGGER TRI_StuXX_Uudate ON [dbo].[MR_Stu_XX]  
  159. FOR Update  
  160. AS  
  161. DECLARE @id char(4),@name char(10)  
  162. select @id=学生编号 from deleted  
  163. select @name=学生姓名 from Inserted  
  164. Update MR_Stu_CJ SET 学生姓名=@name Where 学生编号 = @id  
  165. GO  
  166. 注意:在表中更新数据时,将更新前的数据存放在系统临时表“deleted”中,将更新后的数据存放在系统临时表“inserted”中。  
  167.   
  168. 3.创建触发器的注意事项  
  169.   
  170. (1)触发器是一个数据库对象,它的命名必须符合SQL Server 2000的标识符命名规则。  
  171.   
  172. (2)Create TRIGGER语句必须是批处理中的第一个语句。也就是说,如果该语句前面还有其他语句,应该使用批处理结束符GO隔开。  
  173.   
  174. (3)不能在临时表或系统表上创建触发器,但是在触发器中可以引用临时表,不能引用系统表。  
  175.   
  176. (4)创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。  
  177.   
  178. (5)触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。  
  179.   
  180. (6)在含有用 DeleteUpdate操作定义的外键的表中,不能定义INSTEAD OFINSTEAD OF Update触发器。  
  181.   
  182. (7)WRITETEXT 语句不会引发InsertUpdate触发器。  
  183.   
  184. (8)TRUNCATE TABLE语句不能引发Delete触发器,因为该语句没有记录。  

Tags: SQL 触发器

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 74

SQLSEREVER测试题

SQLSEREVER测试题(上)


一 SQLSERVER管理部分


1 请讲出身份验证模式与登录帐号的关系及如何用各种帐号进行登录,并画出示意图
2 请讲出登录帐号、数据库用户及数据库角色之间的关系,并画出示意图
3 请讲出数据库用户、数据库角色与数据库对象之间的关系,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的方法
4 请讲出服务器角色、数据库角色、标准角色与应用程序角色的区别与验证其权限的方法
5 请讲出数据库还原模型对数据库的影响
6 有一个执行关键任务的数据库,请设计一个数据库备份策略
7 请使用文件与文件组恢复的方式恢复数据库
8 请使用事务日志恢复数据库到一个时间点
9 请设计作业进行周期性的备份数据库
10 如何监控数据库的阻塞,并实现数据库的死锁测试
11 如何监控数据库的活动,并能使用索引优化向导生成索引
12 理解数据库框图的作用并可以设计表与表之间的关系

 

SQL代码
  1. SQLSEREVER测试题(中)  
  2.   
  3. 二 SQLSERVER的实现部分  
  4.   
  5. 1 有订单表,需要实现它的编号,格式如下:200211030001……200222039999等  
  6.   
  7.   
  8.   
  9.   
  10.   
  11. 2 有表T1,T2,现有一事务,在向表T1添加数据时,同时也必须向T2也添加数据,如何实现该事务  
  12.   
  13.   
  14.   
  15.   
  16.   
  17. 3 如何向T1中的编号字段(code varchar(20))添加一万条记录,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值  
  18.   
  19.   
  20.   
  21.   
  22.   
  23. 4 如何删除表中的重复数据,请使用游标与分组的办法  
  24.   
  25.   
  26.   
  27.   
  28.   
  29. 5 如何求表中相邻的两条记录的某字段的值之差  
  30.   
  31.   
  32.   
  33.   
  34.   
  35. 6 如何统计数据库中所有用户表的数据,显示格式如下:  
  36.   
  37. 表名      记录数  
  38.   
  39.   sales      23  
  40.   
  41.   
  42.   
  43.   
  44.   
  45. 7 如何删除数据库中的所有用户表(表与表之间有外键关系)  
  46.   
  47.   
  48.   
  49.   
  50.   
  51. 8 表A editor_id       lb2_id  
  52.    123           000  
  53.    123           003  
  54.    123           003  
  55.    456           007  
  56.    456           006  
  57. 表B  lb2_id         lb2_name  
  58.     000           a  
  59.     003           b  
  60.     006           c  
  61.     007           d  
  62. 显示 a   共1条 (表A内lb2_id为000的条数)  
  63.    b   共2条(表A内lb2_id为003的条数)  
  64.   
  65.   
  66.   
  67.   
  68.   
  69. 9 人员情况表(employee):里面有一字段文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。  
  70.   
  71. Select wh AS 学历,age as 年龄, Count(*) AS 人数,  
  72.   
  73.       Count(*) * 100 /(Select Count(*) FROM employee) AS 百分比  
  74.   
  75. FROM employee GROUP BY wh,age  
  76.   
  77. 学历      年龄    人数      百分比  
  78.   
  79. 本科以上  20      34          14  
  80.   
  81. 大专      20      33          13  
  82.   
  83. 高中      20      33          13  
  84.   
  85. 初中以下  20      100        40  
  86.   
  87. 本科以上  21      50          20  
  88.   
  89.   
  90.   
  91.   
  92.   
  93. 10 现在有三个表student:(FID  学生号,FName  姓名),  
  94.   
  95. subject:(FSubID  课程号,FSubName 课程名),   
  96.   
  97. Score(FScoreId  成绩记录号,FSubID    课程号,FStdID    学生号,FScore    成绩)  
  98.   
  99. 怎么能实现这个表:  
  100.   
  101. 姓名  英语  数学  语文  历史  
  102.   
  103. 张萨  78    67    89    76  
  104.   
  105. 王强  89    67    84    96   
  106.   
  107.   
  108.   
  109.   
  110.   
  111. Select a.FName AS 姓名,  
  112.   
  113.       英语 = SUM(CASE b.FSubName WHEN '英语' THEN c.FScore END),  
  114.   
  115.       数学 = SUM(CASE b.FSubName WHEN '数学' THEN c.FScore END),  
  116.   
  117.       语文 = SUM(CASE b.FSubName WHEN '语文' THEN c.FScore END),  
  118.   
  119.       历史 = SUM(CASE b.FSubName WHEN '历史' THEN c.FScore END)  
  120.   
  121. FROM Student a, Subject b, Score c  
  122.   
  123. Where a.FID = c.FStdId AND b.FSubID = c.FsubID GROUP BY a.FName  
  124.   
  125.   
  126.   
  127.   
  128.   
  129. 11 原始表的数据如下:  
  130.   
  131. PID PTime    PNo  
  132.   
  133. 111111    2003-01-28 04:30:09       
  134.   
  135. 111111    2003-01-28 18:30:00  
  136.   
  137. 222222    2003-01-28 04:31:09       
  138.   
  139. 333333    2003-01-28 04:32:09       
  140.   
  141. 111111    2003-02-09 03:35:25       
  142.   
  143. 222222    2003-02-09 03:36:25       
  144.   
  145. 333333    2003-02-09 03:37:25       
  146.   
  147.   
  148.   
  149.   
  150.   
  151. 查询生成表  
  152.   
  153. PDate        111111        222222    333333      ......  
  154.   
  155. 2003-01-28    04:30:09    04:31:09      04:32:09    ......  
  156.   
  157. 2003-01-28    18:30:00  
  158.   
  159. 2003-02-09    03:35:25    03:36:25      03:37:25    ......  
  160.   
  161.   
  162.   
  163.   
  164.   
  165. 12  表一(AAA)  
  166.   
  167. 商品名称mc  商品总量sl  
  168.   
  169.   A        100  
  170.   
  171.   B        120  
  172.   
  173. 表二(BBB)  
  174.   
  175. 商品名称mc  出库数量sl  
  176.   
  177.   A        10  
  178.   
  179.   A        20  
  180.   
  181.   B        10  
  182.   
  183.   B        20  
  184.   
  185.   B        30  
  186.   
  187.   
  188.   
  189.   
  190.   
  191. 用一条SQL语句算出商品A,B目前还剩多少?  
  192.   
  193. 一  
  194.   
  195.   
  196. declare @AAA table (商品名称  varchar(10), 商品总量  int)  
  197.   
  198. insert into @AAA values('A',100)  
  199.   
  200. insert into @AAA values('B',120)  
  201.   
  202.   
  203.   
  204.   
  205.   
  206. declare @BBB table (商品名称 varchar(10), 出库数量 int)  
  207.   
  208. insert into @BBB values('A', 10)  
  209.   
  210. insert into @BBB values('A', 20)  
  211.   
  212. insert into @BBB values('B', 10)  
  213.   
  214. insert into @BBB values('B', 20)  
  215.   
  216. insert into @BBB values('B', 30)  
  217.   
  218.   
  219.   
  220.   
  221.   
  222. select TA.商品名称,A-B AS 剩余数量 FROM  
  223.   
  224. (select 商品名称,sum(商品总量) AS A  
  225.   
  226. from @AAA  
  227.   
  228. group by 商品名称)TA,  
  229.   
  230. (select 商品名称,sum(出库数量) AS B  
  231.   
  232. from @BBB  
  233.   
  234. group by 商品名称)TB  
  235.   
  236. where TA.商品名称=TB.商品名称  
  237.   
  238. 二  
  239.   
  240.   
  241. select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称  
  242.   
  243.   
  244.   
  245.   
  246.   
  247. 13 优化这句SQL语句  
  248.   
  249. Update tblExlTempYear  
  250.   
  251. SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC  
  252.   
  253. FROM tblExlTempYear,tblExlTempMonth  
  254.   
  255. where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ  
  256.   
  257.   
  258.   
  259.   
  260.   
  261. (1)、加索引:  
  262.   
  263. tblExlTempYear(GDXM,TXDZ)  
  264.   
  265. tblExlTempMonth (GDXM,TXDZ)  
  266.   
  267. (2)、删除无用数据  
  268.   
  269. (3)、转移过时数据  
  270.   
  271. (4)、加服务器内存,升级服务器  
  272.   
  273. (5)、升级网络系统  
  274.   
  275.   
  276.   
  277.   
  278.   
  279. Update tblExlTempYear  
  280.   
  281. SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC  
  282.   
  283. FROM tblExlTempYear (index indexY),tblExlTempMonth (index indexM)  
  284.   
  285. where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ  
  286.   
  287.   
  288.   
  289.   
  290.   
  291. 14 品种    日期    数量  
  292.   
  293. P0001  2002-1-10  10  
  294.   
  295. P0001  2002-1-10  11  
  296.   
  297. P0001  2002-1-10  50  
  298.   
  299. P0001  2002-1-12  9  
  300.   
  301. P0001  2002-1-12  8  
  302.   
  303. P0001  2002-1-12  7  
  304.   
  305. P0002  2002-10-10  5  
  306.   
  307. P0002  2002-10-10  7  
  308.   
  309. P0002  2002-10-12  0.5  
  310.   
  311. P0003  2002-10-10  5  
  312.   
  313. P0003  2002-10-12  7  
  314.   
  315. P0003  2002-10-12  9  
  316.   
  317.   
  318.   
  319.   
  320.   
  321. 结果要先按照品种汇总,再按照日期汇总,结果如下:  
  322.   
  323. P0001  2002-1-10    71  
  324.   
  325. P0001    2002-1-12  24  
  326.   
  327. P0002    2002-10-10  12  
  328.   
  329. P0002    2002-10-12  0.5  
  330.   
  331. P0003    2002-10-10  5  
  332.   
  333. P0003    2002-10-12  16  
  334.   
  335.   
  336.   
  337.   
  338.   
  339. SQL SERVER能做出这样的汇总吗…  
  340.   
  341.   
  342.   
  343.   
  344.   
  345. 15 在分組查循中with{cube|rollup}的區別是什么?  
  346.   
  347. 如:  
  348.   
  349.   use pangu  
  350.   
  351.   select firm_id,p_id,sum(o_price_quantity)as sum_values  
  352.   
  353.   from orders  
  354.   
  355.   group by firm_id,p_id  
  356.   
  357.   with cube  
  358.   
  359.   與  
  360.   
  361.   use pangu  
  362.   
  363.   select firm_id,p_id,sum(o_price_quantity)as sum_values  
  364.   
  365.   from orders  
  366.   
  367.   group by firm_id,p_id  
  368.   
  369.   with rollup  
  370.   
  371.   的區別是什么?  
  372.   
  373.   
  374.   
  375.   
  376.   
  377. CUBE 和 ROLLUP 之间的区别在于:  
  378.   
  379. CUBE 生成的结果集显示了所选列中值的所有组合的聚合。  
  380.   
  381. ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。  
  382.   
  383. 例如,简单表 Inventory 中包含:  
  384.   
  385. Item                Color                Quantity                   
  386.   
  387. -------------------- -------------------- --------------------------  
  388.   
  389. Table                Blue                124                         
  390.   
  391. Table                Red                  223                         
  392.   
  393. Chair                Blue                101                         
  394.   
  395. Chair                Red                  210                         
  396.   
  397.   
  398.   
  399.   
  400.   
  401.   
  402.   
  403.   
  404.   
  405.   
  406.   
  407.   
  408.   
  409.   
  410. 下列查询将生成小计报表:  
  411.   
  412. Select CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'  
  413.   
  414.             ELSE ISNULL(Item, 'UNKNOWN')  
  415.   
  416.       END AS Item,  
  417.   
  418.       CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'  
  419.   
  420.             ELSE ISNULL(Color, 'UNKNOWN')  
  421.   
  422.       END AS Color,  
  423.   
  424.       SUM(Quantity) AS QtySum  
  425.   
  426. FROM Inventory  
  427.   
  428. GROUP BY Item, Color WITH ROLLUP  
  429.   
  430.   
  431.   
  432.   
  433.   
  434. Item                Color                QtySum                     
  435.   
  436. -------------------- -------------------- --------------------------  
  437.   
  438. Chair                Blue                101.00                     
  439.   
  440. Chair                Red                  210.00                     
  441.   
  442. Chair                ALL                  311.00                     
  443.   
  444. Table                Blue                124.00                     
  445.   
  446. Table                Red                  223.00                     
  447.   
  448. Table                ALL                  347.00                     
  449.   
  450. ALL                  ALL                  658.00                     
  451.   
  452. (7 row(s) affected)  
  453.   
  454. 如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:  
  455.   
  456. ALL                  Blue                225.00                     
  457.   
  458. ALL                  Red                  433.00                     
  459.   
  460. CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,  
  461.   
  462. ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。  
  463.   
  464.   
  465.   
  466.   
  467.   
  468. 16 假如我有两个表  
  469. 表1(电话号码,是否存在)  
  470. 表2(电话号码,是否拨打)  
  471. 想查找表1中的电话号码是否在表2中存在,如果存在就更新表1中的是否存在字段为1。  
  472.   
  473.   
  474.   
  475.   
  476.   
  477.     Update 表1 SET 是否存在=1  
  478. Where EXISTS(Select * FROM 表2 Where 表2.电话号码 = 表1.电话号码)  
  479.   
  480.   
  481. 17 用存储过程调用外部程序.  
  482. 不过要做成com控件  
  483. 用sp_OACreate存储过程)  
  484. DECLARE @object int  
  485. DECLARE @hr int  
  486. DECLARE @src varchar(255), @desc varchar(255)  
  487. EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT  
  488. IF @hr <> 0  
  489. BEGIN  
  490. EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT  
  491. Select hr=convert(varbinary(4),@hr), Source=@src, Description=@desc  
  492. RETURN  
  493. END   

 

Tags: SQL 免试

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 43

找些不错的sql面试题-2

SQL代码
  1. 问题描述:  
  2. 本题用到下面三个关系表:  
  3. CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级  
  4. BOOKS    图书。     BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数   
  5. BORROW   借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期  
  6. 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。  
  7. 要求实现如下15个处理:  
  8.   1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。  
  9.   2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。  
  10.   3. 查询借阅了"水浒"一书的读者,输出姓名及班级。  
  11.   4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。  
  12.   5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。  
  13.   6. 查询现有图书中价格最高的图书,输出书名及作者。  
  14.   7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。  
  15.   8. 将"C01"班同学所借图书的还期都延长一周。  
  16.   9. 从BOOKS表中删除当前无人借阅的图书记录。  
  17.   10.如果经常按书名查询图书信息,请建立合适的索引。  
  18.   11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。  
  19.   12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。  
  20.   13.查询当前同时借有"计算方法""组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。  
  21.   14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。  
  22.   15.对CARD表做如下修改:  
  23.     a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。  
  24.     b. 为该表增加1列NAME(系名),可变长,最大20个字符。  
  25.   
  26.   
  27. 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束  
  28. --实现代码:  
  29. Create TABLE BORROW(  
  30.     CNO int FOREIGN KEY REFERENCES CARD(CNO),  
  31.     BNO int FOREIGN KEY REFERENCES BOOKS(BNO),  
  32.     RDATE datetime,  
  33.     PRIMARY KEY(CNO,BNO))   
  34.   
  35. 2. 找出借书超过5本的读者,输出借书卡号及所借图书册数  
  36. --实现代码:  
  37. Select CNO,借图书册数=COUNT(*)  
  38. FROM BORROW  
  39. GROUP BY CNO  
  40. HAVING COUNT(*)>5  
  41.   
  42. 3. 查询借阅了"水浒"一书的读者,输出姓名及班级  
  43. --实现代码:  
  44. Select * FROM CARD c  
  45. Where EXISTS(  
  46.     Select * FROM BORROW a,BOOKS b   
  47.     Where a.BNO=b.BNO  
  48.         AND b.BNAME=N'水浒'  
  49.         AND a.CNO=c.CNO)   
  50.   
  51. 4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期  
  52. --实现代码:  
  53. Select * FROM BORROW   
  54. Where RDATE<GETDATE()   
  55.   
  56. 5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者  
  57. --实现代码:  
  58. Select BNO,BNAME,AUTHOR FROM BOOKS  
  59. Where BNAME LIKE N'%网络%'   
  60.   
  61. 6. 查询现有图书中价格最高的图书,输出书名及作者  
  62. --实现代码:  
  63. Select BNO,BNAME,AUTHOR FROM BOOKS  
  64. Where PRICE=(  
  65.     Select MAX(PRICE) FROM BOOKS)   
  66.   
  67. 7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出  
  68. --实现代码:  
  69. Select a.CNO  
  70. FROM BORROW a,BOOKS b  
  71. Where a.BNO=b.BNO AND b.BNAME=N'计算方法'  
  72.     AND NOT EXISTS(  
  73.         Select * FROM BORROW aa,BOOKS bb  
  74.         Where aa.BNO=bb.BNO  
  75.             AND bb.BNAME=N'计算方法习题集'  
  76.             AND aa.CNO=a.CNO)  
  77. ORDER BY a.CNO DESC   
  78.   
  79. 8. 将"C01"班同学所借图书的还期都延长一周  
  80. --实现代码:  
  81. Update b SET RDATE=DATEADD(Day,7,b.RDATE)  
  82. FROM CARD a,BORROW b  
  83. Where a.CNO=b.CNO  
  84.     AND a.CLASS=N'C01'   
  85.   
  86. 9. 从BOOKS表中删除当前无人借阅的图书记录  
  87. --实现代码:  
  88. Delete A FROM BOOKS a  
  89. Where NOT EXISTS(  
  90.     Select * FROM BORROW  
  91.     Where BNO=a.BNO)   
  92.   
  93. 10. 如果经常按书名查询图书信息,请建立合适的索引  
  94. --实现代码:  
  95. Create CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)  
  96.   
  97. 11. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)  
  98. --实现代码:  
  99. Create TRIGGER TR_SAVE ON BORROW  
  100. FOR Insert,Update  
  101. AS  
  102. IF @@ROWCOUNT>0  
  103. Insert BORROW_SAVE Select i.*  
  104. FROM InsertED i,BOOKS b  
  105. Where i.BNO=b.BNO  
  106.     AND b.BNAME=N'数据库技术及应用'   
  107.   
  108. 12. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)  
  109. --实现代码:  
  110. Create VIEW V_VIEW  
  111. AS  
  112. Select a.NAME,b.BNAME  
  113. FROM BORROW ab,CARD a,BOOKS b  
  114. Where ab.CNO=a.CNO  
  115.     AND ab.BNO=b.BNO  
  116.     AND a.CLASS=N'力01'  
  117.   
  118. 13. 查询当前同时借有"计算方法""组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出  
  119. --实现代码:  
  120. Select a.CNO  
  121. FROM BORROW a,BOOKS b  
  122. Where a.BNO=b.BNO  
  123.     AND b.BNAME IN(N'计算方法',N'组合数学')  
  124. GROUP BY a.CNO  
  125. HAVING COUNT(*)=2  
  126. ORDER BY a.CNO DESC   
  127.   
  128. 14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句  
  129. --实现代码:  
  130. Alter TABLE BOOKS ADD PRIMARY KEY(BNO)   
  131.   
  132. 15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)  
  133. --实现代码:  
  134. Alter TABLE CARD Alter COLUMN NAME varchar(10)   
  135.   
  136. 15.2 为该表增加1列NAME(系名),可变长,最大20个字符  
  137. --实现代码:  
  138. Alter TABLE CARD ADD 系名 varchar(20)  
  139.   
  140.   
  141.   
  142.   
  143. 问题描述:  
  144. 为管理岗位业务培训信息,建立3个表:  
  145. S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄  
  146. C (C#,CN )        C#,CN       分别代表课程编号、课程名称  
  147. SC ( S#,C#,G )    S#,C#,G     分别代表学号、所选修的课程编号、学习成绩  
  148.   
  149. 要求实现如下5个处理:  
  150.   1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名  
  151.   2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位  
  152.   3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位  
  153.   4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位  
  154.   5. 查询选修了课程的学员人数  
  155.   6. 查询选修课程超过5门的学员学号和所属单位  
  156.   
  157. 1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名   
  158. --实现代码:  
  159. Select SN,SD FROM S  
  160. Where [S#] IN(  
  161.     Select [S#] FROM C,SC  
  162.     Where C.[C#]=SC.[C#]  
  163.         AND CN=N'税收基础')  
  164.   
  165.   
  166. 2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位  
  167. --实现代码:  
  168. Select S.SN,S.SD FROM S,SC  
  169. Where S.[S#]=SC.[S#]  
  170.     AND SC.[C#]='C2'  
  171.   
  172. 3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位  
  173. --实现代码:  
  174. Select SN,SD FROM S  
  175. Where [S#] NOT IN(  
  176.     Select [S#] FROM SC   
  177.     Where [C#]='C5')  
  178.   
  179. 4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位  
  180. --实现代码:  
  181. Select SN,SD FROM S  
  182. Where [S#] IN(  
  183.     Select [S#] FROM SC   
  184.         RIGHT JOIN C ON SC.[C#]=C.[C#]  
  185.     GROUP BY [S#]  
  186.     HAVING COUNT(*)=COUNT(DISTINCT [S#]))  
  187.   
  188. 5. 查询选修了课程的学员人数  
  189. --实现代码:  
  190. Select 学员人数=COUNT(DISTINCT [S#]) FROM SC  
  191.   
  192. 6. 查询选修课程超过5门的学员学号和所属单位  
  193. --实现代码:  
  194. Select SN,SD FROM S  
  195. Where [S#] IN(  
  196.     Select [S#] FROM SC   
  197.     GROUP BY [S#]  
  198.     HAVING COUNT(DISTINCT [C#])>5)  

Tags: SQL 收集

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 34