12 种健康杀手,全是常见的食品!
作者:admin 日期:2010-03-17
的补肾法-肾气足,百病除
作者:admin 日期:2010-03-17
中医理论认为:“肾气足,百病除”。
人体内的左肾为阳,右肾为阴。左肾司六腑之功能,右肾辖五脏之运行。肾对五脏六腑起着至关重要的温煦(xu)、滋润、濡(ru)养、激发等作用。
肾中之元气,又叫元精,是生命的原动力。肾虚则生命力减弱,各种疾病会接踵而来。肾生精,精生髓,髓壮骨,髓通脑,脑为髓海。肾亏则髓空,髓空则骨软,骨软则腰膝酸麻,牙齿脱落,骨质增生,椎间盘突出,关节炎、颈椎神经痛,甚至出现头晕目眩,耳鸣健忘,反应迟钝,精力下降,脱发皮皱等现象。肾阳虚衰,男人表现为阳痿、早泄、遗精;女人则带下不止,月经不调,痛经、宫寒不孕等。
中医认为,肾亏是人体疾病的根源,许多内脏疾患的治疗,应从补肾入手。中医还有个歌诀:“肝病先调肾,肾病先调肺,肺病先调脾,脾病先调心,心病先调肝”。可见个脏腑之间有着密不可分的关系。
人体自身补肾法,就是外劳宫补肾法。具体方法是:每晚临睡前将两手背紧靠腰部,仰卧于床上,5-10分钟后,其热感会逐渐传遍全身。开始时,双掌被腰压住会出现麻胀现象,3-5天后即可适应消除,双腿会感到轻松灵活。常酗酒的人,脑门还会渗出汗珠,有的腰部会出汗。这是因为人的两手外劳宫紧贴二肾后,双掌的热量直接温煦了二肾,将肾内虚寒之气逼出,通过运行,变成汗水排出体外。尤其是晚上10点半至11点,是亥时尾、子时头,此刻地气最旺,地气通过内劳宫吸入,穿过外劳宫直接注入二肾,伴随二掌的热量和五行之气,温煦了二肾。不论是晚上,还是白天,只要你躺在床上,坚持两手背紧贴两肾半小时,便可收到奇效。
人体内的左肾为阳,右肾为阴。左肾司六腑之功能,右肾辖五脏之运行。肾对五脏六腑起着至关重要的温煦(xu)、滋润、濡(ru)养、激发等作用。
肾中之元气,又叫元精,是生命的原动力。肾虚则生命力减弱,各种疾病会接踵而来。肾生精,精生髓,髓壮骨,髓通脑,脑为髓海。肾亏则髓空,髓空则骨软,骨软则腰膝酸麻,牙齿脱落,骨质增生,椎间盘突出,关节炎、颈椎神经痛,甚至出现头晕目眩,耳鸣健忘,反应迟钝,精力下降,脱发皮皱等现象。肾阳虚衰,男人表现为阳痿、早泄、遗精;女人则带下不止,月经不调,痛经、宫寒不孕等。
中医认为,肾亏是人体疾病的根源,许多内脏疾患的治疗,应从补肾入手。中医还有个歌诀:“肝病先调肾,肾病先调肺,肺病先调脾,脾病先调心,心病先调肝”。可见个脏腑之间有着密不可分的关系。
人体自身补肾法,就是外劳宫补肾法。具体方法是:每晚临睡前将两手背紧靠腰部,仰卧于床上,5-10分钟后,其热感会逐渐传遍全身。开始时,双掌被腰压住会出现麻胀现象,3-5天后即可适应消除,双腿会感到轻松灵活。常酗酒的人,脑门还会渗出汗珠,有的腰部会出汗。这是因为人的两手外劳宫紧贴二肾后,双掌的热量直接温煦了二肾,将肾内虚寒之气逼出,通过运行,变成汗水排出体外。尤其是晚上10点半至11点,是亥时尾、子时头,此刻地气最旺,地气通过内劳宫吸入,穿过外劳宫直接注入二肾,伴随二掌的热量和五行之气,温煦了二肾。不论是晚上,还是白天,只要你躺在床上,坚持两手背紧贴两肾半小时,便可收到奇效。
你的救命水
作者:admin 日期:2010-03-17
当我们人体代谢的时候正是体内巨大负荷的时候,这是人体代谢最旺盛的时候,希望大家抓住这个时候。早餐的开始就是早晨起来的第一杯水。早上起来的第一杯水对健康人来说很重要,对孕妇更重要。我们平常会很慎重的告诉你,这第一杯水就是救命水,你觉得太恐惧了,在这儿讲我恨不得毛孔都竖起来,不舒服,其实我们说得平淡一点就是健康水。因为人体经过一夜的代谢之后,身体的所有垃圾都需要一种洗刷,这个洗刷的过程中我们需要给一个外力,这个外力就是清澈的一杯水,我们的细胞是像一个干燥的海绵,当水进去以后就捕捉这个水,很快就通过40分钟左右排泄出了,排泄这个水就是体内代谢的一个过程,就是我们所关注的排毒。
当把身体的废弃物排下去之后,我们摄取的食物就是人体吸收的营养素的净化了,所以早晨这杯水非常重要。
有人说早晨这杯水喝蜂蜜水、白开水,我们所说的H2O是没有任何糖份和其他的营养物质的,我们吃了就排泄了,如果我们喝了蜜水就有糖份,在体内还有转化的过程,这个过程就不能急速地把我们体内的垃圾带走,这就是早上喝这杯清澈的水的重要性。
当把身体的废弃物排下去之后,我们摄取的食物就是人体吸收的营养素的净化了,所以早晨这杯水非常重要。
有人说早晨这杯水喝蜂蜜水、白开水,我们所说的H2O是没有任何糖份和其他的营养物质的,我们吃了就排泄了,如果我们喝了蜜水就有糖份,在体内还有转化的过程,这个过程就不能急速地把我们体内的垃圾带走,这就是早上喝这杯清澈的水的重要性。
60条令你大吃一惊的小常识
作者:admin 日期:2010-03-17
SQL的触发器
作者:admin 日期:2010-03-17
SQL代码
- [1].触发器的概念
- 触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称被直接调用,更不允许设置参数。
- 在SQL Server中一张表可以有多个触发器。用户可以跟据Insert、Update或Delete语句对触发器进行设置,也可以对一张表上的特定操作设置多个触发器。触发器可以包含复杂的Transact-SQL语句。不论触发器所进行的操作有多复杂,触发器都只作为一个独立的单元被执行,被看作是一个事务。如果在执行触发器的过程中发生了错误,则整个事务将会自动回滚。
- [2].触发器的优点
- 1.触发器自动执行
- 对表中的数据进行修改后,触发器立即被激活。
- 2.可以调用存储过程
- 为了实现复杂的数据库更新操作,触发器可以调用一个或多个存储过程,甚至可以通过调用外部过程(不是数据库管理系统本身)完成相应的操作。
- 3.可以强化数据条件约束
- 触发器能够实现比CHECK约束更为复杂的数据完整性约束。在数据库中,为了实现数据完整性约束,可以使用CHECK约束或触发器。CHECK约束不允许引用其他表中的列来完成检查工作,而触发器可以引用其他表中的列。它更适合在大型数据库管理系统中用来约束数据的完整性。
- 4.触发器可以楚止或回滚违反引用完整性的更改
- 触发器可以检测数据库内的操作,从而取消了数据库未经许可的更新操作,使数据库修改、更新操作更安全,数据库的运行也更稳定。
- 5.级联、并行运行
- 触发器能够对数据库中的相关表实现级联更改。触发器是基于一个表创建的,但是可以针对多个表进行操作,实现数据库中相关表的级联更改。
- 6.同表多触发器
- 一个表中可以同时存在3个不同操作的触发器(Insert、Update和Delete)。
- [3].触发器的种类
- SQL Server支持两种类型的触发器:AFTER触发器和INSTEAD OF触发器。
- AFTER触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功完成后执行。此类触发器只有在执行某一操作(Insert、Update和Delete)之后,触发器才被触发,如果修改语句错误,触发器将不会执行。AFTER触发器只能定义在表上,不能创建在视图上,但可以为针对表的同一操作定义多个触发器。可使用 sp_settriggerorder指定表上第一个和最后一个执行的AFTER触发器,在表上只能为每个INSETR、Update和Delete操作规程指定第一个执行和最后一个执行的AFTER触发器。
- INSTEAD OF触发器又称为替代触发器,当引起触发器执行的修改语句停止时,该类触发器代替触发操作执行。它可以在表上定义,也可以在视图上定义。对于每个触发操作(Insert、Update和Delete),只能定义一个INSTEAD OF触发器。
- INSTEAD OF触发器与AFTER触发器的最大不同之处在于INSTEAD OF触发器并不是在执行预定义的操作(如Insert、Update和Delete)时被触发,而仅仅是执行触发器本身。
- [4].触发器的创建
- 1.使用企业管理器创建触发器
- 在企业管理器中为数据库“MR_SQL”中的“MR_Stu_XX”表创建一个名为 “TRI_StuXX_Insert”的触发器,实现在“MR_Stu_XX”表中添加数据时,在“TRI_pp”表中自动添加数据。
- 操作步骤如下:
- (1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“企业管理器” 命令,打开控制台目录。
- (2)在控制台目录中依次展开Microsoft SQL Server、SQL Server组、服务器、数据库的节点。
- (3)选择指定数据库中的指定表,单击鼠标右键,在快捷菜单中选择“所有任务”→“管理触发器”命令。
- (4)执行“管理触发器”命令后,打开“触发器属性”对话框,如图1所示。在“名称”文本框中输入触发器的名称,例如用触发器名“TRI_StuXX_Insert”替换[TRIGGER NAME],如图2所示。
- (5)删除FOR关键字后面的Update和Delete,使触发器具有添加(Insert)功能,如果让触发器具有更新或删除的功能,在FOR关键字后面保留Update或 Delete,Insert 、Update和Delete可以同时使用。
- (6)在“文本”文本框中输入触发器文本,SQL语句如下。
- Insert INTO TRI_pp (MR_id,MR_name,MR_char,MR_sum,MR_eng) VALUES ('001','张三',0.0,0.0,0.0)
- (7)如果没有任何错误,单击“应用”按钮,将触发器保存到数据库中。
- 2.使用Transact-SQL创建触发器
- Create TRIGGER语句用于创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。 SQL Server 允许为任何给定的Insert、Update或Delete语句创建多个触发器。
- 语法:
- Create TRIGGER trigger_name
- ON { table | view }
- [ WITH ENCRYPTION ]
- {
- { { FOR | AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] }
- [ WITH APPEND ]
- [ NOT FOR REPLICATION ]
- AS
- [ { IF Update ( column )
- [ { AND | or } Update ( column ) ]
- [ ...n ]
- | IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask )
- { comparison_operator } column_bitmask [ ...n ]
- } ]
- sql_statement [ ...n ]
- }
- }
- 参数说明:
- l trigger_name:触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须惟一。可以选择是否指定触发器所有者名称。
- l table | view:执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。
- l AFTER:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才被激活。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。
- l INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
- l WITH APPEND:指定应该添加现有类型的其他触发器。只有当兼容级别是65或更低时,才需要使用该可选子句。
- l NOT FOR REPLICATION:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。
- l AS:触发器要执行的操作。
- l sql_statement:触发器的条件和操作。触发器条件指定其他准则,以确定Delete、Insert或Update语句是否导致执行触发器操作。
- l column:要测试 Insert或Update操作的列名。该列可以是SQL Server支持的任何数据类型。
- l bitwise_operator:用于比较运算的位运算符。
- l updated_bitmask:整型位掩码,表示实际更新或插入的列。
- l comparison_operator:比较运算符。使用等号(=)检查updated_bitmask中指定的所有列是否都实际进行了更新。使用大于号(>)检查 updated_bitmask中指定的任一列或某些列是否已更新。
- l column_bitmask:要检查的列的整型位掩码,用来检查是否已更新或插入了这些列。
- 本示例是建立两个相关表“MR_Stu_XX”和“MR_Stu_CJ”,它们都有“学生编号”和 “学生姓名”字段,并且类型相同。在“MR_Stu_XX”表中创建三个触发器,在对“MR_Stu_XX”表进行添加修改的同时,对 “MR_Stu_CJ”表也进行相应的操作。
- 操作步骤如下:
- (1)在“MR_SQL”数据库中创建“MR_Stu_CJ”表和 “MR_Stu_XX”表。
- (2)为“MR_Stu_XX”表创建触发器,SQL语句如下:
- 用Insert语句创建触发器,当在 “MR_Stu_XX”表中添加数据时,“MR_Stu_CJ”表也添加相应的数据。SQL语句如下:
- USE MR_SQL
- GO
- Create TRIGGER TRI_StuXX_Insert ON dbo.MR_Stu_XX
- FOR Insert
- AS
- DECLARE @id Char(4),@name Char(10)
- Select @id=学生编号,@name=学生姓名 from inserted
- Insert INTO MR_Stu_CJ (学生编号,学生姓名,语文,数学,英语) VALUES (@id,@name,0.0,0.0,0.0)
- GO
- 注意:在表中添加数据时,将添加的数据存放在系统临时表“inserted”中。
- 用Delete语句创建触发器,当在 “MR_Stu_XX”表中删除数据时,“MR_Stu_CJ”表也删除相应的数据。SQL语句如下:
- USE MR_SQL
- GO
- Create TRIGGER TRI_StuXX_Delete ON [dbo].[MR_Stu_XX]
- FOR Delete
- AS
- DECLARE @id char(4),@name char(10)
- select @id=学生编号,@name=学生姓名 from deleted
- Delete MR_Stu_CJ where 学生编号=@id and 学生姓名=@name
- GO
- 注意:在表中删除数据时,将删除的数据存放在系统临时表deleted中。
- 用Update语句创建触发器,当在“MR_Stu_XX”表中更新数据时,“MR_Stu_CJ”表也更新相应的数据。SQL语句如下:
- USE MR_SQL
- GO
- Create TRIGGER TRI_StuXX_Uudate ON [dbo].[MR_Stu_XX]
- FOR Update
- AS
- DECLARE @id char(4),@name char(10)
- select @id=学生编号 from deleted
- select @name=学生姓名 from Inserted
- Update MR_Stu_CJ SET 学生姓名=@name Where 学生编号 = @id
- GO
- 注意:在表中更新数据时,将更新前的数据存放在系统临时表“deleted”中,将更新后的数据存放在系统临时表“inserted”中。
- 3.创建触发器的注意事项
- (1)触发器是一个数据库对象,它的命名必须符合SQL Server 2000的标识符命名规则。
- (2)Create TRIGGER语句必须是批处理中的第一个语句。也就是说,如果该语句前面还有其他语句,应该使用批处理结束符GO隔开。
- (3)不能在临时表或系统表上创建触发器,但是在触发器中可以引用临时表,不能引用系统表。
- (4)创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。
- (5)触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。
- (6)在含有用 Delete或Update操作定义的外键的表中,不能定义INSTEAD OF和INSTEAD OF Update触发器。
- (7)WRITETEXT 语句不会引发Insert或Update触发器。
- (8)TRUNCATE TABLE语句不能引发Delete触发器,因为该语句没有记录。
SQLSEREVER测试题
作者:admin 日期:2010-03-16
SQLSEREVER测试题(上)
一 SQLSERVER管理部分
1 请讲出身份验证模式与登录帐号的关系及如何用各种帐号进行登录,并画出示意图
2 请讲出登录帐号、数据库用户及数据库角色之间的关系,并画出示意图
3 请讲出数据库用户、数据库角色与数据库对象之间的关系,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的方法
4 请讲出服务器角色、数据库角色、标准角色与应用程序角色的区别与验证其权限的方法
5 请讲出数据库还原模型对数据库的影响
6 有一个执行关键任务的数据库,请设计一个数据库备份策略
7 请使用文件与文件组恢复的方式恢复数据库
8 请使用事务日志恢复数据库到一个时间点
9 请设计作业进行周期性的备份数据库
10 如何监控数据库的阻塞,并实现数据库的死锁测试
11 如何监控数据库的活动,并能使用索引优化向导生成索引
12 理解数据库框图的作用并可以设计表与表之间的关系
SQL代码
- SQLSEREVER测试题(中)
- 二 SQLSERVER的实现部分
- 1 有订单表,需要实现它的编号,格式如下:200211030001……200222039999等
- 2 有表T1,T2,现有一事务,在向表T1添加数据时,同时也必须向T2也添加数据,如何实现该事务
- 3 如何向T1中的编号字段(code varchar(20))添加一万条记录,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值
- 4 如何删除表中的重复数据,请使用游标与分组的办法
- 5 如何求表中相邻的两条记录的某字段的值之差
- 6 如何统计数据库中所有用户表的数据,显示格式如下:
- 表名 记录数
- sales 23
- 7 如何删除数据库中的所有用户表(表与表之间有外键关系)
- 8 表A editor_id lb2_id
- 123 000
- 123 003
- 123 003
- 456 007
- 456 006
- 表B lb2_id lb2_name
- 000 a
- 003 b
- 006 c
- 007 d
- 显示 a 共1条 (表A内lb2_id为000的条数)
- b 共2条(表A内lb2_id为003的条数)
- 9 人员情况表(employee):里面有一字段文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。
- Select wh AS 学历,age as 年龄, Count(*) AS 人数,
- Count(*) * 100 /(Select Count(*) FROM employee) AS 百分比
- FROM employee GROUP BY wh,age
- 学历 年龄 人数 百分比
- 本科以上 20 34 14
- 大专 20 33 13
- 高中 20 33 13
- 初中以下 20 100 40
- 本科以上 21 50 20
- 10 现在有三个表student:(FID 学生号,FName 姓名),
- subject:(FSubID 课程号,FSubName 课程名),
- Score(FScoreId 成绩记录号,FSubID 课程号,FStdID 学生号,FScore 成绩)
- 怎么能实现这个表:
- 姓名 英语 数学 语文 历史
- 张萨 78 67 89 76
- 王强 89 67 84 96
- Select a.FName AS 姓名,
- 英语 = SUM(CASE b.FSubName WHEN '英语' THEN c.FScore END),
- 数学 = SUM(CASE b.FSubName WHEN '数学' THEN c.FScore END),
- 语文 = SUM(CASE b.FSubName WHEN '语文' THEN c.FScore END),
- 历史 = SUM(CASE b.FSubName WHEN '历史' THEN c.FScore END)
- FROM Student a, Subject b, Score c
- Where a.FID = c.FStdId AND b.FSubID = c.FsubID GROUP BY a.FName
- 11 原始表的数据如下:
- PID PTime PNo
- 111111 2003-01-28 04:30:09
- 111111 2003-01-28 18:30:00
- 222222 2003-01-28 04:31:09
- 333333 2003-01-28 04:32:09
- 111111 2003-02-09 03:35:25
- 222222 2003-02-09 03:36:25
- 333333 2003-02-09 03:37:25
- 查询生成表
- PDate 111111 222222 333333 ......
- 2003-01-28 04:30:09 04:31:09 04:32:09 ......
- 2003-01-28 18:30:00
- 2003-02-09 03:35:25 03:36:25 03:37:25 ......
- 12 表一(AAA)
- 商品名称mc 商品总量sl
- A 100
- B 120
- 表二(BBB)
- 商品名称mc 出库数量sl
- A 10
- A 20
- B 10
- B 20
- B 30
- 用一条SQL语句算出商品A,B目前还剩多少?
- 一
- declare @AAA table (商品名称 varchar(10), 商品总量 int)
- insert into @AAA values('A',100)
- insert into @AAA values('B',120)
- declare @BBB table (商品名称 varchar(10), 出库数量 int)
- insert into @BBB values('A', 10)
- insert into @BBB values('A', 20)
- insert into @BBB values('B', 10)
- insert into @BBB values('B', 20)
- insert into @BBB values('B', 30)
- select TA.商品名称,A-B AS 剩余数量 FROM
- (select 商品名称,sum(商品总量) AS A
- from @AAA
- group by 商品名称)TA,
- (select 商品名称,sum(出库数量) AS B
- from @BBB
- group by 商品名称)TB
- where TA.商品名称=TB.商品名称
- 二
- select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称
- 13 优化这句SQL语句
- Update tblExlTempYear
- SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC
- FROM tblExlTempYear,tblExlTempMonth
- where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ
- (1)、加索引:
- tblExlTempYear(GDXM,TXDZ)
- tblExlTempMonth (GDXM,TXDZ)
- (2)、删除无用数据
- (3)、转移过时数据
- (4)、加服务器内存,升级服务器
- (5)、升级网络系统
- Update tblExlTempYear
- SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC
- FROM tblExlTempYear (index indexY),tblExlTempMonth (index indexM)
- where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ
- 14 品种 日期 数量
- P0001 2002-1-10 10
- P0001 2002-1-10 11
- P0001 2002-1-10 50
- P0001 2002-1-12 9
- P0001 2002-1-12 8
- P0001 2002-1-12 7
- P0002 2002-10-10 5
- P0002 2002-10-10 7
- P0002 2002-10-12 0.5
- P0003 2002-10-10 5
- P0003 2002-10-12 7
- P0003 2002-10-12 9
- 结果要先按照品种汇总,再按照日期汇总,结果如下:
- P0001 2002-1-10 71
- P0001 2002-1-12 24
- P0002 2002-10-10 12
- P0002 2002-10-12 0.5
- P0003 2002-10-10 5
- P0003 2002-10-12 16
- SQL SERVER能做出这样的汇总吗…
- 15 在分組查循中with{cube|rollup}的區別是什么?
- 如:
- use pangu
- select firm_id,p_id,sum(o_price_quantity)as sum_values
- from orders
- group by firm_id,p_id
- with cube
- 與
- use pangu
- select firm_id,p_id,sum(o_price_quantity)as sum_values
- from orders
- group by firm_id,p_id
- with rollup
- 的區別是什么?
- CUBE 和 ROLLUP 之间的区别在于:
- CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
- ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
- 例如,简单表 Inventory 中包含:
- Item Color Quantity
- -------------------- -------------------- --------------------------
- Table Blue 124
- Table Red 223
- Chair Blue 101
- Chair Red 210
- 下列查询将生成小计报表:
- Select CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
- ELSE ISNULL(Item, 'UNKNOWN')
- END AS Item,
- CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
- ELSE ISNULL(Color, 'UNKNOWN')
- END AS Color,
- SUM(Quantity) AS QtySum
- FROM Inventory
- GROUP BY Item, Color WITH ROLLUP
- Item Color QtySum
- -------------------- -------------------- --------------------------
- Chair Blue 101.00
- Chair Red 210.00
- Chair ALL 311.00
- Table Blue 124.00
- Table Red 223.00
- Table ALL 347.00
- ALL ALL 658.00
- (7 row(s) affected)
- 如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:
- ALL Blue 225.00
- ALL Red 433.00
- 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 所返回结果集的功能;然而,
- ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。
- 16 假如我有两个表
- 表1(电话号码,是否存在)
- 表2(电话号码,是否拨打)
- 想查找表1中的电话号码是否在表2中存在,如果存在就更新表1中的是否存在字段为1。
- Update 表1 SET 是否存在=1
- Where EXISTS(Select * FROM 表2 Where 表2.电话号码 = 表1.电话号码)
- 17 用存储过程调用外部程序.
- 不过要做成com控件
- 用sp_OACreate存储过程)
- DECLARE @object int
- DECLARE @hr int
- DECLARE @src varchar(255), @desc varchar(255)
- EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
- IF @hr <> 0
- BEGIN
- EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
- Select hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
- RETURN
- END
找些不错的sql面试题-2
作者:admin 日期:2010-03-16
SQL代码
- 问题描述:
- 本题用到下面三个关系表:
- CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级
- BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
- BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期
- 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
- 要求实现如下15个处理:
- 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。
- 2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。
- 3. 查询借阅了"水浒"一书的读者,输出姓名及班级。
- 4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
- 5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。
- 6. 查询现有图书中价格最高的图书,输出书名及作者。
- 7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
- 8. 将"C01"班同学所借图书的还期都延长一周。
- 9. 从BOOKS表中删除当前无人借阅的图书记录。
- 10.如果经常按书名查询图书信息,请建立合适的索引。
- 11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。
- 12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。
- 13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
- 14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。
- 15.对CARD表做如下修改:
- a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。
- b. 为该表增加1列NAME(系名),可变长,最大20个字符。
- 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束
- --实现代码:
- Create TABLE BORROW(
- CNO int FOREIGN KEY REFERENCES CARD(CNO),
- BNO int FOREIGN KEY REFERENCES BOOKS(BNO),
- RDATE datetime,
- PRIMARY KEY(CNO,BNO))
- 2. 找出借书超过5本的读者,输出借书卡号及所借图书册数
- --实现代码:
- Select CNO,借图书册数=COUNT(*)
- FROM BORROW
- GROUP BY CNO
- HAVING COUNT(*)>5
- 3. 查询借阅了"水浒"一书的读者,输出姓名及班级
- --实现代码:
- Select * FROM CARD c
- Where EXISTS(
- Select * FROM BORROW a,BOOKS b
- Where a.BNO=b.BNO
- AND b.BNAME=N'水浒'
- AND a.CNO=c.CNO)
- 4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期
- --实现代码:
- Select * FROM BORROW
- Where RDATE<GETDATE()
- 5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者
- --实现代码:
- Select BNO,BNAME,AUTHOR FROM BOOKS
- Where BNAME LIKE N'%网络%'
- 6. 查询现有图书中价格最高的图书,输出书名及作者
- --实现代码:
- Select BNO,BNAME,AUTHOR FROM BOOKS
- Where PRICE=(
- Select MAX(PRICE) FROM BOOKS)
- 7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
- --实现代码:
- Select a.CNO
- FROM BORROW a,BOOKS b
- Where a.BNO=b.BNO AND b.BNAME=N'计算方法'
- AND NOT EXISTS(
- Select * FROM BORROW aa,BOOKS bb
- Where aa.BNO=bb.BNO
- AND bb.BNAME=N'计算方法习题集'
- AND aa.CNO=a.CNO)
- ORDER BY a.CNO DESC
- 8. 将"C01"班同学所借图书的还期都延长一周
- --实现代码:
- Update b SET RDATE=DATEADD(Day,7,b.RDATE)
- FROM CARD a,BORROW b
- Where a.CNO=b.CNO
- AND a.CLASS=N'C01'
- 9. 从BOOKS表中删除当前无人借阅的图书记录
- --实现代码:
- Delete A FROM BOOKS a
- Where NOT EXISTS(
- Select * FROM BORROW
- Where BNO=a.BNO)
- 10. 如果经常按书名查询图书信息,请建立合适的索引
- --实现代码:
- Create CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)
- 11. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)
- --实现代码:
- Create TRIGGER TR_SAVE ON BORROW
- FOR Insert,Update
- AS
- IF @@ROWCOUNT>0
- Insert BORROW_SAVE Select i.*
- FROM InsertED i,BOOKS b
- Where i.BNO=b.BNO
- AND b.BNAME=N'数据库技术及应用'
- 12. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)
- --实现代码:
- Create VIEW V_VIEW
- AS
- Select a.NAME,b.BNAME
- FROM BORROW ab,CARD a,BOOKS b
- Where ab.CNO=a.CNO
- AND ab.BNO=b.BNO
- AND a.CLASS=N'力01'
- 13. 查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出
- --实现代码:
- Select a.CNO
- FROM BORROW a,BOOKS b
- Where a.BNO=b.BNO
- AND b.BNAME IN(N'计算方法',N'组合数学')
- GROUP BY a.CNO
- HAVING COUNT(*)=2
- ORDER BY a.CNO DESC
- 14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句
- --实现代码:
- Alter TABLE BOOKS ADD PRIMARY KEY(BNO)
- 15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)
- --实现代码:
- Alter TABLE CARD Alter COLUMN NAME varchar(10)
- 15.2 为该表增加1列NAME(系名),可变长,最大20个字符
- --实现代码:
- Alter TABLE CARD ADD 系名 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嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
- --实现代码:
- Select SN,SD FROM S
- Where [S#] IN(
- Select [S#] FROM C,SC
- Where C.[C#]=SC.[C#]
- AND CN=N'税收基础')
- 2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
- --实现代码:
- Select S.SN,S.SD FROM S,SC
- Where S.[S#]=SC.[S#]
- AND SC.[C#]='C2'
- 3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
- --实现代码:
- Select SN,SD FROM S
- Where [S#] NOT IN(
- Select [S#] FROM SC
- Where [C#]='C5')
- 4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
- --实现代码:
- Select SN,SD FROM S
- Where [S#] IN(
- Select [S#] FROM SC
- RIGHT JOIN C ON SC.[C#]=C.[C#]
- GROUP BY [S#]
- HAVING COUNT(*)=COUNT(DISTINCT [S#]))
- 5. 查询选修了课程的学员人数
- --实现代码:
- Select 学员人数=COUNT(DISTINCT [S#]) FROM SC
- 6. 查询选修课程超过5门的学员学号和所属单位
- --实现代码:
- Select SN,SD FROM S
- Where [S#] IN(
- Select [S#] FROM SC
- GROUP BY [S#]
- HAVING COUNT(DISTINCT [C#])>5)







