原创 SQL Server 2000 读书笔记收藏

新一篇: 网格建模资源管理(第一次翻译老外的东西,嘿嘿!) | 

SQL Server 2000 读书笔记

                                   孟培远 2005.7---2005.8

数据完整性:

实体完整性---表中数据的唯一性

区域完整性---字段数据范围的完整性

参考完整性----表与表之间关联的完整性

使用者定义的完整性----用户自己定义的完整性。如:客户欠6个月的钱,下次再下定单的时候就不卖给他。

 

数据库分离:使用SQL语句分离为EXEC sp_detach_db ‘销售数据库ß指明欲分离的数据库名称即可。

分离后想再用该数据库,则需要附加该数据库,具体SQL语句为:

CREATE  DATABASE 销售数据库

ON PRIMARY

FILENAME=’C:\SQLTEST\销售数据文件_1MDF’

FOR  ATTACH

或者使用sp_attach_db系统存储过程来附加数据库:

sp_attach_db  销售数据库

‘C:\SQLTEST\销售数据文件_1.MDF’

 

UNIQUE Primary key的差异

1、  UNIQUE允许输入NULL值(最多为一个),而Primary key不允许;

2、  一个数据表中可以定义多个UNIQUE条件约束,但只能定义一个Primary key条件约束。

 

CHECK约束可用来限制字段值是否在所允许的范围内。

例如:

CREATE TABLE 客户02

(

       客户编号 int IDENTITY  NULL  UNIQUE,

       身份证号 char[10] NOT NULL  UNIQUE,

       年龄  int  CHECK (年龄>0) DEFAULT 25

)

 

建立计算列:

CREATE TABLE 估价

(

       编号  int  IDENTITY,               //自动编号

       单价  numeric(5,1),

       数量  int,

总价  AS 单价*数量

)

insert 估价 values(21.5,8)

insert 估价 values(12,3)

delete from 估价 where 编号=5 or 编号=6

drop table 估价

 

创建约束字段:

Create table 客户

{

客户编号  int  IDENTITY  Primary Key,------------------------IDENTITY自动产生编号

身份证号  char 18  NOT NULL UNIQUE,

地址      char(50),

电话      char (12),

杂志编号  int  REFERENCES 杂志种类(杂志编号),

订单编号  int  NOT NULL,

FOREIGN Key(杂志编号,订户编号)

                     REFERENCES  杂志订户(杂志编号,订户编号),

Check(地址 is NOT NULL  OR 电话  is  NOT NULL)

}

修改数据表:

例如:

ALTER TABLE 客户A

ADD

类别编号 int

DEFAULT 1 WITH VALUES

CONSTRAINT  FK_类型编号

FOREIGN KEY

       REFERENCES  客户类别(类别编号)

 

删除约束字段

在表中建立了一个叫PK_订购项目APRIMARY KEY约束,现在将它删除掉:

ALTER TABAL订购项目A

       DROP CONSTRAINT PK_订购项目A

下面删除订购项目A的两个字段

ALTER TABLE 订购项目A

       DROP COLUMN 定单编号,项目编号

 

激活/关闭约束

ALTER TABLE table

{ CHECK | NOCHECK} CONSTRAINT

       {ALL | constrant_name{,…….n}}

 

临时数据表以###开头,用户断开连接后表被自动删除

 

数据表中字段的种类:

Primary key,  Foreign Key,  NULL,  NOT NULL,  DEFAULT,  UNIQUE,  CHECK

用查询结果建立新数据表

Select * into  newtablename  from table_source where 条件

 

当记录中有重复的时候可以采用DISTINCT来获取单独的数据。

 

TOP  N 为显示前N个数据

TOP  N  30  PERSENT * FROM 表名

表示显示N的前30%的数据

 

ORDER BY 按什么方式排序显示结果

ASCDESC

 

JOIN

SELECT  A,B,C  FROM  T1  JOIN  T2  ON  T1.NO=T2.NO

JOIN 的类型有多种:

INNER(默认)

LEFT(以左边为条件,如果右边没有符合的条件,则以NULL

例如:SELECT .产品名称AS旗旗公司产品名称,旗.价格,标.成品名称AS标标公司产品名称,标.价格

FROM 旗旗公司 AS LEFT JOIN 标标公司AS

ON.产品名称=标产品名称

 

RIGHT(以右边为条件,如果左边没有符合的条件,则以NULL

FULL(左边右边都显示,如果没有则以NULL

CROSS(将两个表的数据进行比较,全部显示出来)

有时需要自己JOIN自己

例如:

SELECT 员工.姓名,员工.职位,长官.姓名AS主管

FROM 员工 LEFT JOIN 员工AS 长官

ON 员工.主管编号=主管.编号

 

姓名

职位

主管

1

陈圆圆

主任

刘敏敏

2

刘敏敏

经理

NULL

 

GROUP BY 按什么分组显示

 

UNION把两个查询结果合并到一个表中显示出来

 

查询时Group的使用,例如:

Name

Date

Quantity

A

2001-1-1

2

B

2001-10-10

6

A

2003-4-20

8

B

2004-5-21

9

A

2005-8-18

10

 

要求查询上面表格中AB的数量分别为多少?

Select name  AS名称,Sum(Quantity)数量  Form  table  Group  By  name

结果为:

名称

数量

A

20

B

15

 

GROUP BY后面如果有WITH CUBE则把各个组进行汇总计算后显示结果

例如:

Name

Date

Bookname

Quantity

A

2001-1-1

X1

2

B

2001-10-10

Y1

6

A

2003-4-20

X1

8

B

2004-5-21

Y2

9

A

2005-8-18

X2

10

 

查询:select name  AS出版社名称,bookname AS 书名,sum(quantity) AS 数量 from table group by name,bookname with cube

结果如下:

出版社名称

书名

数量

A

X1

10

A

X2

10

A

NULL

20

B

Y1

6

B

Y2

9

B

NULL

15

 

 

查询时改变要显示的数据:(1代表“男”,0代表“女”)

Name

Sex

小华

1

小刘

0

小王

1

要求查询时如果是1则显示“男”,否则显示“女”

Select name  AS 姓名,case  sex  when  0  then “” else    End  AS 性别  From  table

 

比较清单有:

INALLANYSOME)结果为TRUEFALSE

测试存在用EXISTS结果返回TRUEFALSE

 

索引分为聚集索引和非聚集索引

聚焦索引数据的存放会依照该索引的顺序来存放

非聚焦索引数据的存放不会依照索引的顺序来存放

因为非聚焦索引不影响数据排列顺序,则可以设置多个非聚焦索引,而聚焦索引则最多只能设置一个,因为实际数据只能有一种排列顺序。

(Unique index)索引值是否唯一:如果索引值为唯一,则成为唯一索引

多个字段做为索引称为复合索引(Composite index

Create  [UNIQUE]  -----指定唯一

[CLUSTERED | NONCLUSTERED]  ------指定聚集/非聚集

INDEX  index_name

ON  table_name

(column [ASC|DESC][,…..n])      -----可指定排序方式(默认为升序ASC

[WITH  [PAD_INDEX]                     --------索引页预留空间

        [,FILLFACTOR=X]                     ------填充因子

              [,IGNORE_DUP_KEY]                ------忽略重复值

        [,DROP_EXISTING]                  ------删除现有的索引

              [,STATISTICS_NORECOMPUTE]]      --------不重新计算统计数据

              [ON  filegroup]                --------指定文件组

例如:

CREATE  TABLE  KKK

(

ProductID  smallint  not null  primary key,

ProductName   char(30),

Price   smallmoney,

Manufacturer   char(30)

)          ------创建表完毕

//创建索引

CREATE        UNIQUE        NONCLUSTERED        INDEX          indexname

ON               KKK       (Price   DESC)

WITH     PAD_INDEX, FILLFACTOR=30,IGNORE_DUP_KEY

 

//删除索引

DROP  INDEX   table.index_name

 

//修改索引

使用DROP_EXISTING修改索引

如果要修改索引,只要在CREATE    INDEX语句的最后加上DROP_EXISTING即可(如果存在该索引,则修改之,否则会发生错误)

使用DBCC  DBREINDEX重建索引

如果只想重建索引(而不修改索引的相关设置),那么使用DBCC  DBREINDEX语句比较方便,而且使用时也可指定重建的填充因子。

DBCC DBREINDEX’database_name.owner.table_name’,  index_name,   fillfactor

 


                                    数据库