当前位置:首页 » 参考文献 » 数据库例题

数据库例题

发布时间: 2021-03-12 06:24:44

1. 数据库的题目

、等级查询

题目:员工信息表中有员工ID、姓名、上级员工ID字段,现要求用一条语句,查询出全部员工的ID、姓名及级别——最高为1级,其下依次为2、3、4等,如下图所示:

对于排序,我原来只知道利用ROWNUM伪列:

SELECT E.*,
ROWNUM
FROM (SELECT *
FROM EMPLOYEES
ORDER BY SALARY DESC) E

然后再用这个结果集和其他表关联,针对本题,这种方法可以查出每个员工在整个公司以及本部门工资的排名,但在我看来有如下两个问题:

1、一张事实表关联两次,效率低下;

2、无法查询出每个员工在整个公司以及本部门工资的排名,除非用循环,但又不是一条语句了。

数据库表中对数值字段进行排名,应使用RANK函数,该函数的作用就是计算一个值在一组值中的排名,返回值为数值型,形式为RANK() OVER (PARTITION BY … ORDER BY …),其中:

1、PARTITION BY关键字为用于排序的分组,也就是说如果查询全部数据中的排名,则该关键字可省略;

2、ORDER BY关键字即为按哪个字段进行排序,空或ASC为升序,DESC为降序,与标准SQL没区别;

3、如果两行数据用于排序的字段值完全相同,则二者的RANK返回值(序号)也相同,序号不连续(英文是Identical salary values receive the same rank and cause nonconsecutive ranks),还有类似的DENSE_RANK()函数,相同值的序号相同,序号连续;ROW_NUMBER()函数,每个值的序号唯一,相同值有可能按照ROWNUM的次序编号(这个不确定,官方文档没说,我推测的-_-),这三个函数的使用方法相同。

2. 数据库试题

二、袭选择题
1、B
2、B
3、D
4、C
5、D
6、C
7、D
8、C
9、A
10、D
三、判断题
1、对
2、对
3、错,数据文件只能有一个,日志可以有多个
4、错
5、错,float(24)最多7位
6、对
7、对
8、对
9、错
10、对
11、对
12、对
13、对
14、对
15、错
做完了,也检查过了。

3. 数据库习题。

环境:sqlserver,参见下面代码,有问题再追问。

createtablememeber
(memb_novarchar(10),namevarchar(10),dobvarchar(10));
createtablebooks
(isbnvarchar(10),authorsvarchar(10),publishervarchar(10));
createtableborrowed
(memb_novarchar(10),isbnvarchar(10),datevarchar(10));

insertintomemeber
select'001','wangp','a'unionall
select'002','wangx','b'unionall
select'003','heihei','c'unionall
select'004','wjq','d'unionall
select'005','zhh','e'unionall
select'006','linlin','f'unionall
select'007','chengou','g';

insertintobooks
select'00A','Tom','P1'unionall
select'00B','Jack','P1'unionall
select'00C','Jerry','P1'unionall
select'00D','John','P1'unionall
select'00E','Alex','P1'unionall
select'00F','Alex','P2'unionall
select'00G','John','P2'unionall
select'00H','John','P3'unionall
select'00I','John','P3'unionall
select'00J','Alex','P3'UNIONALL
SELECT'00K','Alex','P3'UNIONALL
SELECT'00L','John','P3';

insertintoborrowed
select'001','00A','TIME1'unionall
select'001','00B','TIME2'unionall
select'002','00C','TIME3'unionall
select'001','00D','TIME4'unionall
select'003','00B','TIME5'unionall
select'001','00E','TIME6'unionall
select'002','00F','TIME7'unionall
select'002','00A','TIME8'unionall
select'002','00I','TIME9'unionall
select'003','00F','TIME10'unionall
select'003','00I','TIME11'unionall
select'003','00B','TIME12'unionall
select'004','00B','TIME13'unionall
select'005','00H','TIME14'unionall
select'005','00I','TIME15'unionall
select'005','00J','TIME20'UNIONALL
select'005','00K','TIME15'unionall
select'005','00L','TIME20'UNIONALL
select'001','00C','TIME16'unionall
select'001','00A','TIME17'unionall
select'006','00G','TIME18'unionall
select'001','00J','TIME19';

--a.
,borrowedb,booksc
wherea.memb_no=b.memb_no
andb.isbn=c.isbn
andpublisher='P1'

--b.
(
select*frombooksbwherepublisher='P1'
andnotexists(select*fromborrowedc
wherea.memb_no=c.memb_noandb.isbn=c.isbn))

--c.
select*frommemeberwherememb_noin(selectmemb_nofrom(
selectc.memb_no,c.isbnfrombooksb,borrowedc
whereb.publisher='P1'andb.isbn=c.isbn
groupbyc.memb_no,c.isbn)tmpgroupbymemb_no
havingCOUNT(*)>=5)

--d.
select*frommemeberwherememb_noin(selectmemb_nofrom(
selectc.memb_no,c.isbnfrombooksb,borrowedc
whereb.isbn=c.isbngroupbyc.memb_no,c.isbn)tmp
groupbymemb_no
havingCOUNT(*)>=5)

--e.
selectsum(cnt)/(selectCOUNT(*)frommemeber)from(
selectmemb_no,COUNT(*)cntfromborrowedgroupbymemb_no)tmp

4. 数据库编程练习题

1、select * from 图书 where 出版单位='高等教育出版社出版' and 单价 >= 20。
2、select * from 图书 where 出版单位= '清华大学版' order by 单价。
3、select 借书证号, count(*) from 借阅 group by 借书证号。
4、select b.借书证号,b.姓名,b.单位,a.书名 from 图书 a,读者 b,图书 c where a.总编号=c.总编号 and b.借书证号 = c.借书证号。
5、select * from ZGJK where 基本工资 between 300 and 500。
第六第七无能为力了,抱歉

5. 数据库题目

  1. 人员(科研人员)、机构(科研机构、科研门户、推广中心、保障平台)、科研项目(纵向、横向)、预算(科研经费)、活动(学术活动、科研经费)、决策、评估。

  2. 人员(员工编号pk、姓名、职位编码)、机构(机构编码pk、机构类别、)、科研项目(项目编码pk,名称,类别,生效决策编码)、预算(预算编码、项目编码、日期、预算额度、审批人)、活动(活动编码pk、项目编码、机构编码、成本数值、时间)、决策(决策编码、项目、决策人编码)、评估(评估编码pk、决策编码、评估人、评估内容)

  3. 见上

  4. E-R图就不画了,太复杂~

---------------------------------------------

最后一句话,决定系统ER设计的是业务流程与扩展期望,而简单的一句话不可能讲清楚需求,而系统设计者的见识(是否了解业务需求)往往是E-R设计好坏(是否更适合)的关键。

6. SQL数据库的例题请教一下大家

看了你的题,首先几个表需要说明一下Out_Goods和In_Goods在定义表时少了Sh_address列,列的属性参考Provider表中的Address

问题解答:
问题1、自定义一个函数,计算供货商编号为PD001所提供产品的平均价格,如果平均价格〉70,则输出“价格适中”;如果平均价格<=70,则输出价格较低。
CREATE FUNCTION [dbo].[fn_calc_avg_price]
(
@PID char(10) = 'PD001'-----------货商编号,此处默认值为PD001
)

RETURNS varchar(50) AS

BEGIN
DECLARE @vchPriceDesc varchar(50)
DECLARE @mnyPriceAvg money

SELECT @mnyPriceAvg = AVG(PPrice)
FROM Proct WHERE PID = @PID

IF (@mnyPriceAvg > 70) SET @vchPriceDesc = '价格适中'
IF (@mnyPriceAvg <= 70) SET @vchPriceDesc = '价格较低'

RETURN @vchPriceDesc
END

问题2、创建一个内联表值函数,返回一个时间段内的出货信息,要求包括出货商品名称、供货商名称、出货价格、出货数量、出货日期。
CREATE FUNCTION [dbo].[fn_get_out_goods_info]
(
@dtBeginTime datetime, --------------------------时间段的起始时间
@dtEndTime datetime --------------------------时间段的终止时间
)

RETURNS @TempTable table
(
out_proct_name varchar(20),
out_provider_name varchar(20),
out_proct_price money,
out_proct_num int,
out_date datetime
)
AS

BEGIN
INSERT INTO @TempTable
SELECT
Proct.PName,
Provider.ProviderName,
Out_Goods.OutPrice,
Out_Goods.OutNum,
Out_Goods.OutDate
FROM
Proct, Provider, Out_Goods
WHERE
Provider.ProviderId = Out_Goods.ProviderId
AND Proct.PId = Out_Goods.PId
AND Out_Goods.OutDate <= @dtEndTime
AND Out_Goods.OutDate >= @dtBeginTime
RETURN
END

问题3、创建一个after触发器,当Provider 供货商信息表中的ProviderId发生更改时,同时更改In_Goods进货信息表和Out_Goods出货信息表ProviderId字段的值。
CREATE TRIGGER [trig_update_proID]
ON [dbo].[Provider]
AFTER UPDATE

AS

IF UPDATE(ProviderID)
BEGIN
UPDATE In_Goods SET ProviderID = (SELECT ProviderID FROM INSERTED) WHERE ProviderID = (SELECT ProviderID FROM DELETED)
UPDATE Out_Goods SET ProviderID = (SELECT ProviderID FROM INSERTED) WHERE ProviderID = (SELECT ProviderID FROM DELETED)
END

问题4、定义一个存储过程,要求使用游标,计算某段时间内售出产品的平均价格。

坦白的说,其实没必要使用游标,既然用了,那就顺便用下WHILE循环好了
CREATE PROCEDURE [dbo].[sp_calc_part_sales_price]
(
@dtBeginTime datetime,
@dtEndTime datetime
)
AS

DECLARE @mnyTotalPrice money
DECLARE @mnyCurPrice money
DECLARE @nCount int SELECT @nCount = 0

DECLARE cursPrice CURSOR LOCAL
FOR SELECT OutPrice FROM Out_Goods WHERE Out_Goods.OutDate <= @dtEndTime AND Out_Goods.OutDate >= @dtBeginTime

OPEN cursPrice
FETCH NEXT FROM cursPrice INTO @mnyCurPrice

WHILE @@FETCH_STATUS=0
BEGIN
SET @nCount = @nCount + 1
SET @mnyTotalPrice = @mnyTotalPrice + @mnyCurPrice
FETCH NEXT FROM cursPrice INTO @mnyCurPrice
END

IF @nCount = 0 SELECT 0 AS '平均价格'
IF @nCount > 0 SELECT @mnyTotalPrice/@nCount AS '平均价格'

OK,就这样吧,如果有不明白或者我写错的地方,再联系,Good Luck!

7. 数据库练习题(帮我做个答案)

1 disp stru
2 modi stru
3 (两条)
3
insert blank
4 list all for 专业="网络技术"
太多了

8. SQL数据库练习题

1. SQL Server 2000是典型的关系型数据库产品。 ( 1 )
2. 在一台计算机上可以同时运行多个版本的SQL Server。 ( 1 )
3. 在SQL Server中日志文件是维护数据库完整性的重要工具。 ( 0 )
4. 在定义数据表时,定义某列为标识列的关键字是Identity。 ( 1 )
5. 浮点数据类型的优点是能够存储范围非常大的数字,但容易发生误差。 ( 0 )
6. 数据库完整性的目的是为了防止错误信息输入和输出。 ( 0 )
7. 在Update语句中,一次可以更新多个表。 ( 0)
8. 尽量使用Select * ,可以加快查询速度。 ( 0 )
9. 在SQL Server 2000中表示注释可以用类似C语言的/*...*/和//。 ( 0 )
10. 在SQL Server中,RTRIM函数删除字符串右边的空白字符。 ( 1 )
11. 一个表只能有一个聚集索引(簇索引)。 ( 1 )
12. SQL查询语言中,如果没有指定排序方式,则默认是升序方式。 ( 1 )
13. 在SQL Server 2000中ntext类型的字段不能进行排序操作。 ( 0 )
14. 在SQL Server 2000中bit类型的字段不能建立索引。 ( 1 )
15. 在被定义为唯一索引的列上的数据不能有重复的值。 ( 1 )
16. 在被定义为唯一索引的列上的数据不允许空。 ( 0可以的但是只能有一个null值 )
17. 在SQL Server中,每张表都应该建立一个索引,以提高查询速度。 ( 0 )
18. 视图在SQL Server中是一张虚拟表。 ( 1 )
19. 当一个视图由2个以上基本表构成时,不能进行删除视图中的数据。 ( 0 )
20. 在SQL Server中,触发器是一种特殊的存储过程。 ( 1 )
21. 由于存储过程是解释执行,所以每次执行时都要检查是否有语法错误。 ( 0 )
22. 可以在用户正在使用的数据库上执行数据库恢复操作。 ( 0 )
1表示正确

热点内容
涂鸦论文 发布:2021-03-31 13:04:48 浏览:698
手机数据库应用 发布:2021-03-31 13:04:28 浏览:353
版面217 发布:2021-03-31 13:04:18 浏览:587
知网不查的资源 发布:2021-03-31 13:03:43 浏览:713
基金赎回参考 发布:2021-03-31 13:02:08 浏览:489
悬疑故事范文 发布:2021-03-31 13:02:07 浏览:87
做简单的自我介绍范文 发布:2021-03-31 13:01:48 浏览:537
战略地图参考 发布:2021-03-31 13:01:09 浏览:463
收支模板 发布:2021-03-31 13:00:43 浏览:17
电气学术会议 发布:2021-03-31 13:00:32 浏览:731