测试(一)试题及答案

《MySchool数据库设计优化》内部测试-机试试卷

某中心ACCP的某班毕业后,学员纷纷找到了满意的工作。到了年底调薪的阶段了,创建一个存储过程,对这批学员进行按级别调薪。数据库名为Wages,保存学员就业信息表的结构WageInfo,见表1;保存学员信息的表为StudentInfo,见表2。

 

表 1:学员就业信息表:WagesInfo


字段名称


字段数据类型


字段具体说明


CompanyID


int


就业单位编号,表的主键,初始值为1,自增


CompanyName


varchar(50)


就业单位名称,非空


Poste


varchar(50)


岗位名称,非空

 

表 2:学员信息表:StudentInfo


字段名称


字段数据类型


字段具体说明


ID


int


学号,表的主键,初始值为1,自增


Name


varChar(10)


学员姓名,非空


CompanyID


int


就业单位编号,外键,可空


PosteDate


datetime


就业日期,可空


Wage


int


工资,可空

 

要求:

按下面的要求,编写T-SQL语句,对学员就业和目前的工资进行分析。

1)创建数据库Wages。如果数据库Wages已存在,那么,先删除再创建。

2)根据表1的表结构,创建WagesInfo表。如果表WagesInfo已存在,则先删除再创建该表。

3)根据表1的表结构,创建StudentInfo表。如果表StudentInfo已存在,则先删除再创建该表。

4)添加WagesInfo表和StudentInfo表的主外键约束。

Alter  table  studentinfo

Add constraint FK_Wages_Student_CompanyID foreign key (companyid)

Referrence wages(companyid)

5)在StudentInfo表和WagesInfo表中插入至少5条测试数据。

6)在StudentInfo表PosteDate列上创建非聚集索引。

Create nonclustered index IX_PostDate

On studentinfo(PostData)

With fillfactor=30

7)创建视图,并执行查询获得已经就业的学员记录。

8)创建视图,并执行查询获得目前尚未就业的学员记录。

9)创建并执行存储过程,查询是否有一半程序员的工资在3000元之上。如果不到分别每次给每个程序员加薪50元,至之一半程序员的工资达到3000元。

10)创建并执行存储过程,查询程序员平均工资在3500元,如果不到则每个程序员每次加50元,至到所有程序员平均工资达到3500元。

11)保存SQL代码,分离数据库,生成压缩包,提交符合命名规范的练习答案。

------------------------------------------------参考答案------------------------------------------------

USE master
GO
----------------1.建库----------------
--检验数据库是否存在,如果存在则删除此数据库;如果不存在则新建
IF exists(SELECT * FROM sysdatabases WHERE name=‘Wages‘)
    DROP DATABASE Wages
GO
CREATE DATABASE Wages
GO

----------------2.建表----------------
USE Wages
GO

CREATE TABLE WagesInfo  --学员就业信息表
(
    CompanyID int identity(1,1) primary key,  --工资编号
    CompanyName  varchar(50) NOT NULL ,       --学员姓名
    Poste varchar(50) NOT NULL                --岗位名称

)
GO

----------------3.建表----------------
CREATE TABLE StudentInfo  -- 学员信息表
(
    ID int identity(1,1) primary key,  --学号
    Name  varchar(10) NOT NULL ,       --学员姓名
    CompanyID int,                     --就业单位编号
    Wage  int,                         --学员工资
    PosteDate datetime                 --就业日期
)
GO

----------------4.添加约束----------------
ALTER TABLE StudentInfo  WITH CHECK ADD  CONSTRAINT FK_Student_Wages FOREIGN KEY(CompanyID)
REFERENCES WagesInfo (CompanyID)
GO

----------------5.插入数据----------------
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘好好软件公司‘,‘软件售前工程师‘)
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘好运金融公司‘,‘软件测试工程师‘)
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘诚信理财公司‘,‘软件开发工程师‘)
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘华彩软件工作室‘,‘软件开发工程师‘)
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘新浪网‘,‘网页设计开发师‘)
INSERT INTO WagesInfo(CompanyName,Poste)VALUES(‘团购网‘,‘网页开发师‘)

INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘白可‘,1,3000,‘2010-11-10‘)
INSERT INTO StudentInfo(Name,CompanyID)VALUES(‘张丰宛‘,null)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘蔡绢‘,1,1800,‘2010-11-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘周小林‘,2,1300,‘2010-10-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘王阳‘,3,5000,‘2010-10-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘刘琳‘,4,1500,‘2010-9-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘刘翔‘,2,1500,‘2010-11-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘张琳‘,3,1500,‘2010-11-10‘)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘刘晓晓‘,null,null,null)
INSERT INTO StudentInfo(Name,CompanyID,Wage,PosteDate)VALUES(‘赵亮‘,4,2500,‘2010-9-10‘)
GO
--如果需要重置该表请执行下列语句
--truncate table WagesInfo
--truncate table StudentInfo

-------------------6.创建索引--------------------------------
IF EXISTS (SELECT name FROM sysindexes
          WHERE name = ‘ix_Student_PosteDate‘)
DROP INDEX StudentInfo.ix_Student_PosteDate  --删除索引
GO

CREATE NONCLUSTERED INDEX ix_Student_PosteDate
   ON StudentInfo(PosteDate)
       WITH FILLFACTOR = 30
GO

------------------6.创建视图--------------------------------
--查询已经就业的学员记录
IF EXISTS (SELECT * FROM sysobjects WHERE name=‘vw_GetWagesStudent ‘)
    DROP VIEW vw_GetWagesStudent
GO
CREATE VIEW vw_GetWagesStudent
AS
  SELECT Name,CompanyName,Poste,Wage
  FROM StudentInfo
  WITH (INDEX=ix_Student_PosteDate)
  INNER JOIN WagesInfo ON StudentInfo.CompanyID = WagesInfo.CompanyID
  WHERE  StudentInfo.CompanyID is not null
GO

SELECT * FROM vw_GetWagesStudent
GO

------------------8.查询目前尚未就业的学员----------------
IF EXISTS (SELECT * FROM sysobjects WHERE name=‘vw_GetNoWagesStudent ‘)
    DROP VIEW vw_GetNoWagesStudent
GO
CREATE VIEW vw_GetNoWagesStudent
AS
  SELECT ID,Name
  FROM StudentInfo
  WHERE  StudentInfo.PosteDate is null
GO

SELECT * FROM vw_GetNoWagesStudent

--------------------9.创建存储过程--------------------
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name=‘proc_SumWage‘)
    DROP PROCEDURE proc_SumWage
GO
CREATE PROCEDURE proc_SumWage
    @WageA INT,
    @WageB INT,
    @totalWage INT
AS
WHILE(1=1)
    BEGIN
        IF (SELECT COUNT(*) FROM wagesInfo) > 2 * (SELECT COUNT(*) FROM StudentInfo WHERE Wage>=@WageA)
            UPDATE StudentInfo SET @totalWage=@totalWage+@WageB,Wage=Wage+@WageB
            WHERE CompanyID is null
    ELSE
        BREAK
    END
PRINT‘总共加薪:‘ + CONVERT(VARCHAR,@totalWage) + ‘元‘
PRINT‘加薪后学员的工资列表:‘
SELECT * FROM StudentInfo
GO

--调用存储过程
EXEC proc_SumWage @WageA=3000,@WageB=50,@totalWage=0
EXEC proc_SumWage @WageA=4000,@WageB=50,@totalWage=0
EXEC proc_SumWage @WageA=6000,@WageB=50,@totalWage=0

--------------10.创建存储过程----------------------
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name=‘proc_AvgWage‘)
    DROP PROCEDURE proc_AvgWage
GO
CREATE PROCEDURE proc_AvgWage
    @WageA INT,
    @WageB INT,
    @totalWage INT
AS
WHILE (1=1)
    BEGIN
        IF ((SELECT AVG(Wage) FROM StudentInfo)<=@WageA)
            UPDATE StudentInfo SET @totalWage=@totalWage+@WageB,Wage=Wage+@WageB
    ELSE
        BREAK
    END
PRINT‘总共加薪:‘ + CONVERT(VARCHAR,@totalWage)+‘元‘
PRINT‘加薪后学员的工资列表:‘
SELECT * FROM StudentInfo
GO

--调用存储过程
EXEC proc_AvgWage @WageA=3500,@WageB=50,@totalWage=0

笔试题

《MySchool数据库设计优化》内部测试-笔试试卷

1)  在SQL Server 中,为数据库表建立索引能够( C )。

A.    防止非法的删除操作

B.    防止非法的插入操作

C.    提高查询性能

D.    节约数据库的磁盘空间

2)  在SQL SERVER中,创建一个表使用( C )语句。

A.    INSERT

B.    DROP

C.    CREATE

D.    ALERT

3)    在SQL SERVER中,下面关于视图说法错误的是( C )。

A.    对查询执行的大多数操作也可以在视图上进行

B.    使用视图可以增加数据库的安全性

C.    不能利用视图增加,删除,修改数据库中的数据

D.    视图使用户更灵活的访问所需要的数据

4)    在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的( A )阶段。

A.    需求分析

B.    概要设计

C.    逻辑设计

D.    物理设计

5)  在SQL Server 数据库中,如果强制要求grades表中的学员必须是Students表中存在的学员,以下描述正确的是( A )。

A.    在grades表中创建外键约束

B.    在grades表中创建检查约束

C.    在grades表中创建唯一约束

D.    在grades表中创建默认约束

6)    在SQL Server 数据库中,下面的T-SQL语句段执行第三句时出现错误,数据库中的内容修改情况是( C )。

BEGIN TRANSACTION

update Account set balance=7800 where id=1

update Account set balance=9000 where id=1

IF @@error <> 0

ROLLBACK TRANSACTION

ELSE

COMMIT TRANSACTION

A.    Account表中id为1的记录中balance字段的值被修改为7800

B.    Account表中id为1的记录中balance字段的值被修改为9000

C.    Account表中id为1的记录中balance字段的值不变

D.    不可能发生这种情况

7)    在SQL Server 数据库中,有关下列T-SQL语句的功能,说法正确的是( C )。

DECLARE @I int, @J int

SET @I=0

WHILE (@I < 2)

BEGIN

SELECT @J=COUNT(*) FROM stuMarks WHERE writtenExam<60

IF(@J>0)

UPDATE stuMarks SET writtenExam=writtenExam+5 WHERE writtenExam<60

ELSE

BREAK

SET @I = @I + 1

END

SELECT stuNo,成绩=CASE

WHEN writtenExam<60 THEN ‘不及格‘

ELSE ‘及格‘

END

FROM stuMarks

A.    给不及格的学员反复提5分直到通过为止,最后展示所有学员是否及格的情况信息

B.    给不及格的学员提10分,最后展示所有学员是否及格的情况信息

C.    给不及格的学员提5分,提分后仍不及格的学员再提5分,最后展示所有学员是否及格的情况信息

D.    给不及格的学员提5分,最后展示所有学员是否及格的情况信息

8)    在SQL Server 数据库中,下面调用存储过程的语句错误的是( B )。

A.    EXEC proc_stu @sum OUTPUT,64,78

B.    EXEC proc_stu  @sum OUTPUT,@total output,78

C.    EXEC proc_stu  @sum OUTPUT,604

D.    EXEC Calculate @sum OUTPUT,@total output

9)    在SQL SERVER中,下面关于子查询的说法你认为正确的是( CD )。

A.    应用简单子查询的SQL语句的执行效率比采用SQL变量的实现方案要低

B.    带子查询的查询执行顺序是,先执行父查询,再执行子查询

C.    表连接一般都可以用子查询替换,但有的子查询不能用表连接替换

D.    如果一个子查询语句一次返回二个字段的值,那么父查询的where子句中应该使用NOT EXISTS关键字

10)在SQL SERVER中,按以下要求创建学员表正确的SQL语句是( D )。

学员表(stuTable)的要求是:学号为5位数字,自动编号;姓名最多为4个汉字,身份证号码最多为18位数字。

A.    CREATE TABLE stuTable (

ID NUMERIC(6,0) NOT NULL,

Name VARCHAR(4),

Card INT

)

B.    CREATE TABLE stuTable

(

ID INT IDENTITY(10000,1),

Name VARCHAR(4),

Card DECIMAL(18,0)

)

C.    IF EXISTS(SELECT * FROM sysobjects WHERE name=‘ stuTable ‘)

DROP TABLE stuTable

GO

CREATE TABLE stuTable

(

ID NUMERIC(4,0) NOT NULL,

Name VARCHAR(4),

Card INT

)

D.    IF EXISTS(SELECT * FROM sysobjects WHERE name=‘ stuTable ‘)

DROP TABLE stuTable

GO

CREATE TABLE stuTable

(

ID INT IDENTITY(10000,1),

Name VARCHAR(8),

Card NUMERIC(18,0)

)

11)   在SQL SERVER中,声明并创建以下存储过程,正确调用该存储过程的的语句是( BC )。

CREATE PROCEDURE  PRO

@passNum int OUTPUT,

@passPoint int=60

AS

Select @passNum=count(*) From stuTable Where point >@passPoint

GO

A.    Declare @sum int

EXEC PRO @passNum,70

B.    Declare @sum int

EXEC PRO @sum output,70

C.    Declare @sum int

EXEC PRO @sum output

D.    EXEC PRO 70

12)  下面描述的四个阶段中,不是数据库设计过程中经历的阶段是( D )。

A.    需求分析阶段

B.    概要设计阶段

C.    详细设计阶段

D.    代码设计阶段

13) 在SQL Server 中,对IN语句取反的方法是,在IN前面添加( B )。

A.    NONE

B.    NOT

C.    !

D.    NO

14) 在SQL Server 数据库中,以下对变量的定义错误的是( D )。

A.    DECLARE @username  varchar(10)

B.    DECLARE @RowCount  varchar(30)

C.    DECLARE @@username  varchar(10)

D.    DECLARE @@RowCount  varchar(30)

15)  在SQL Server中,绘制E-R图时一般使用( B )表示实体的属性。

A.    矩形

B.    椭圆

C.    菱形

D.    三角形

16)  在SQL SERVER中,运行下列语句,输出结果是( B )。

Create proc proc_Search

@myStuno varchar(8) is null

as

if @myStuno = null              --改成等等

begin

print ‘你忘记了传递学号‘

return

end

Select * from stuinfo where [email protected]

go

exec proc_Search

A.    你忘记了传递学号

B.    编译错误

C.    显示空的记录

D.    调用存储过程proc_Search出错

17)  下面关于SQL Server中变量的操作正确的是( AD )。

A.    DECLARE @name varchar(8)

SET @name=‘lkl‘

print ‘姓名是‘[email protected]

B.    DECLARE name varchar(8)       --少@

SET name=‘lkl‘

print ‘姓名是‘+name

C.    print  @@VERSION AS ‘版本‘, @@SERVERNAME AS ‘服务器‘

D.    SELECT @@VERSION AS ‘版本‘, @@SERVERNAME AS ‘服务器‘

18) 下面选项中关于在SQL语句中使用的逻辑控制语句的说法正确的是( B)。

A.    在IF-ELSE 条件语句中,IF为必选,而ELSE为可选

B.    在IF-ELSE 条件语句中,语句块使用{  }括起来

C.    在CASE多分支语句中不可以出现ELSE分支

D.    在WHILE循环语句中条件为false,就重复执行循环语句

19) 已知dept表有部门编号字段deptno、部门名称字段dname,员工表emp具有员工编号字段empno、员工姓名字段ename、电话字段phone和所属部门编号字段deptno,该字段参考dept表的deptno字段,要使用SQL语句查询 “研发部”部门所有员工的编号和姓名信息,下面选项中正确的是( B )。

A.    SELECT empno,ename FROM emp

WHERE empno=(SELECT empno FROM dept WHERE dname="研发部")

B.    SELECT empno,ename FROM emp

WHERE deptno=(SELECT deptno FROM dept WHERE dname=‘研发部‘)

C.    SELECT empno,ename FROM emp

WHERE deptno=(SELECT * FROM dept WHERE dname=‘研发部‘)

D.    SELECT empno,ename FROM dept

WHERE deptno=(SELECT deptno FROM emp WHERE dname="研发部")

20)  在SQL Server中,下面关于视图的描述,说法正确的是( AD )。

A.    使用视图可以筛选原始物理表中的数据,增加了数据访问的安全性

B.    视图是一种虚拟表,数据只能来自一个原始物理表

C.    CREATE VIEW语句中可以包含UPDATE语句

D.    为了安全起见,一般只对视图执行查询操作,不推荐在视图上执行修改操作

21)  在SQL Server中,创建如下存储过程:

create proc stu_exam

@writtenExam int=null

as

if @writtenExam is null

begin

print ‘请输入笔试成绩及格线‘

return

end

select * from student where stu_id in

(select stu_id from stu_marks

where writtenExam>@writtenExam)

GO

下列选项正确的是( C )。

A.    执行EXEC stu_exam语句,控制台显示所有笔试成绩及格的学生信息记录集

B.    存储过程(stu_exam)代码存在语法错误

C.    执行EXEC stu_exam语句,控制台显示“请输入笔试成绩及格线”

D.    执行EXEC stu_exam 75语句,控制台显示“请输入笔试成绩及格线”

22)  下列选项中不属于SQL Server的逻辑控制语句的是( B )。

A.    IF-ELSE语句

B.    FOR循环语句

C.    CASE子句

D.    WHILE循环语句

23)  在SQL SERVER中,关于聚集索引和非聚集索引的描述错误的是( B )。

A.    一个表可以有多个非聚集索引,但只能有一个聚集索引

B.    非聚集索引的值顺序与数据表中记录的物理顺序完全相同

C.    在建立聚集索引的列上不允许有重复的值

D.    使用聚集索引查询的速度要比非聚集索引速度快

24)  在SQL SERVER中,关于系统存储过程以下说法错误的是( D )。

A.    系统存储过程提供了管理数据库和更新表的机制

B.    所有系统存储过程都以sp_开头

C.    所有系统存储过程都存放在master数据库中

D.    用户不能使用系统存储过程更新系统表,只能查询系统表

25)  在SQL Server 数据库中,从product表里查询出price(价格)高于pName(产品名称)为“一次性纸杯”所有记录中最高价格的产品的查询语句为( D )。

A.    SELECT * FROM product WHERE max(price)>‘一次性纸杯‘

B.    SELECT * FROM product WHERE price>(SELECT max(*) FROM product WHERE pName= ‘一次性纸杯‘)

C.    SELECT * FROM product WHERE EXISTS pName=‘一次性纸杯‘

D.    SELECT * FROM product WHERE price>(SELECT max(price) FROM product WHERE pName=‘一次性纸杯‘)

时间: 2024-10-14 00:36:14

测试(一)试题及答案的相关文章

常见Android面试题及答案(详细整理)

常见Android面试题及答案(详细整理) 1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy(). onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问. onStart(): Activity变为在屏幕上对用户可见时调用. o

最全的iOS面试题及答案-转载

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现多个接口可以完成C++的多重继承:Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

Hibernate面试题及答案

精华-Hibernate面试题及答案大集合 1.一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)A)表对应类B)记录对应对象C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系 2.以下关于SessionFactory的说法哪些正确?(多选)A)对于每个数据库事务,应该创建一个SessionFactory对象B)一个SessionFactory对象对应一个数据库存储源.C)SessionFactory是重量级的对象,不应该随意创建.如果系统中只有一个数据库存储源,只需要创

Android 高级面试题及答案

Android 高级面试题及答案 阅读目录 1.如何对 Android 应用进行性能分析 2.什么情况下会导致内存泄露 3.如何避免 OOM 异常 4.Android 中如何捕获未捕获的异常 5.ANR 是什么?怎样避免和解决 ANR(重要) 6.Android 线程间通信有哪几种方式 7.Devik 进程,linux 进程,线程的区别 8.描述一下 android 的系统架构 9.android 应用对内存是如何限制的?我们应该如何合理使用内存? 10. 简述 android 应用程序结构是哪

面试(4)-spring-Spring面试题和答案

1:69道Spring面试题和答案 转自:http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用

java面试题及答案java面试题及答案

java面试题及答案(基础题122道,代码题19道) JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始

Linux面试题汇总答案

转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r

iOS面试题及答案2015.6.7

iOS面试题及答案 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #impo

Android 面试题及答案(2)

1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent->OnRestart->OnStart->onResume OnActivity->OnResume. OnNewIntent ,OnActivityResult? OnNewIntent launchmode with singletask or singleInstance. but if