SQL笔试题
 
一 单词解释(2分/个) 34
Data 数据         Database数据库          RDBMS关系型数据库管理系统           GRANT授予(权限)
REVOKE废除权限          DENY否认     DECLARE声明          PROCEDURE过程
Transaction事务             TRIGGER触发器     继续continue            唯一unique
主键 primary key           标识列 sign column             外键foreign key              检查check
 
二 编写SQL语句(5分/题)50
1)      创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话
 Create table student
 ( 学号 char(10) not null primary key,
   姓名 char(10) not null,
   年龄 char(4) not null,
   性别 char(2) not null,
   家庭住址 text,
   联系电话 char(20)
  )
 
2)      修改学生表的结构,添加一列信息,学历
Alter table student
Add 学历 char(10) not null
Go
 
3)      修改学生表的结构,删除一列信息,家庭住址
 Alter table student
Drop column 家庭住址
Go
 
4)      向学生表添加如下信息:
 
学号  姓名 年龄 性别 联系电话 学历
1          A     22      男   123456   小学
2          B     21      男   119          中学
3         C      23     男    110          高中
4         D      18     女    114          大学
 
 
解答:
insert into student values(‘1’,‘A’,‘22’,‘男’,‘123456’,‘小学’)
insert into student values(‘2’,‘B’,‘21’,‘男’,‘119’,‘中学’)
insert into student values(‘3’,‘C’,‘23’,‘男’,‘110’,‘高中’)
insert into student values(‘4’,‘D’,‘18’,‘女’,‘114’,‘大学学’)

5)      修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”
  Updata student
  Set 学历=’大专’
  Where 联系电话=‘11%‘
 
6)      删除学生表的数据,姓名以C开头,性别为‘男’的记录删除
 Delete
   From student
   Where 姓名=’C%’and 性别=’男’
Go
 
7)      查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来
 Select 学号,姓名
    From student
  Where 年龄<22
Go
 
8)      查询学生表的数据,查询所有信息,列出前25%的记录
 
9)      查询出所有学生的姓名,性别,年龄降序排列
 Select 姓名,性别,年龄
  Fron student
Group by 年龄 DESC

10)   按照性别分组查询所有的平均年龄
 Select avg(年龄) as ‘平均年龄’
From student
Group by 性别
Go
 
三填空(3分/题) 36
1)      索引分为(聚合索引)和(非聚合索引)在一张表上最多可以创建(一)个聚合索引。但是可以创建(多)个个非聚合索引。
2)      完全限定名分为四部分:(服务器名),(数据库名),(数据库构架名),(对象名)
3)      视图是从(一个或多个表或视图)中导出的表。
4)      事务开始: BEGIN Transction
提交事务: COMMIT Transction
回滚事务: POLLBACK Transction
 
四 问答题(5分/题)60
1)      数据库包含哪些那几种后缀名的文件必须,这些文件分别存放在什么的信息?
   答:主数据文件, 默认扩展名为.MDF,包含了数据库的启动信息,并且存储数据.
辅助数据文件, 默认扩展名为.NDF,存储未包括在主文件内的其他数据
      日志文件, 扩展名为.LDF, 保存恢复数据库所需的事务日志信息

2) TRUNCATE  TABLE 命令是什么含义?和Delete from 表名有什么区别?
答:TRUNCATE  TABLE快速地从一个表中删除所有行。TRUNCATE  TABLE和无条件的Delete from 表名有相同的效果,都是删除表中的所有行。前者没有选择条件,是单纯的删除表中的所有行,后者可以有选择条件,只有满足条件的行才删除。
 

3)      说出以下聚合数的含义:avg ,sum ,max  ,min , count  ,count(*)
 答:avg:求表达式中所有值项的平均值;
sum:求表达式中所有值项的总和;
max:求表达式中所有值项的最大值;
min:求表达式中所有值项的最小值;
count:用于统计组中满足条件的行数或总行数;
count(*):*表示一个表或视图中的所有列。
 
4)      inner join 是什么意思?作用是什么?写出基本语法结构
 答:意思为内连接。作用:从表中查询所需要的数据,不符合条件的记录都要丢弃。
Select 列名
From 表名
Where 条件;
 
5)      左向外联接,右向外联接,全联接的关健字如何写?
 答:分别为:Left outer join,Right outer join,full outer join
 
6)      子查询分为几类,说明相互之间的区别
 答:子查询分为三类,分别是:含有IN的子查询,使用比较运算符的子查询,使用exists的子查询。
使用IN的子查询返回的查询结果是一列零值或更多值,子查询返回结果之后,外查询可以使用这些结果。
比较运算符的子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算
使用exists的子查询实际上不产生任何数据,它只返回True和False.相当于存在测试。
 
7) 实现实体完整性,实现域完整性,实现参照完整性(引用完整性)分别使用什么手段?
答:通过设置主键来实现视图完整性;通过数据类型,CHECK约束,规则,DEFALUT定义和NOT NULL可以实现域完整性;通过定义主表的主键和从表的外键可以实现参照完整性。
 
8)      视图可以更新吗?会影响到实际表吗?
 答:视图可以更新,但不是所有的视图都可以更新。
可更新视图需满足以下条件:
1. 创建的视图中Select语句的From子句内必须至少要包含一个基本表。
2. 创建的视图中没有聚合函数,且没有TOP,GROUP BY,UNION子句及DISTINCT关键字
3. 创建的视图的Select语句中不包含从基本表列通过计算所得的列。
通过更新视图(包括增,删,改)数据可以修改基本表数据。
9)      谈谈这样几个角色, dbo   , Sysadmin      public
 ADO是微软公司开发的基于COM的数据库应用程序接口。通过ADO连接数据库,可以灵活地操作数据库中的数据。
Sysadmin
 
10)   何为动态游标?何为静态游标?
答:动态游标:关键字DYNAMIC指定游标为动态游标,能够反映对结果集中所做的更改。
静态游标:关键字STATIC指定的游标为静态游标,不能够反映对结果集所做的任何更改。
 
11) 什么是存储过程?为什么存储过程要比单纯的Sql 语句执行起来要快?
答:存储过程是SQL Server服务器上一组预先编译好的Transact-SQL语句,它可以接受参数,返回状态值和参数值。
因为存储过程是预编译的,在首次运行一个存储过程中,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划;而单纯的SQL语句执行,在每次运行时都要进行编译和优化,因此速度相对要慢一些。

12) 什么是Inserted  表 ?什么是Deleted 表?
答:Inserted表:当向表中插入数据时,INSERT触发器触发执行,新的记录插入到触发器表和inserted表中。
Deleted表:用于保存已从表中删除的记录,当触发一个DELETE触发器时,被删除的记录存入deleted表中。