《SQl 基础知识和开发技巧.doc》由会员分享,可在线阅读,更多相关《SQl 基础知识和开发技巧.doc(15页珍藏版)》请在金锄头文库上搜索。
1、SQl 基础知识和开发技巧基本操作交互式SQL(Transact SQL,TSQL)它是SQL Server的查询语言。提供以下命令: 创建和数据库对象。 访问和修改数据。 数据聚合(aggregation,又称聚集)。 实施安全措施。 数据库对象 数据库对象是数据库中的物理对象。这些对象拥有唯一的名字,并保存数据和数据关系信息。SQL Server定义了如下几种对象: 1、 表(table) 表是用来存储数据的两维数组,它有行和列。列也称为表属性或字段,表中的每一列拥有唯一的名字,每一列包含具体的数据类型,这个数据类型由列中的数据类型定义。 2、 视图(view) 视图是虚拟的表,它只包含表
2、的一部分。与表不同的是,保存在视图中的数据并不是物理存储的数据,它是由表派生的,派生表被称为视图的基本表。视图的定义存储在数据库中。 3、 约束条件(constraint) 约束条件定义数据的完整性和有效性。约束条件为列中的值建立规则。换而言之,如果在某一列上定义了结束条件,则插入这一列的每一个值需要通过约束条件检查。约束条件是在触发器和规则上保证数据完整性和有效性的较佳选择。SQL Server Query Optimizer利用约束条件产生出低成本的查询计划。约束条件有如下类型: NOT NULL 这个约束条件要求列中不能有NULL值。 CHECK 为列指定能拥有的值的集合后,检查约束条件
3、。列中任何在定义之外的数据都为无效数据。有效值集合称为列的域。 PRIMARY KEY 主关键字是列或列组合,它用来唯一标识一行。 FOREIGN KEY 用来定义两个表之间的父子关系。如果一个关键字既是一个表的主关键字的一部分,同时又是另一个表的主关键字,则称它为外来关键字。外来关键字用来定义数据的引用完整性。 UNIQUE 唯一约束条件是指无任何两行在列中有相同的NON-NULL值。唯一性由主关键字保证,但他们不允许NULL值,并且每一个表只能有一个关键字。 基本操作4、 默认值(default) 默认值是为列定义的值,如果在插入一行时没有提供某一列的值,则此列使用默认值,默认值可以是以下
4、的一种: 常量 数学表达式 内部函数(Built-in function) 5、 规则(rule) 规则执行和CHECK约束条件同样的功能。但规则和约束条件不同的是:规则作为独立的对象存在,它可以用于多个表,而约束条件作为表的一部分存储。然而,规则是作为向后兼容特点而提供的,建议用户使用约束条件。 6、 触发器和存储过程 触发器和存储过程是一个TSQL命令集,它们作为一个对象存储在数据库中。 对象命名约定 SQL Server用三段式(three-part)名字标识对象: . 前两部分可以省略,系统有一个默认值。数据库名的默认值是当前数据库,所有者名的默认值是数据库所有者(dbo)。 数据类型
5、 任何包含数据的对象都有一个数据类型和它关联。数据类型是指定对象能包含何种数据的属性。 SQL Server数据类型 数据类型 说 明 同 义 Bit 1位,值为0或1 Int 基本操作Integer 4字节,值为-231231-1 Smallint 2字节,值为-215215-1 Tinyint 1字节,值为0255 Decimal (p,s) 数字数据,固定精度为P,宽度为S Numeric Money 8字节,存放货币类型,值为-263263-1 Small money 4字节,存放货币类型,值为-214748.3648+214748.3647近似数值数据类型 Float (n) N在1
6、24之间,4字节,7位精度 N=17为real N在2553之间,8字节,15位精度 =815为float Datetime 8字节,描述某天的日期和时刻,值的精确度为1/300秒 Smalldatetime 4字节,描述某天的日期和时刻,精度为分钟 Cursor 对游标的引用 Timestamp 8字节,存放在数据库内唯一的数据 基本操作Uniqueidentifier 16字节,存放全局唯一标识(GUID) Char (n) 非unicode字符串的固定长度,n=18000 Character (n) Varchar (n) 可变长度,非unicode字符串n=18000 Char var
7、ying(n) Text 服务器代码页中可变长度非unicode数据。最大长度为231-1个字符 Nchar 固定长度unicode字符串n=14000 National character (n),National char(n) Nvarchar 固定长度unicode字符串n=14000 National character varying(n) Ntext 可变长度unicode数据,最大长度为230-1个字符 National text Binary (n) 固定长度二进制数据,n在18000之间,存储空间为n+4字节 Varbinary (n) 可变长度二进制数据,n=18000
8、Binary varying (n) Tmage 可变长度二进制数据,大小为0231-1注意: 1) 对于数值型数据类型,宽度(scale)是指存储在小数点后的数字位数,而精度(precision)是指能存储的包含小数点在内的所有数字位数。 2) money和small money的存储宽度为4。 3) 时间戳列值在每一行更新时系统自动更新,时间戳列不能是关键字或关键字的一部分。 4) 唯一标识数据类型不能使用算术操作符(如+、-等),这种数据类型只能使用相等比较操作。Unicode是所有字符集的一致存储数据的标准。它要使用两倍于非Unicode数据存储的存储空间。 存取数据 select语句
9、1 选择表中的所有列“*”对Select语句有特殊意义。它指定表中的所有列,而不用列出列的名字。列的顺序和表中的顺序相同。2 选择不同的值如果被选择列表中的列有重复值,这时“distinct”关键字可以用来忽略重复值。注意: 如果Select list中多于一列,则distinct关键字对它们总体有效。如果一列有重复值,而其他列的值是唯一的,则有重复值的一列包含在结果中。3 在结果数据集合中对列重命名结果中列的默认名字是源数据库中的列名,用户可以用自己指定的列名来代替默认的列名。Select AuthorFirstName = au_fname from authors -将列名由“au_fn
10、ame”改成“AuthorFirstName”4 选择计算值在Select list中可以包含计算值或常量。计算值是在算术表达式的基础上计算而来的,它可包含在表中的一列或多列。Select totalSale = price * ytd_sales from titles条件选择(Where子句)使用一个比较或逻辑操作在Where子句中指定过滤条件,来生成表中想得到的行。1 比较操作比较操作能比较数值、字符和日期数据,返回TRUE或FALSE。比较操作符(大于) =(等于) (不等于) =(大于等于) =(小于等于) 存取数据 !=(不等于) !(不大于) 2 逻辑操作逻辑操作测试某些条件是否
11、正确,并根据测试结果返回TRUE或FALSE。 LIKE 如果操作和指定的字符串相同,则返回TRUE,指定的字符串也可包含通配符。有通配符的like操作更有用。 “%”规定所有字符串可代替字符“%”的位置。任何在“%”之前或之后的指定字符串视为常量。如:“New%”表示所有以“New”开头的字符串,“%New”表示以“New”结尾的字符串。 “_”规定任何单个字符可代入“_”的位置。这在只有一个字符不同的相近字符的情况下非常有用。 “”规定使用方括号中定义的字符代替一个字符。方括号中可能是独立的字符(如ahg),也可是字符范围(如c-i)。 “”规定方括号中“”之后的字符为不能用来代入的字符,
12、它可以是独立字符(如ahg),也可是字符范围(如c-i)。注意:可以在一个表达式中组合运用这些通配符。 BETWEEN 如果操作数在提供的范围之内,则返回TRUE。BETWEEN可和NOT操作符一同使用,如果数据在指定范围之外,则返回TRUE。注意:BETTEN操作符是指定范围。例如,BETWEEN A and B表示所有在A和B之间的值,包括A和B。 IN 如果操作数和任意的指定值相匹配,则IN操作符返回TRUE。指定值可以是一个常量值列表,也可由另外的查询(称为子查询)产生。IN操作符也可和NOT操作符联合使用,如果数据不在指定值中,它返回TRUE。 AND 它结合两个表达式,如果两个表达
13、式都为TRUE,则它返回TRUE,否则返回FALSE。 OR 它结合两个表达式,如果两个表达式中有一个为TRUE,则它返回TRUE,如果两个都为FALSE,则返回FALSE。为FALSE,则返回FALSE。 NOT 它对逻辑操作值求反,它可和大多数逻辑操作联合使用,对操作返回的值求反。 SOME|ANY 这两个操作有相同的格式。它们把操作数和指定值的集合比较。如果操作数与任意指定值的比较返回TRUE,则它返回TRUE。比较操作可以是任意SQL Server定义的比较操作。指定值列表可以由另一个查询产生。 ALL ALL操作和SOME及ANY有相似的格式。不同的是,如果所有操作数和指定值的比较返
14、回TRUE,它才返回TRUE。 数据排序 ORDER BY子句按指定的顺序对数据排序(ordering data)。它要求一个列名字列表或非负整数列表来指定列的位置。分别用ASC代表升序,DESC代表降序,默认为ASC。 限制返回行的数目 不使用WHERE子句而限制结果中的行数是可能的。“TOP”子句能按指定数目或百分值来限制行数。 数据分组和计算聚合函数 聚合(aggregate)函数计算表中数据的总和。SQL Server提供以下的聚合函数: AVG 这个函数计算平均值。语法如下: AVG (ALL | DISTINCT expression) 关键字DISTINCT只用来计算不同值的平均值,如果有许多重复值,这些值只计算一次,默认为ALL。 Expression可以是涉及一列或多列的算术表达式。 MIN 这个函数查找所提供表达式中的最小值。语法如下: MIN (expression) MAX 此函数的功能是在提供的表达式中查找最大值。语法如下: MAX (expression) 注意: 如果地字符串类型使用MIN和MAX,则输出依赖于为SQL Server定义的顺序。MIN和MAX不能在位上使用。 SUM SUM计算所有数据值的和。语法如下: SUM (ALL | DISTINCT expression) 注意:SUM和AVG只能用于数值数据