数据库的相关经验总结

                       数据库的相关经验总结

1、 查询TestTable(表主键是ID)表中的第21到第30条的数据的SQL语句如下:

SQL Server:

  Select top 10 * from TestTable where ID not in (Select top 20  ID  from TestTable)

       Oracle:

         Select * from (Select t.*,rownum rowid from TestTable t) where rowid between 21 and 30

2、 删除数据库中的重复数据

       注:(distinct关键字只能筛选出表中所有列都相同的数据)

SQL Server和Oracle:

   <1> 先创建一个与当前操作表(TestTable)相同结构的表(TestTable_Temp)作为临时表

          创建临时表:

        SQL Server中的写法如下:

                       Create Table  TestTable_Temp

                   (

                         ID  int,

                         Name nvarchar(50)

                    )

              Oracle中的写法如下:

                      Create Table  TestTable_Temp

                   (

                         ID  number,

                         Name nvarchar2(50)

                    )

       <2> 再为临时表(TestTable_Temp)创建一个索引(SQL Server2005版本中的操作):

           记住勾选上“常规”中的  、添加索引键的表列(如果添加了全部表列,效果将会和使用                      distinct的效果一样)和“选项”中的  这个两个选项框.

       <3> 将TestTable表中的数据装入临时表TestTable_Temp(由于设置了索引就会自动过滤掉重复的数据)

              语句如下:

                     Insert Into TestTable_Temp Select * from TestTable(此时临时表就是我们想得到的数据)

    <4> 删除TestTable表中的数据

              语句如下:

                     Delete TestTable

       <5> 将临时表中的数据导入TestTable

               语句如下:

                     Insert Into TestTable Select * from TestTable_Temp

       <6> 删除临时表TestTable_Temp

               语句如下:

               Drop Table TestTable_Temp

 

3、 随机取出10条数据

SqlServer:

Select top 10 * from test_table order by newid()

Oracle:

 select * from test_table where  rownum<10 order by sys_guid()

4、 Inner join和Left/right join的区别.

SQL Server和Oracle:

如表A

AID

OtherA

1

2

2

3

表B

BID

OtherB

2

3

3

4

Inner join :

Select * from A Inner join B on A.AID=B.BID

求A,B中AID=BID链接链接集合

AID

OtherA

BID

OtherB

2

3

2

3

Left Join :

Select * from A Left join B on A.ID=B.ID

求A,B中AID=BID链接链接集合,加A中

和B匹配的集合,A中照旧,B的字段以空填。

AID

OtherA

BID

OtherB

1

2

Nul

Nul

2

3

2

3

Right Join :

Select * from A Rright join B on A.AID=B.BID

求A,B中AID=BID链接链接集合,加B中

和A匹配的集合,B中照旧,A的字段以空填。

AID

OtherA

BID

OtherB

2

3

2

3

Null

Null

3

4

 

5、 sqlserver中聚集索引和非聚集索引的区别

<1>定义

聚集索引:物理存储按照索引排序,就像字典正文,我们按照正文的字母顺序就能找到我们的记录。(对查字典很熟  的人)

非聚集索引:物理存储不按照索引排序,就像偏旁查字法目录,每个偏旁目录下的字的页码不是顺序的。

<2>比较

聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入)查询数据比非聚集数据的速度快。

<3>理解

聚集索引

每个表只能有一个,默认主键是聚集索引,但经常业务上是不合适的,一定要将聚集索引建立在:

²        您最频繁使用的、用以缩小查询范围的字段上;

²        您最频繁使用的、需要排序的字段上。

非聚集索引

每个表可以建立多个

<4>使用环境 

动作描述

使用聚集索引

使用非聚集索引

列经常被分组排序

返回某范围内的数据

不应

一个或极少不同值

不应

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

外键列

主键列

频繁修改索引列

不应

 

posted @ 2010-04-15 14:58  凡心不凡  阅读(386)  评论(0编辑  收藏  举报