数据库的相关经验总结
数据库的相关经验总结
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>使用环境
动作描述 |
使用聚集索引 |
使用非聚集索引 |
列经常被分组排序 |
应 |
应 |
返回某范围内的数据 |
应 |
不应 |
一个或极少不同值 |
不应 |
不应 |
小数目的不同值 |
应 |
不应 |
大数目的不同值 |
不应 |
应 |
频繁更新的列 |
不应 |
应 |
外键列 |
应 |
应 |
主键列 |
应 |
应 |
频繁修改索引列 |
不应 |
应 |