---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
一.索引
索引可以理解为一种特殊的目录。MsSql中有两种:
(1). 聚集索引(clustered index)
(2). 非聚集索引(nonclustered index)
下面,我们举例来说明一下聚集索引和非聚集索引的区别:
索引就像汉字字典的目录
(1)聚集索引:知道汉字读音->按音查->直接翻到拼音范围内(缩小范围);
(2)非聚集索引:不知道汉字读音->“偏旁部首”查->直接翻到某页来找到您要找的字;
创建:
在表设计器中点击右键->索引/键->添加->在列中选择索引包含的列。
(1) CREATE INDEX 索引名
ON 表名 (列名)
注意:
使用索引能提高查询速度,但是索引也是占空间的,而且添加、更改、删除数据的时候也需要同步更新索引,因此会降低INSERT、UPDATE、DELETE的速度。只在经常检索的字段上创建索引。
二表连接join
用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
有三种链接:
(1)内连接:(INNERJOIN)
(2)外连接:(OUTERJOIN)
l 左外连接(LEFT OUTER JOIN或LEFT JOIN)
l 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
l 全外连接(FULL OUTER JOIN或FULL JOIN)
(3)交叉连接:(CROSSJOIN)
内连接:(INNER JOIN)
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
create table t1(c1 int)
create table t2(c1 int)
insert into t1 values(1)
insert into t1 values(2)
insert into t2 values(1)
insert into t2 values(3)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
inner join t2
on t1.c1=t2.c1
delete from t1 ;
delete from t2 ;
![](http://hi.csdn.net/attachment/201111/21/0_1321847654gGX6.gif)
2、 不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
(1). >
insert into t1 values(1)
insert into t1 values(2)
insert into t2 values(1)
insert into t2 values(3)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
inner join t2
on t1.c1>t2.c1
delete from t1 ;
delete from t2 ;
![](http://hi.csdn.net/attachment/201111/21/0_1321847711Zeh8.gif)
(2)<>
insert into t1 values(1)
insert into t1 values(2)
insert into t2 values(1)
insert into t2 values(3)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
inner join t2
on t1.c1<>t2.c1
delete from t1 ;
delete from t2 ;
3、 自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
(1) 左外连接
create table t1(c1 int)
create table t2(c1 int)
insert into t1 values(1)
insert into t1 values(2)
insert into t1 values(3)
insert into t2 values(1)
insert into t2 values(2)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
LEFT join t2
on t1.c1=t2.c1
delete from t1 ;
delete from t2 ;
![](http://hi.csdn.net/attachment/201111/21/0_1321847756P5ss.gif)
(2) 右外连接
insert into t1 values(1)
insert into t1 values(2)
insert into t1 values(3)
insert into t2 values(1)
insert into t2 values(2)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
right join t2
on t1.c1=t2.c1
delete from t1 ;
delete from t2 ;
![](http://hi.csdn.net/attachment/201111/21/0_13218478100XBE.gif)
(3)全外连接
create table t1(c1 int)
create table t2(c1 int)
insert into t1 values(1)
insert into t1 values(2)
insert into t1 values(3)
insert into t2 values(1)
insert into t2 values(2)
insert into t2 values(4)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
FULL OUTER join t2
on t1.c1=t2.c1
delete from t1 ;
delete from t2 ;
![](http://hi.csdn.net/attachment/201111/21/0_13218478796SWR.gif)
交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
create table t1(c1 int)
create table t2(c1 int)
insert into t1 values(1)
insert into t1 values(3)
insert into t2 values(1)
insert into t2 values(2)
select * from t1;
select * from t2;
--
select t1.c1,t2.c1
from t1
CROSS join t2
delete from t1 ;
delete from t2 ;