谁能在10分钟内做完这些题目?
(1)请按要求写出相应的sql语句,各条sql语句之间没有前后的关系。如果非标准sql,请注明使用何种数据库。
表a中有如下四个字段:m 整型,n整形,x字符型,y时间型。通过m字段可以唯一确定一条记录;n字段默认为0;m,n,y字段为非空字段,x字段可空。
1.创建该表,体现出上面所提要求。并往该表插入一条m=1,n=2,x='abc',y为当前数据库时间的记录。
2.从表A中,统计出m字段大于500,并且y早于当前数据库时间一天,并且字段x取值不重复的记录的数目。
3.从表A中,统计出字段x的各种不同取值的记录数目,并且只把记录数目多于5条的选出来。
4.修改表A结构,将n字段默认值设为1。
5.删除表A中y字段取值介于前一天当前数据库时间和数据库当前时间的记录。
6.表b与表a结构相同,将表B中n字段值大于500的记录插入A表。
7.更新表A中的m字段值介于5和15之间记录,使其x字段值改为'datang',y字段值改为2004年1月1日12点12分12秒。
8.在表A基础上,建立m,n字段的联合唯一索引。
9.A表中n字段为表B的外键,对应表B中的i字段,表B中还有一个字段J,表示对应i字段的文字信息,为字符型。联合查询A,B表,查询出A表中的所有字段,所有记录,并显示n字段对应的B表中的文字信息。
10.表A中m字段为一个流水号,每插入一条记录,取当前表中m字段的最大值加1。请为该字段创建一种合适的数据库对象或者数据类型,并写出创建该种数据库对象或类型的sql语句。
(2)请用自己的语言描述数据库中锁的概念、出现的原因;以及你所接确过的所有数据库中锁的类型,记录锁的系统表的名称,以及察看锁和除锁的sql语句。
(3)表中有400条记录,要用一个查询得到该表列信息,以便用该查询返回 resultset的getmetadata()方法得到列的信息,该查询为:
(4)有需求:有一些资源(resources)和用户(users)的信息要存储。(用户可添加资源和访问资源)
(添加资源时,需保存添加者信息)
(访问资源时,需记录资源被访问的次数)
(资源名是res_name;用户名是user_name)
1.建库。
2.列资源访问排行,按访问次数由大到小列出资源名,添加者和访问数。
3.列资源添加排行,按资源个数由大到小列出用户名和添加资源数。
问题点数:10、回复次数:28Top
1 楼lsqkeke(可可)回复于 2006-06-02 16:10:55 得分 0
题目阅读并且完全理解题意也要10分钟Top
2 楼ales7887(初出庐山)回复于 2006-06-02 16:12:57 得分 0
10分钟可以把这些题分析完就不错了
谁这么变态让10分钟做完的?Top
3 楼bochengcool()回复于 2006-06-02 16:16:29 得分 0
老总啊,不做完的话,不能去游玩,并且薪金减半Top
4 楼bochengcool()回复于 2006-06-02 16:17:45 得分 0
谁能不限时地做完呢?给我答案吧?Top
5 楼itblog(Just for wife!)回复于 2006-06-02 16:19:51 得分 0
10分钟,再开天在的玩笑~Top
6 楼fire_qu(金迷之蓝色忧郁)回复于 2006-06-02 18:02:57 得分 0
光看就要个10分钟了,还做呢,让他来玩玩?不知道邹老大行不,呵呵!Top
7 楼Reeezak(坚持信念)回复于 2006-06-02 18:37:46 得分 0
10分钟做完?
那是“天外飞仙”才能办到的Top
8 楼wlinglong(灵龙)回复于 2006-06-03 11:00:18 得分 0
10分钟刚刚看明白需求.555555555 哭
Top
9 楼zjcxc(邹建)回复于 2006-06-03 12:33:53 得分 0
出题人可以.
或者不算理解题意的时间, 只算做的时间Top
10 楼filebat(Mark)回复于 2006-06-03 16:35:51 得分 0
试着做了一下,发现有些不会。
看来,要练练基本功了。
觉得用来练习也不错的。
要不要贴出代码来,大家讨论讨论?
Top
11 楼caobin518(linlin)回复于 2006-06-04 11:18:57 得分 0
题目不难,但是要10分钟就干完它。似乎出题人有点变态
同意上一楼的说法。贴代码出来讨论。。。现在在网吧,今晚回家后贴代码Top
12 楼xeqtr1982(Visual C# .NET)回复于 2006-06-04 12:17:52 得分 0
10分钟....Top
13 楼xiaoniu20(一天接一分)回复于 2006-06-05 13:18:20 得分 0
贴出代码来,大家学习学习Top
14 楼rouqu(石林#黄果树)回复于 2006-06-05 16:25:37 得分 0
回家看看Top
15 楼bochengcool()回复于 2006-06-06 11:38:39 得分 0
代码来啊。Top
16 楼hhwlc(欧文)回复于 2006-06-06 12:41:28 得分 0
学习啊。
期望看到大家的讨论代码。
upTop
17 楼tntzbzc(华裔大魔王—抗日要从娃娃抓起)回复于 2006-06-06 17:51:16 得分 0
楼主
这题是不是你从教授办公室偷出来的考试题啊?Top
18 楼wgz4585()回复于 2006-06-07 17:34:07 得分 0
让你们老总10分钟整完我看看Top
19 楼jwt1982(叛逆者)回复于 2006-06-07 17:48:58 得分 0
看了一下,光看题目,加理解题目,消耗我3分钟Top
20 楼dutguoyi(新鲜鱼排)回复于 2006-06-08 19:50:55 得分 0
牛Top
21 楼dssw(易腾软件--开发软件的软件 http://www.etoward.com/)回复于 2006-06-09 16:12:01 得分 0
牛牛
Top
22 楼wangdehao(找找找(现在很幸福))回复于 2006-06-09 16:39:56 得分 0
得大牛才行。。。Top
23 楼yanganquan(安全)回复于 2006-06-10 16:50:23 得分 0
题不是很难,可量有点大,还要加上看题的时间,应该没几个人搞的定哟Top
24 楼jinliangliu(KingNa)回复于 2006-06-12 11:21:45 得分 0
十分鐘能搞掂的人就真是牛人啦﹐呵呵......Top
25 楼yoncen(来自永州的异蛇@_@!!)回复于 2006-06-12 16:32:03 得分 0
/* 表a中有如下四个字段:m 整型,n整形,x字符型,y时间型。
通过m字段可以唯一确定一条记录;n字段默认为0;m,n,y字段为非空字段,x字段可空。
*/
/*1.创建该表,体现出上面所提要求。并往该表插入一条m=1,n=2,x='abc',y为当前数据库时间的记录。*/
-- 判斷當前表是否已經存在,如存在則刪除
IF EXISTS(SELECT * FROM sysobjects
WHERE name='a' AND xtype='U')
BEGIN
TRUNCATE TABLE a
DROP TABLE a
END
-- 創建表a
CREATE TABLE a(m INT UNIQUE NOT NULL,
n INT NOT NULL DEFAULT 0,
x VARCHAR(50),
y DATETIME NOT NULL)
-- 插入資料
INSERT INTO a
SELECT 1,2,'abc',GETDATE()
UNION ALL
SELECT 501,2,'abc',GETDATE()-1
UNION ALL
SELECT 502,2,'abc',GETDATE()-1
UNION ALL
SELECT 503,2,'anx',GETDATE()-1
/*2.从表A中,统计出m字段大于500,并且y早于当前数据库时间一天,并且字段x取值不重复的记录的数目。*/
SELECT COUNT(DISTINCT x) AS nCount
FROM a
WHERE m>500 AND y<=(GETDATE()-1) /*DATEADD(day,-1,GETDATE())效果一樣*/
/*3.从表A中,统计出字段x的各种不同取值的记录数目,并且只把记录数目多于5条的选出来。*/
SELECT x,COUNT(*) AS nCount
FROM a
GROUP BY x
HAVING COUNT(*)>5
/*4.修改表A结构,将n字段默认值设为1。*/
--當表本身有默認值時,是不能新增默認值的.不知道如何修改默認值?
/*5.删除表A中y字段取值介于前一天当前数据库时间和数据库当前时间的记录。*/
DELETE * FROM a
WHERE y BETWEEN GETDATE()-1 AND GETDATE()
/*6.表b与表a结构相同,将表B中n字段值大于500的记录插入A表。*/
INSERT INTO a
SELECT b.* FROM b
WHERE b.n>500
/*7.更新表A中的m字段值介于5和15之间记录,使其x字段值改为'datang',y字段值改为2004年1月1日12点12分12秒*/
UPDATE a SET x='datang',y='2004.1.1 12:12:12 AM'
WHERE m BETWEEN 5 AND 15
/*8.在表A基础上,建立m,n字段的联合唯一索引。*/
ALTER TABLE [a]
ADD CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
(
[m],
[n]
) ON [PRIMARY]
/*9.A表中n字段为表B的外键,对应表B中的i字段,表B中还有一个字段J,表示对应i字段的文字信息,为字符型。
联合查询A,B表,查询出A表中的所有字段,所有记录,并显示n字段对应的B表中的文字信息。*/
SELECT a.m,a.n,ISNULL(b.J,'') AS J,a.x,a.y
FROM a a
LEFT JOIN b b
ON a.n=b.i
10.表A中m字段为一个流水号,每插入一条记录,取当前表中m字段的最大值加1。
请为该字段创建一种合适的数据库对象或者数据类型,并写出创建该种数据库对象或类型的sql语句。
--辦法有很多,其中可以修改m字段為自增量字段
--我這里採用觸發器來解決
CREATE TRIGGER update_m
ON a
FOR INSERT
AS
SET NOCOUNT ON
BEGIN TRANSACTION
-- 取得最大值
DECLARE @M INT
DECLARE @maxM INT
SELECT @M = m FROM inserted
SELECT @MaxM = MAX(m)+1 FROM a WITH (HOLDLOCK) --排它鎖
-- 更新當前新增記錄m字段值
UPDATE a SET a.m = @MaxM
WHERE a.m = @M
IF @@ERROR = 0 --無錯誤則提交事務,否則回滾事務
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
SET NOCOUNT OFF
/*俺花了15分鐘,呵呵!反映拍磚!!!*/
-- yoncen
-- 2006.06.12 04:31PM
Top
26 楼yoncen(来自永州的异蛇@_@!!)回复于 2006-06-12 16:41:38 得分 0
--以此份為準!!
/* 表a中有如下四个字段:m 整型,n整形,x字符型,y时间型。
通过m字段可以唯一确定一条记录;n字段默认为0;m,n,y字段为非空字段,x字段可空。
*/
/*1.创建该表,体现出上面所提要求。并往该表插入一条m=1,n=2,x='abc',y为当前数据库时间的记录。*/
-- 判斷當前表是否已經存在,如存在則刪除
IF EXISTS(SELECT * FROM sysobjects
WHERE name='a' AND xtype='U')
BEGIN
TRUNCATE TABLE a
DROP TABLE a
END
-- 創建表a
CREATE TABLE a(m INT UNIQUE NOT NULL,
n INT NOT NULL ,
x VARCHAR(50),
y DATETIME NOT NULL)
-- 為n字段加預設值
ALTER TABLE a ADD CONSTRAINT
DF_a_n DEFAULT 0 FOR n
-- 插入資料
INSERT INTO a
SELECT 1,2,'abc',GETDATE()
UNION ALL
SELECT 501,2,'abc',GETDATE()-1
UNION ALL
SELECT 502,2,'abc',GETDATE()-1
UNION ALL
SELECT 503,2,'anx',GETDATE()-1
/*2.从表A中,统计出m字段大于500,并且y早于当前数据库时间一天,并且字段x取值不重复的记录的数目。*/
SELECT COUNT(DISTINCT x) AS nCount
FROM a
WHERE m>500 AND y<=(GETDATE()-1) /*DATEADD(day,-1,GETDATE())效果一樣*/
/*3.从表A中,统计出字段x的各种不同取值的记录数目,并且只把记录数目多于5条的选出来。*/
SELECT x,COUNT(*) AS nCount
FROM a
GROUP BY x
HAVING COUNT(*)>5
/*4.修改表A结构,将n字段默认值设为1。*/
-- 刪除n字段默認預設
ALTER TABLE a DROP CONSTRAINT
DF_a_n
-- 增加n字段新預設值
ALTER TABLE a ADD CONSTRAINT
DF_a_n DEFAULT 1 FOR n
/*5.删除表A中y字段取值介于前一天当前数据库时间和数据库当前时间的记录。*/
DELETE * FROM a
WHERE y BETWEEN GETDATE()-1 AND GETDATE()
/*6.表b与表a结构相同,将表B中n字段值大于500的记录插入A表。*/
INSERT INTO a
SELECT b.* FROM b
WHERE b.n>500
/*7.更新表A中的m字段值介于5和15之间记录,使其x字段值改为'datang',y字段值改为2004年1月1日12点12分12秒*/
UPDATE a SET x='datang',y='2004.1.1 12:12:12 AM'
WHERE m BETWEEN 5 AND 15
/*8.在表A基础上,建立m,n字段的联合唯一索引。*/
ALTER TABLE [a]
ADD CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
(
[m],
[n]
) ON [PRIMARY]
/*9.A表中n字段为表B的外键,对应表B中的i字段,表B中还有一个字段J,表示对应i字段的文字信息,为字符型。
联合查询A,B表,查询出A表中的所有字段,所有记录,并显示n字段对应的B表中的文字信息。*/
SELECT a.m,a.n,ISNULL(b.J,'') AS J,a.x,a.y
FROM a a
LEFT JOIN b b
ON a.n=b.i
10.表A中m字段为一个流水号,每插入一条记录,取当前表中m字段的最大值加1。
请为该字段创建一种合适的数据库对象或者数据类型,并写出创建该种数据库对象或类型的sql语句。
--辦法有很多,其中可以修改m字段為自增量字段
--我這里採用觸發器來解決
CREATE TRIGGER update_m
ON a
FOR INSERT
AS
SET NOCOUNT ON
BEGIN TRANSACTION
-- 取得最大值
DECLARE @M INT
DECLARE @maxM INT
SELECT @M = m FROM inserted
SELECT @MaxM = MAX(m)+1 FROM a WITH (HOLDLOCK) --排它鎖
-- 更新當前新增記錄m字段值
UPDATE a SET a.m = @MaxM
WHERE a.m = @M
IF @@ERROR = 0 --無錯誤則提交事務,否則回滾事務
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
SET NOCOUNT OFF
/*俺花了15分鐘,呵呵!反映拍磚!!!*/
-- yoncen
-- 2006.06.12 04:31PMTop
27 楼yoncen(来自永州的异蛇@_@!!)回复于 2006-06-13 08:25:53 得分 0
歡迎拍磚?Top
28 楼shareinfo(长江之怀)回复于 2006-06-13 15:10:00 得分 0
十分钟内完成,我是做不到的......Top




