姓 名: 总分:100分 得 分:
一、填空题:(10空格,每空格3分,共30分)
1、SQL Server 2000中使用的数据库对象包括: 表 、 视图 、 存储过程 、 函数 、 存储过程 等。
2、存储过程是一个 完成特定功能 的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
3、索引就一种特殊的 对数据库中表的一列或者多列特定排序的结构 ,数据库的搜索引擎可以利用它加速对数据的检索。
4、事务就是被绑定在一起作为一个 整体(单元) 的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会 回滚 到操作前状态,或者是上有个节点。
5、SQLServer2000中使用备份文件恢复数据库的写法是 RESTORE DATABASE XXXX FROM DISK = N'XXXX'
二、简答题(每题5分,共30分)
ORACLE数据库中:
1.解释冷备份和热备份的不同点以及各自的优点
热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。
2.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3.如何转换init.ora到spfile?
使用create spfile from pfile 命令
4.解释data block , extent 和 segment的区别(这里建议用英文术语)
data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5.给出两个检查表结构的方法
1、DESCRIBE命令
2、DBMS_METADATA.GET_DDL 包
6.怎样查看数据库引擎的报错s
alert log
三、SQL练习题(每题10分,共40分)
1.编写SQL,已知关系模式:
s(s#,sname)
c(c#,cname)
sc(s#,c#,score)
1找出选修了c1课程的学员;
方案一:
SELECT *
FROM s
WHERE s# IN (SELECT s#
FROM sc
WHERE c# = 'c1')
方案二:
SELECT *
FROM s
WHERE EXISTS (SELECT *
FROM sc
WHERE sc.c# = 'c1'
AND sc.s# = s.s#)
方案三:
SELECT s.*
FROM s,
c,
sc
WHERE s.sno = sc.sno
AND c.cno = sc.cno
AND c.cname = 'c1'
2找出未选修c2课程的学员;
方案一:
SELECT *
FROM s
WHERE s# NOT IN (SELECT s#
FROM sc
WHERE c# = 'c2')
方案二:
SELECT *
FROM s
WHERE NOT EXISTS (SELECT *
FROM sc
WHERE sc.c# = 'c2'
AND sc.s# = s.s#)
方案三:
SELECT s.sname
FROM s,
c,
sc
WHERE s.sname = sc.sname
AND c.cname = sc.cname
AND c.cname NOT IN ( 'c1' )
3找出至少包含了s2选修了的课程的学员;
SELECT * FROM sc a WHERE NOT EXISTS (SELECT * FROM sc b WHERE s#='s2' AND NOT EXISTS (SELECT * FROM sc c WHERE b.c#=c.c# AND a.s#=c.c#))
4找出选修了所有课程的学员.
SELECT s#
FROM sc
GROUP BY s#
HAVING Count(s#) = (SELECT Count(s#)
FROM sc)
2、有订单表Order,单号字段RefNo VARCHAR(10),需要实现自动编号,格式为YYYYMMXXXX,其中XXXX为序号,如:2004050001,2004050002……2004059999等,采用SQL实现新订单编号的思路。
计算列 自定义函数都可以
如何删除表中重复Name字段的数据,用SQL写出代码。
Select * from Temp
================
1A
2B
3B
4C
方案一:
DELETE FROM temp
WHERE id = (SELECT Max(id)
FROM temp a
WHERE a.name = temp.name)
方案二:
WITH cte
AS (SELECT Row_number()OVER(partition BY Name ORDER BY ID) AS RN
FROM A)
DELETE FROM cte
WHERE RN > 1
找出当月的天数
SELECT Datediff(dd, Dateadd(dd, 1 - Day(Getdate()), Getdate()), Dateadd(mm, 1, Dateadd(dd, 1 - Day(Getdate()), Getdate()))) 下载本文