经典SQL题2

1)假定有一个用户表,表中包含字段:userid (int)username (varchar) password(varchar)、等,该表需要设置主键,以下说法正确的是()。(选择两项)

   a)如果不能有同时重复的usernamepassword,那么usernamepassword可以组合在一起作为主键。  

   b)此表设计主键时,根据选择主键的最小性原则,最好采用userid作为主键。

   c)此表设计主键时,根据选择主键的最小性原则,最好采用usernamepassword作为组合键。

   d) 如果采用userid作为主键,那么在userid列输入的数值,允许为空。

 

2)Microsoft SQL Server 2000 在安装的时候就创建的示例用户数据库包括()。(选择两项)

   a)Pubs

   b)Master  

   c)Northwind

   d)Msdb

3)以下()语句从表TABLE_NAME中提取前10条记录。(选择一项)

   a)select * from TABLE_NAME where rowcount=10 

   b)select TOP 10 * from TABLE_NAME 

   c)select TOP of 10 * from TABLE_NAME

   d)select * from TABLE_NAME where rowcount<=10

4) 从“产品”表里查询出价格高于产品名称为“一次性纸杯”的产品的记录,此SQL语句为()。(选择一项)

   a)SELECT * FROM 产品WHERE 价格>‘一次性纸杯’

   b)SELECT * FROM 产品WHERE 价格>(SELECT * FROM 产品WHERE 产品名称> 一次性纸杯’ 

   c)SELECT * FROM 产品WHERE EXISTS 产品名称= 一次性纸杯’ 

   d)SELECT * FROM 产品WHERE 价格>(SELECT 价格FROM 产品WHERE 产品名称= 一次性纸杯’

5)查找 student表中所有电话号码(列名:telephone)的第一位为86,第三位为0的电话号码()。(选择一项)

   a)SELECT telephone FROM student WHERE telephone LIKE '[8,6]%0*'

   b)SELECT telephone FROM student WHERE telephone LIKE '(8,6)*0%'

   c)SELECT telephone FROM student WHERE telephone LIKE '[8,6]_0%'  

   d)SELECT telephone FROM student WHERE telephone LIKE '[8,6]_0*'

 

6)现有表book,字段:id (int)title (varchar), price (float); 其中id字段设为标识, 使用insert语句向book表中插入数据,以下语句错误的是()。(选择一项)

   a)insert into book (id,title,price) values(1,'java',100) 

   b)insert into book (title,price) values('java',100)

   c)insert into book values ('java',100)

   d)insert book values('java',100)

 

7)现有表Employee,字段:id (int)firstname(varchar), lastname(varchar); 以下sql语句错误的是()。(选择一项)

   a)select firstname+'.'+lastname as 'name' from employee )

   b)select firstname+'.'+lastname='name' from employee

   c)select 'name'=firstname+'.'+lastname from employee

   d)select firstname,lastname from employee

 

8)sql server 2000中,关于数据库说法错误的是()。(选择一项)

   a)数据库在磁盘上默认的存储位置是:SQL Server安装路径/Microsoft SQL Server/MSSQL/Data

   b)一个数据库至少应包含一个数据库文件(*.mdf)和一个事务日志文件(*.ldf

   c)只有当数据库中不存在数据的情况下,才可以进行数据库的收缩操作。

   d)可以通过从A机器拷贝数据库文件和事务日志文件至B机器,然后通过在B机器上执行相应的附加数据库操作,实现数据库从A机器到B机器的复制。

 

9)若要删除book表中所有数据,以下语句错误的是()。(选择两项)

   a)truncate table book 

   b)delete * from book 

   c)drop table book

   d)delete from book

 

10)学生成绩表grade中有字段scorefloat,现在要把所有在55分至60之间的分数提高5分,以下sql语句正确的是()。(选择两项)

   a)Update grade set score=score+5

   b)Update grade set score=score+5 where score>=55 or score <=60

   c)Update grade set score=score+5 where score between 55 and 60 

   d)Update grade set score=score+5 where score >=55 and score <=60

 

11)现有书目表book,包含字段:price (float); 现在查询一条书价最高的书目的详细信息,以下语句正确的是()。(选择两项)

   a)select top 1 * from book order by price asc  

   b)select top 1 * from book order by price desc  

   c)select top 1 * from book where price= (select max (price)from book)

   d)select top 1 * from book where price= max(price)

 

12)现有书目表book,包含字段:价格price (float),类别type(char); 现在查询各个类别的平均价格、类别名称,以下语句正确的是()。(选择一项)

   a)select avg(price),type from book group by type

   b)select count(price),type from book group by price 

   c)select avg(price),type from book group by price

   d)select count (price),type from book group by type

 

13)查询student表中的所有非空email信息, 以下语句正确的是()。(选择一项)

   a)Select email from student where email !=null

   b)Select email from student where email not is null 

   c)Select email from student where email <> null

   d)Select email from student where email is not null

 

14)成绩表grade中字段score代表分数,以下()语句返回成绩表中的最低分。(选择两项)

   a)select max(score) from grade

   b)select top 1 score from grade order by score asc

   c)Select min(score) from grade  

   d)select top 1 score from grade order by score desc

 

15)现有订单表orders,包含用户信息userid, 产品信息 productid, 以下()语句能够返回至少被订购过两回的productid? (选择一项)

   a)select productid from orders where count(productid)>1

   b)select productid from orders where max(productid)>1  

   c)select productid from orders where having count(productid)>1 group by productid_ 

   d)select productid from orders group by productid having count(productid)>1

 

16)关于聚合函数,以下说法错误的是()。(选择一项)

   a)Sum返回表达式中所有数的总合,因此只能用于数字类型的列。

   b)Avg返回表达式中所有数的平均值,可以用于数字型和日期型的列。

   c)MaxMin可以用于字符型的列。 

   d)Count可以用于字符型的列。

 

17)使用以下()可以进行模糊查询。(选择一项)

   a)OR

   b)Not between 

   c)Not IN 

   d)Like

 

18)关于多表联接查询,以下()描述是错误的。(选择一项)

   a)外联接查询返回的结果集行数可能大于所有符合联接条件的结果集行数。

   b)多表联接查询必须使用到JOIN关键字

   c)内联接查询返回的结果是:所有符合联接条件的数据。

   d)where子句中指定联接条件可以实现内联接查询。

 

19)Sql语句:select * from students where SNO like 010[^0]%[A,B,C]%,可能会查询出的SNO是()。(选择两项)

   a) 01053090A #Hm3?

   b) 01003090A 01

   c)01053090D09 

   d) 0101A 01

 

20)关于Truncate table, 以下()描述是错误的。(选择两项)

   a)Truncate table 可跟Where从句,根据条件进行删除。

   b)Truncate table 用来删除表中所有数据。

   c)触发器对Truncate table无效。

   d)delete Truncate table速度快。

 

21)创建一个名为‘Customers’的新表,同时要求新表中包含表‘clients’的所有记录,sql语句是()。(选择一项)

   a)Select * into customers from clients 

   b)Select into customers from clients 

   c)Insert into customers select * from clients

   d)Insert customers select * from clients

 

22)关于主键,以下()说法是错误的。(选择两项)

   a)主键可以用来确保表中不存在重复的数据行。

   b)一个表必须有一个主键。

   c)一个表只能有一个主键。

   d)只能对整数型列设置主键。

 

23)假设订单表orders用来存储订单信息,cid代表客户编号,money代表单次订购额,现要查询每个客户的订购次数和每个客户的订购总金额,下面()sql语句可以返回正确结果。(选择一项)

   a)select cid,count(distinct(cid)),sum(money) from orders group by cid

   b)select cid,count(distinct(cid)),sum(money) from orders order by cid 

   c)select cid,count(cid),sum(money) from orders order by cid  

   d)select cid,count(cid),sum(money) from orders group by cid

 

24)现有客户表customers(主键:客户编号cid),包含10行数据,订单表orders(外键:客户编号cid),包含6条数据。执行sql语句:select * from customers right outer join orders on customers.cid=orders.cid。最多返回()条记录。(选择一项)

   a)10

   b)6

   c)4  

   d)0

 

25)以下描述不正确的是

   a)存储过程能够实现较快的执行速度。

   b)内嵌表值型函数相当于一个带参数的视图。

   c)不指定所有者时,调用标量函数会出错。

   d)可以通过视图更改任意基表

 

 

 

26)你是一个医院数据库的开发者。你正在设计一个SQL SERVER 2000数据库医生,这个数据库包含医生和病人的信息。这个数据库将包含一个名为Physicians和一个名为Patients的表。医生治疗多个病人。病人通常有一个主治医生和一个 辅助医生。主治医生被鉴定作为主治医生。病人的表包含不多于百万行。你想在当从表中查询数据时增加I/O性能,数据库应该被标准化以达到第三范式。

你应该使用哪种脚本来创建表?

A.CREATE TABLE Physicians

(

Physicians ID int NOT NULL CONSTRAINT PK_Physicians PRIMARY KEY CLUSTERED,

LastName varchar(25) NOT NULL,

)

GO

CREATE TABLE Patients

(

PatientID bigint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

PrimaryPhysician int NOT NULL,

SecondaryPhysician int NOT NULL,

CONSTRAINT PK_Patients_Physicians1 FOREIGN KEY (PrimaryPhysician) REFERENCES

Physicians (PhysicianID),

CONSTRAINT PK_Patients_Physicians2 FOREIGN KEY (SecondaryPhysician) REFERENCES

Physicians (PhysicianID)

)

B.CREATE TABLE Patients

(

PatientID smallint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,

LastName varchar(25) NOT NULL,

FirstName varchar (25) NOT NULL,

PrimaryPhysician int NOT NULL,

SecondaryPhysician int NOT NULL,

)

GO

CREATE TABLE Physicians

(

PhysicianID smallint NOT NULL CONSTRAINT PK_Physicians PRIMARY KEY CLUSTERED,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

CONSTRAINT PK_Physicians_Patients FOREIGN KEY (PhysicianID) REFERENCES Patients

(PatientID)

)

C.CREATE TABLE Patients

(

PatientID bigint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

)

GO

CREATE TABLE Physicians

(

PhysicianID int NOT NULL CONSTRAINT PK_Physician PRIMARY KEY CLUSTERED,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

)

GO

CREATE TABLE PatientPhysician

(

PatientPhysicianID bigint NOT NULL CONSTRAINT PK_PatientsPhysicians PRIMARY KEY

CLUSTERED,

PhysicianID int NOT NULL,

PatientID bigint NOT NULL,

PrimaryPhysician bit NOT NULL,

FOREIGN KEY (PhysicianID) REFERENCES Physicians (PhysicianID),

FOREIGN KEY (PatientID) REFERENCES Patients (PatientID)

)

D.CREATE TABLE Patients

(

PatientID int NOT NULL PRIMARY KEY,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

)

GO

CREATE TABLE Physicians

(

PhysicianID int NOT NULL PRIMARY KEY,

LastName varchar (25) NOT NULL,

FirstName varchar (25) NOT NULL,

)

GO

CREATE TABLE PatientPhysician

(

PhysicianID int NOT NULL REFERENCES Physicians (PhysicianID),

PatientID int NOT NULL REFERENCES Patients (PatientID), PrimaryPhysician bit NOT NULL,

CONSTRAINT PK_PatientsPhysicians PRIMARY KEY (PhysicianID, PatientID)

)

 

27)你是一家进口商的数据库管理员,你正在创建一个存储订单信息的数据库。订单将会在

一个client/server 应用系统中录入,每次一个新的订单录入时,必须分配一个唯一的

订单编号,订单编号必须以升序分配。每天平均有10000 个订单被录入。你创建了一个

新的名为Orders 的表,并在这个表里添加了一个OrderNumber 列。接下来你该做什么?

A. 设置这个列的数据类型为uniqueidentifier

B. 设置这个列的数据类型为int,并为这个列设置IDENTITY属性

C. 设置这个列的数据类型为int,创建一个用户定义的方法来选择表中最大的订单编号

D. 设置这个列的数据类型为int,创建一个NextKey表,并被这个表添加一个NextOrder

列,设置NextOrder列的数据类型为int,创建一个存储过程来检索并更新NextKey

中的值

 

28) 你是某出版公司的数据库开发人员,你创建了下面存储过程来汇报某本书从年初至今的

销售情况:

CREATE PROCEDURE get_sales_for_title

@title varchar(80), @ytd_sales int OUTPUT

AS

SELECT @ytd_sales = ytd_sales

FROM titles

WHERE title = @title

IF @@ROWCOUNT = 0

RETURN(-1)

ELSE

RETURN(0)

你正在创建一个脚本来执行这个存储过程,如果存储过程执行成功,它就会汇报某本书

从年初至今的销售情况,如果存储过程执行失败,就会报告以下信息:“No Sales Found”,

你该如何创建这个脚本?

A. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title Net Etiquette, @ytd

IF @retval < 0

PRINT No sales found

ELSE

PRINT Year to date sales: + STR (@ytd)

GO

B. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title Net Etiquette, @ytd OUTPUT

IF @retval < 0

PRINT No sales found

ELSE

PRINT Year to date sales: + STR (@ytd)

GO

C. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title Net Etiquette,@retval OUTPUT

IF @retval < 0

PRINT No sales found

ELSE

PRINT Year to date sales: + STR (@ytd)

GO

D. DECLARE @retval int

DECLARE @ytd int

EXEC @retval = get_sales_for_title Net Etiquette, @ytd OUTPUT

IF @retval < 0

PRINT No sales found

ELSE

PRINT Year to date sales: + STR (@ytd)

GO

 

29)你是一家保险公司的数据库开发者,公司的保险单信息存储在一个SQL Server 2000

数据库中,你使用如下所示的脚本为数据库创建了一个名为Policy 的表:

CREATE TABLE Policy

(

PolicyNumber int NOT NULL DEFAULT (0),

InsuredLastName char (30) NOT NULL,

InsuredFirstName char (20) NOT NULL,

InsuredBirthDate datetime NOT NULL,

PolicyDate datetime NOT NULL,

FaceAmount money NOT NULL,

CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber)

)

当公司卖出一份新的保险单时,此单必须被分配一个唯一的保险单编号,当一个新保险

单被录入时,数据库必须分配一个新的保险单编号。你该怎么做?

A. 创建一个INSTEAD OF INSERT触发器来产生一个新的保险单编号,此编号包括插入到

表中数据的保险单编号

B. 创建一个INSTEAD OF UPDATE触发器来产生一个新的保险单编号,此编号包括插入到

表中数据的保险单编号

C. 创建一个AFTER UPDATE触发器来产生一个新的保险单编号,此编号包括插入到表中

数据的保险单编号

D. AFTER INSERT 触发器来代替DEFAULT约束,产生一个新的保险单编号,此编号包

括插入到表中数据的保险单编号

 


32你是某银行的数据库开发人员,你正在实现一个程序,把数据载入到SQL Server 2000

数据库。作为这个程序的一部分,数据暂时被载入到表Staging。当数据加载程序完成

后,此数据就从这个表中被删除,你不需要恢复这个删除的数据。你需要确保Staging

表的数据尽可能快的被删除。你该做什么?

A. 使用 DELETE 语句把数据从表中移除

B. 使用TRUNCATE TABLE语句把数据从表中移除

C. 使用DROP TABLE语句把数据从表中移除

D. 使用updateable游标来访问和移除表中每行数据

 

 

34)是一个研究机构的数据库开发人员,你正在设计一个SQL Server 2000 的数据库,此

数据库将会和一个应用系统一起分配给许多公司。你在包含了机密信息的数据库中创建

了几个存储过程,你想阻止这些公司浏览这些机密信息。你该怎么做?

A. syscomments系统表中移除存储过程正文

B. 给存储过程的正文加密

C. 拒绝公共角色对syscomments 系统表的SELECT权限

D. 拒绝公共角色对sysobjects系统表的SELECT权限

 

35你是销售公司数据库开发者,你已经设计了一个季度销售视图。这个视图结合了几个表

并计算了总计信息,你想提供参数化查询来访问包含在你索引视图中的数据。输出将会在其他SELECT列表中使用。你该如何完成这个目标?

A. 使用ALTER VIEW语句在视图定义中添加参数值

B. 创建一个存储过程来接受作为输入的参数并用结果集返回一个行集(rowset

C. 创建一个标量用户定义函数来接受作为输入的参数

D. 创建一个内联用户定义函数来接受作为输入的参数

 

 

二、填空题(每空一分共25分)

1、关系R1NF,当且仅当所有的基础域仅包含_ _原子值______

2、主关键字应该具有___稳定性_____,___最间性_______,___熟悉性_______性。

3关系R3NF,当且仅当R2NF,并且所有非PK属性都是__非传递的依赖____PK

4Transact-SQL 语言包含___数据定义__语言,__数据控制__语言,__数据操纵___语言。

5消除列重复的关键字是__distinct_,使用__union_操作符从多个查询中创建单结果集,提交一个事务的语句为___commit transaction_____

6SQLServer的两种授权模式分别为__NT ONLY验证模式_____混合模式____

7、有一个数据表其一行有5KB,有10000行数据,那么我们至少需要___79___M的数据库空间。

8、数据完整性分为__域完整性__,__实体完整性__,___参考完整性__.

9、每个允许有______个簇索引,____非簇_索引是SQLServer默认选择。

10、可以使用___sp_help____关键字显示未加密存储过程信息,执行存储过程的关键字是__exec_,统计列平均值的聚合函数为__avg_,修改对象的关键字为__alter_____,删除对象的关键字为____drop_____

11___tempdb _____数据库保存所有的临时表和临时存储过程。

 

三、简答题(15分)

1、请简述一下第二范式(3分)

2、请简述UPDATE 触发器工作原理(3分)

3、强制引用完整性时,简述SQL Server 禁止用户进行的操作(3分)

4、简述相关子查询的步骤(3分)

5、简述使用索引和不使用索引的理由(3分)

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值