数据库资料

来源:互联网 发布:网络邮箱广告投放 编辑:程序博客网 时间:2024/06/05 23:57

1、第一范式:(1NF)每一列不能再分割,如电话可以分为手机和座机,显然不是第一范式。

第二范式:属性完全依赖于主键(唯一主键和联合主键),消除部分依赖。

如学生,性别,学号,课程,课程成绩。如F = { {S#, C#}→ G,C#→TN,TN → D}

对于成绩而言,是学生的课程的成绩,表述不清,因为一个学生有多个课程,因此是联合主键。

但是对于性别,学号又只是部分依赖于学生。因此要消除。

拆分成学生、性别、学号。(学生为主键,完全依赖)。以及学生、课程、成绩(学生、课程为联合主键,完全依赖)

第三范式:属性不依赖于其它非主属性(消除传递依赖)。

如学号,姓名,年龄,性别,所在院校,院校地址,院校电话。任何一项,都是完全依赖于主键的,(对于主键来说都是有意义的)因此是第二范式。但是,他们又是从院校传递过来的。表述为,F={S→D,D→M}

对于院校电话而言,其由学生的院校电话显然有意义,但是本身是电话,但是中间加上了院校,所以是一个传递关系。因此要消除。

(学号,姓名,年龄,性别,所在院校)--(所在院校,地址,电话)

区分第二范式和第三范式的要点是:第三范式完全依赖于主键,不存在联合主键(学生的课程的成绩,课程有多个)。且不存在传递关系(只有学生的性别,而不是学生的院校的电话)。

第二范式就是,完全依赖于联合主键,或者完全依赖于主键,不存在部分关系。

BCNF更加严格

2、存储过程和函数的区别是什么?

存储过程是用户定义的,sql语句集合,用户可以调用。而函数是数据库已定义的方法,接收参数并返回特定的值。

3、数据库事务

是系列操作,特性为:

原子性,要么不操作,要么全部操作。

一致性,若原来有约束,如a+b=10,则a变了b也要变。

独立性,不存在两个事务交错操作。

持久性,操作的结果是持久保持的。

4、 游标的作用是什么, 如何知道游标已经到了 最后?

游标用于定位结果集的行。 通过判断全局变量@@FETCH_ STATUS可不等于0表示出错或到了 最后。

5、触发器分为事前触发和事后触发, 这两种触发有何区别? 语句级触发和行级触发有何区别?

事前触发器运行于触发事件发生之前, 而事后触发器运行于触发事件发生之后。
语句级触发器可以在语句执行前或后执行, 而行级触发在触发器所影响的每一行触发一次。

6、什么叫做SQL注入式攻击, 如何防范?

攻击者把SQL语句插入到表单的请求字符串中,进行攻击。

防范方法:

检查数据的输入合法性

将单独出现的单引号改成两个单引号

设置权限

对返回数据进行检查,如只要一个记录,但是返回多行。

7、解释聚集索引和非聚集索引之间的区别?

聚集索引的顺序就是数据的物理存储顺序, 而对非聚集索引的解释是索引顺序与数据物理排列顺序无关。 正是因为如此, 所以一个表最多只能有一个聚集索引。
在SQL Server中, 索引是通过二叉树的数据结构来描述的, 我们可以这么理解聚集索引: 索引的叶节点就是数据节点。 而非聚集索引的叶节点仍然是索引节点, 只不过有一个指针指向对应的数据块。

另外,有索引不一定比没有索引快,如一些数据比较少时。因为索引需要维护一些东西。

8、SQL语言

1、找出表ppp里面num最小的数, 不能使用 min函数。

select *from ppp where num<= all(select num from ppp)

2、找出表ppp里面num最小的数, 可以使用 min函数。

select *from ppp where num in(select min(num) from ppp)

3、选择表ppp2中 num重复的记录。

select * from ppp where num in(select num from ppp group by num having (count(num))>1)

4、写出复制表、 拷贝表和四表联查的SQL语句。

复制表(只拷贝结构)

select * into B from A where 1=0

拷贝表(拷贝数据)

select * into B from A 

四表联查

select * from A,B,C,D where ...

5、在SQL Server中如何用 SQL语句建立一张临时表?

create table #tmp(name vchar(5) not null,,,)

6、有数据表A, 有一个字段LASTUPDATETIME, 是最后更新的时间, 如果要查最新更新过的记录, 如何写SQL语句?

select * from A where  LASTUPDATETIME>= all(select LASTUPDATETIME from A)

7、找出第5到第7行的数据

select userid from(select top 3  userid from (select top 7 userid  from A order by userid )B order by userid desc)C order by userid 

这里要注意from一个数据集的时候要用一个名字。

先升序取7,后降序取三个,再升序排列一下就可以。

8、要查数据表中第30到40条记录, 有字段ID, 但是ID并不连续。 如何写SQL语句?

也就是说ID是说可以根据ID来查

select * from A where ID in(select ID from (select top 10 ID from (select top 40 ID from A )B order by ID desc )C order by ID )

9、查错

update A set name=(select name from ...)这样返回的是一个结果集,是不能设置的。必须要用游标

10、orderby 出现在所有关键字之后

select a,b from C order by b

select a,b from C order by 2 asc

意思是一样的

11、 select to_char(sydate,'yy-mm-dd hh24:mi:ss')from dual;

12、 一个表(表a), 里面有10条数据, 这10条数据都是相同的, 现要删除其中 9条

select distinct *  into b from a

go

drop table a

go

exec sp_rename 'b', 'a'

13、name为 a的数据共有n条, name为 b的数据共有m条, 请问怎么写SQL语句, 使查询a时能够统计a的数量?

select name,count(name) from A group by name

14、将列中的数按照行来显示

select revtime 

max(case chanal 1 then val end) as channal1data,

max(case chanal 2 then val end) as channal2data,

max(case chanal 3 then val end) as channal3data

from A group by revtime 因为这里面用到了max进行聚合

其中 va为通道对应的值。

15、SQL Server只能实现在本地备份, 怎么才能方便地实施异地备份?

连接数据库,远程操作
16、我想把当前正在运行着的MS SQL Server中的一个数据库改名 , 请问应执行什么命令?
sp_renamedb [@dbname=] 'oldname' ,
[@newname=] 'newname'
17、找出修2~ 3门的学生的名 字。
select * from student where  (select  count(*) from course where ID=student.ID) between 2 and 3

注意区分exists 和not exists等。如select * from student where exists (select  count(*) from course where ID=student.ID) 

15、聚集索引与非聚集索引
CREATE CLUSTERED INDEX 索引名
ON dbo.TestTable (TestCol1); 
非聚集索引为nonclustered 

聚集索引其索引的逻辑顺序和磁盘上数据的物理顺序相同。而非聚集索则不同。

作用:可以加快查询的速度。缺点,创建和维护索引耗费时间,且每一个索引还耗费空间。

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

聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,只是指向另一个数据块。

聚集索引对于范围性查找以及重复个数有限的数据来讲是比较快的,但是插入速度比较慢。

当数据量很大时,两者之间的区别就不是很明显了。

索引的另外一种分类:

普通索引和唯一索引

普通索引允许索引的列插入重复的值和空值。

唯一索引的值必须唯一但也允许为空值。如果为组合索引则组合必须唯一,组合索引只有在条件查询中使用了这些字段的左边字段时,索引才会失效。

索引失效:

多列索引没有使用多列索引的第一个字段会失效。

没有查询条件,或者查询条件没有建立索引。

对索引列进行运算等。

主键:

可以为一列或多列,非空,默认会建立唯一索引。

多字段联合主键:

对于不同部门有两个相同人名,将两个字段联合起来,这样就不重复了。

外键:

有外键的表示从表,只有当主表中有对应记录时,从表才能插入。

只有当从表删除时,主表记录才能删除。


0 0