搜档网
当前位置:搜档网 › SQL题库(有答案)

SQL题库(有答案)

一、选择题:

1、根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:(_B__)

A、只存在一对多的实体关系,以图形方式来表示。

B、以二维表格结构来保存数据,在关系表中不允许有重复行存在。

C、能体现一对多、多对多的关系,但不能体现一对一的关系。

D、关系模型数据库是数据库发展的最初阶段。

2、在“连接”组中有两种连接认证方式,其中在(_B__)方式下,需要客户端应用程

序连接时提供登录时需要的用户标识和密码。

A、Windows身份验证

B、SQL Server 身份验证

C、以超级用户身份登录时

D、其他方式登录时

3、SQL Server 2000 在安装之前,应注意的事项:(_C__)

A、SQL Server 2000的任何版本在安装时都不用考虑操作系统的制约。

B、SQL Server 2000的安装对硬件的要求不作任何限制。

C、SQL Server 2000 在安装之前,必须在操作系统级启用TCP/IP。

D、在Windows NT Server 4.0上安装SQL Server 2000时,最低的要求是必须安装

Service Pack 4(SP4)以上。

4、关系数据库中,主键是(1_A__),主键的建立有(2_C__)种方法,当运用Transact-SQL

语句创建主键时,可以是(3_B__)。

⑴A、为标识表中唯一的实体

B、创建唯一的索引,允许空值

C、只允许以表中第一字段建立

D、允许有多个主键的

⑵A、一B、二C、三D、四

⑶A、create table table1

(column1 char(13) not null primary,

column2 int not) on primary;

B、alter table table1 with notcheck add

constraint [PK_table1] primary key nonclustered

( column1) on primary;

C、alter table table1 column1 primary key ;

5、表在数据库中是一个非常重要的数据对象,它是用来(1_C__)各种数据内容的,

数据库创建后就可以创建表了,创建表可以用(2_D__)等方法来创建。

⑴A、显示B、查询C、存放D、检索

⑵A、企业管理器B、查询分析器

C、OSQL

D、企业管理器和CREA TE TABLE语句

6、为数据表创建索引的目的是(1_A__),可以在创建表时用(2_C__)来创建唯一

索引,也可以用(2___)来创建唯一索引。

⑴A、提高查询的检索性能B、创建唯一索引

C、创建主键

D、归类

⑵A、设置主键约束,设置唯一约束

B、Create table,Create index

C、设置主键约束,Create index

D、以上都可以

7、在Transact-SQL语法中,用来插入数据的命令是(_A__),用于更新的命令是(___)。

A、INSERT,UPDA TE

B、UPDA TE,INSERT

C、DELETE,UPDA TE

D、CREA TE,INSERT INTO

8、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分

(1_B__),使用关键字(2__A_)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3_B__),如果在SELECT语句中使用集合函数时,一定在后面使用(4_A__)。

⑴A、SELECT,INTO B、SELECT,FROM

C、SELECT,GROUP

D、仅SELECT

⑵A、DISTINCT B、UNION

C、ALL C、TOP

⑶A、JOIN B、UNION

C、INTO C、LIKE

⑷A、GROUP BY B、COMPUTE BY

C、HA VING

D、COMPUTE

9、视图是一种常用的数据对象,它是提供(1_A__)和(1___)数据的另一种途径,可

以简化数据库操作,当使用多个数据表来建立视图时,表的连接不能使用(2_A__)方式,并且不允许在该语句中包括(3_B__)等关键字。

⑴A、查看,存放B、查看,检索

C、插入,更新

D、检索,插入

⑵A、外连接B、内连接

C、左连接

D、右连接

⑶A、ORDER BY,COMPUTE

B、ORDER BY,COMPUTE,COMPUTR BY

C、ORDER BY,COMPUTE BY,GROUP BY

D、GROUP BY,COMPUTE BY

10、在SQL SERVER服务器上,存储过程是一组预先定义并(1_B__)的Transact-SQL

语句。可以用(2_D__)来声明游标。

⑴A、保存B、编译C、解释D、编写

⑵A、CREA TE CURSOR B、ALTER CURSOR

C、SET CURSOR

D、DECLARE CURSOR

二、填空题:

1、更改Microsoft SQL Server 登录的密码的命令是_______________,举例说明

其语法格式:_____________________________________。

2、Windows NT 授权认证模式只适用于________________________平台,对于

Windows95/98操作系统下的SQL Server系统将不适用。

3、SQL Server中索引类型包括的三种类型分别是

_________________,_________________和____________________。

4、在SELECT语句的FROM子句中最多可以指定_______个表或视图,相互之

间要用________分隔,当所查询的表不在当前数据库时,可用

___________________________格式来指出表或视图对象。

5、服务器网络实用工具的目的_________________________________。

6、在当SQL SERVER实例中有DBOA数据库,要将它设置成为单用户状态,

请写出设置命令:___________________________________________。

7、删除表命令是:___________________________________________。

8、用SELECT进行模糊查询时,可以使用_________或________匹配符,但要在

条件值中使用____或____等通配符来配合查询。并且,模糊查询只能针对字

段类型是_________的查询。

9、计算字段的累加和的函数是:_______,统计项目数的函数是:________。

10、SQL SERVER 中的编程语言就是_____________________________语言。

1、Sp_password,sp_password “12345”,”54321”,”abc”

2、Windows NT

3、唯一索引,簇索引,非簇索引

4、256,逗号,”数据库.所有者名称.对象名称”

5、为客户端网络实用工具提供参数。

6、sp_dboption ‘DBOA’,’single use’,’true’

7、drop table

8、like,not like,”%”,”_”,字符

9、Sum(),Count()

10、TranSact_SQL

三、判断题

1、在CREA TE INDEX语句中,使用CLUSTERED来建立簇索引。()

2、可以在企业管理器中修改数据库的名称。()

3、恢复数据,可以在查询分析器中使用这样的命令:

BACKUP DA TABASE database_name FROM backup ( )

4、在查询分析器中修改帐户时可以用系统存储过程Sp_modibaccess。()

5、每个存储过程向调用方返回一个整数返回代码。如果存储过程没有显式设置返回

代码的值,则返回代码为0,表示成功。

6、在Transact-SQL 语句中,对不符合所有标识符规则的标识符必须进行分隔。

7、在SQL SERVER中,触发器的执行是在数据的插入、更新或删除之前执行的。

8、在Transact-SQL 语句的WHERE子句中,完全可以用IN子查询来代替OR逻辑

表达式。

9、通配符“_”表示某单个字符。

10、因为通过视图可以插入、修改或删除数据,因此视图也是一个实在表,SQL

SERVER将它保存在syscommens系统表中。

1、√

2、×

3、×

4、×

5、√

6、√

7、×

8、×

9、√10、×

四、简答题:

1、写出关系型数据库的第一、第二、第三标准形式的各自要求。

①第一标准形式:由原子值和主键值组成,数据表中的每一个字段都不可以再分。(同一

数据表中同类字段不允许重复出现,在一个字段内也不允许放置多个数据项)

②第二标准形式:要求所有的非关键字段完全依赖于主键。(或类似的解释)

③第三标准形式:每一个非主键字段列中没有可传递的的依赖性。(一个非主键列不能依

赖于另一个非主键列)

2、触发器的类型以及相对的语句命令?

类型:①INSERT触发器、②UPDA TE触发器、③DELETE触发器

相对应的语句:①INSERT语句、②UPDA TE语句、③DELETE语句

3、自定义函数的类型?各自原返回值。

自定义函数类型:

①标量函数返回值:单个数据值

②内嵌表值函数返回值:table,

③多语句表值函数返回值:table

4、用户权限的种类有哪些?各自的作用?

①对象权限作用:决定用户对数据库对象所执行的操作,包括用户对数据库中的表、视

图、列或存储过程等对象的操作权限

②语句权限作用:决定用户能否操作数据库和创建数据库对象

③隐含权限作用:控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活

动。

5、写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长

的ID作为主键, 注意:ID可能不是连续的。)

select * from A where id between 31 and 40

五、编程填空题:

1、填写出下列触发器中缺少的关键字,使下面语句完整:

if update([lcostprice])

update [b_drug_data] set [scostprice] = ((select [lcostprice]

from inserted

___GROUP BY _________ [codno],[lcostprice],[scostprice]

___HA VING _____ {b_drug_data.codno} = [inserted.codno])/

(select [fsco] from [b_drug_data]

___ GROUP BY _______ [codno],[fsco]

___ HA VING ______ [b_drug_data.codno] =

(select [codno] from inserted group by [codno]))) where [b_drug_data.codno] _IN__ (select [codno] from inserted)

2、设有一个关系Student(学号,姓名,系名,课程号,成绩),查询至少选修了四门课程的学生学号、姓名及平均成绩的SELECT语句应该是:

SELECT 学号,姓名,A VG(成绩) AS 平均成绩

FROM Student

GROUP BY__(1)A__

HA VING__(2)B__

(1)A.学号B.姓名C.系名D.课程号

(2)A.COUNT(DISTINCT 学号)>3B.COUNT(课程号)>3

C.COUNT(DISTINCT 学号)>=3D.COUNT(课程号)>=3

六、分析编码题

1、请使用Transact-SQL 建立如下表:

表名:雇员基本信息表;

字段名数据类型宽度精度可空性要求

NO_ID CHAR 7 NOT NULL 设为主键

NAME CHAR 10 NOT NULL

SEX CHAR 2 NOT NULL 默认值为”男”

AGE INT NOT NULL

DEPT V ARCHAR 50 NULL

PHONE V ARCHAR 20 NULL

NOTES V ARCHAR 50 NULL

CREA TE TABLE 雇员基本信息表

(NO_ID char(7) not null primary key,

NAME char(10) not null,

SEX char( 2) not null default ‘男’,

AGE int not null,

DEPT varchar(50) null,

PHONE varchar(20) null,

NOTES varchar(50) null

)

2、现有1销售表,它们结构如下:

id int (标识号)

codno char(7) (商品编码)

codname varchar(30) (商品名称)

spec varchar(20) (商品规格)

price numeric(10,2) (价格)

sellnum int (销售数量)

deptno char(3) (售出分店编码)

selldate datetime (销售时间)

要求:写出查询销售时间段在2002-2-15日到2002-4-29之间,分店编码是01的所有记录。

SELECT * FROM 销售表

WHERE (selldate >= '2002-2-15' AND selldate <='2002-4-29')

AND deptno = '01'

3、在table1数据表中增加“No_id”字段,数据类型char(12),不可空,并将其

设定为UNIQUE约束,写出其命令语句。

ALTER TABLE table1 ADD No_id CHAR(12) NOT NULL

CONSTRAINT table1_unique UNIQUE

4、现在有个表(class_room)是主表,另外一个表(students)是子表左图所示,若用关联查询得到右边的查询结果,该怎么做?参看下面的图,请写出Sql语句。

select c.classroom_name,s.student_name,s.score from class_room c left join students s on c.classroom_id=s.class_id

5、用SQL写语句:在下列三张表中选出ID 为“1”的人的NAME和AGE。

表1 表2 表3

No Name Age No ID No

102 Ja 23 102 1 102

103 Ba 23 104 1 103

104 Na 24 103 2 104

注意:表3里面的No是对应表1和表2的

也就是说要输出ID=1 的No对应表1,表2的No都相同的数据Select 表https://www.sodocs.net/doc/2618599815.html,,表2.age

from 表1,表2,表3

where 表1.no=表2.no and 表1.no=表3.no and 表3.id=1

6、有一个表StudentAchievement(学生成绩),它有三个字段:StudentID(varchar(8),学生编号),CourseID(varchar(10),课程编号),Achievement(int ,成绩),写一条SQL语句,筛选出每门课程的前两名的学生编号,课程编号,成绩并排序。

SELECT *

FROM STUDENTACHIEVEMENT A

WHERE (SELECT COUNT(*)

FROM STUDENTACHIEVEMENT B

WHERE B.COURSEID = A.COURSEID

AND B.ACHIEVEMENT >= A.ACHIEVEMENT) <= 2

ORDER BY A.COURSEID, A.ACHIEVEMENT DESC

7、表结构如下:

item(itemno(varchar(20)),in_price(float),out_price(float))----itemno:产品编号,in_price:采购

价,out_price:销售价.

INOut_list(itemno (varchar(20)),flag(char(1),qty(int))---itemno:产品编号,flag:标志,其中flag=1表示入仓,flag=2表示出仓.qty:入仓或出仓数量.

(1)用一条SQL列出仓存;

Select itemno,sum(qty)-(select sum(qty) from inout_list a where a.itemno=b.itemno and flag=0 group by itemno)

from inout_list b where flag=1 group by itemno

(2)用一条SQL列出每个产品的库存金额;

select itemno,sum(qty)*(select in_price from item where itemno=b.itemn o)

-(select sum(qty) from inout_list a where a.itemno=b.itemno and fla g=0 group by itemno)*

(select out_price from item where itemno=b.itemno) )

from inout_list b where flag=1 group by itemno

(3)用一条SQL列出所有产品的库存金额.

select itemno,sum(库存) as 总库存from

(

select =itemno,库存

=sum(qty)*(select in_price from item where itemno=b.itemno)

-(select sum(qty) from inout_list a where a.itemno=b.itemno and fl

ag=0 group by itemno)*

(select out_price from item where itemno=b.itemno) )

from inout_list b where flag=1 group by itemno

) a

group by itemno

8、按照id顺序,给每个人发放奖金,求奖金数累加小于1000时的id号

如下表数据

id bonus

1 89

2 97

3 83

4 94

5 83

6 97

7 99

8 81

9 84

10 92

11 98

12 91

13 82

14 83

15 95

16 98

17 81

到id=11的时候,奖金累计是997,而到id=12的时候奖金累计就是1088

所以id=11就是答案

求用一条sql语句得出这个答案。

Select Top 1 A.id from TEST A

Where (Select SUM(bonus) from TEST Where id <=A.id) <1000 Order By id Desc

相关主题