2)实例:
a)创建单一主键:
Create table tab3(id int primary key, bid int) b)创建复合主键:
Create table tab4(id int,bid int,constraint pk_id_bid primary key(id,bid)) (2)外键(foreign key): Foreign key定义列值与另一个表的Primary key相匹配的列。
1)说明:
a)Foreign key约束必须引用另一个表的Primary key或Unique约束。 b)相关表中定义为主键的所有列必须作为Foreign key所包含在当前表中。 c)如果使用With nocheck 选项,将不会验证表中的现有数据。 2)实例:
Create table tab5(cid int primary key not null,id int,foreign key(id) references tab3(id))
(3)CHECK约束:根据指定值测试列中的输入值。每次再列中插入或更新数据时均要进行这一测试。 1)说明:
a)可以为Check约束定义Where字句中的类似条件,但它们不能包含子查询。 b)Check约束条件可以引用同一个表中的列。 c)Check约束条件必须对布尔表达式求值。 d)可以绑定有规则的列定义Check约束 2) 实例:
create table tab6(id int, sex char(2) constraint chk_tab6_sex check (sex in ('m','w') ) ) (4)默认约束(default):此约束用于在用户未提供列值的情况下,提供一个自动添加的列值。 1)说明:
a)一个表中只能有一列定义有Default约束。
b)不能在数据类型为Timestamp的列或具有Identity属性的列中定义Default约束。
2)实例:
Create table tab7(id int, address varchar(20) constraint Def_tab7_add default '吉林省长春市')
或者Alter table tab7 add constraint def_tab7_id default 100 for id
(5)唯一性约束(Unique):在列中应用unique约束以确保列中不输入重复值。列中所有行的值均不相同。 1)说明:
a)可以向表中的多列应用unique约束。
b)向现有表应用unique约束时,一直会验证现有数据。
c)可以向not null 列应用unique约束,但仅有其中一行能包含null值 2)实例:
Create table tab8(id int unique) 或者
Create table tab9(id int)
Alter table tab9 add constraint unq_id unique (id) (6)删除约束:对不需要的约束从列中删除。 1)格式
Alter table 表名 drop constraint 约束名
2)实例:
Alter table tab9 drop constraint unq_id 说明:删除列前必须先删除列中的约束
第五章 处理数据
第一节Transact-SQL语言介绍
(1)SQL(structured query language)语言是一种结构化的查询语言。它的功能包括查询、 操作、定义和控制四个方面。它是一种综合的、通用的、功能强大的关系数据库语言;
(2)Transact-SQL:是SQL语言的一种版本,并且只能在SQLSERVER上使用。TSQL是SQLSERVER功能的核心。不管应用程序的用户界面是什么形式,只要和数据库服务器连接最终都必然体现为Transact-SQL.
第二节 检索数据
是数据库最频繁执行的活动。在SQL中,使用SELECT语句可以在需要的表单中检索数据。 格式:Select [All | Distinct ] 字段表列 from 表名 [Where 查询条件]
[Group by 字段表列(分组)]
[Having 分组条件(用于已分组的结果)]
[Order by 字段表列 [Asc(升序)| Desc(降序)]] 实例: Use student go
Create table student (stuno int primary key ,stuname varchar(10) not null, Class int , sex char(2) check (sex in (?男?,?女?))) 插入值:
insert into student values(1,'tom',5,'男') insert into student values(2,'rose?,6,'女') insert into student values(3,'smith',6,'男') insert into student values(4,'mary',5,'女') 1、基本语句检索数据
a)全表查询:Select * from student
b)选择字段查询:Select stuno ,stuname from student
c)排列数据:Select stuname,class from student order by stuno desc d)消除重复项:Select class from student | Select distinct class from student e)约束结果:Select stuname from student where stuno=1 2、选择语句检索数据 (1)比较运算符:
< 小于 > 大于 <= 小于等于 >= 大于等于 <> 或!= 不等于 实例:Select stuname from student where class <>2 (2)between……and …… 或 not between……and …… 运算符:
between 后是数值的下限,and 后是数值的上限。between……and ……包括上下限。 not between……and ……不包括上下限。
实例:Select * from student where stuno between 2 and 4 (3)In 运算符:查找属性值属于指定集合的元组。 实例:Select * from student where stuno in(1,3,4)
(4)like 运算符:属于字符串匹配条件查询。有两个通配符: a)?_? (下划线):代表任意单个字符。
实例:Select * from student where stuname like ?t_m? b) %(百分号):代表任意长度的字符串。
实例:Select * from student where stuname like ?%m? (5)is [not]null 运算符(未知值):
实例:Select * from student where class is not null (6)and或者or运算符:多重条件查询。
实例:Select * from student where stuno=1 or stuno=2 or stuno=3 Select * from student where stuno=1 and stuname=?tom?
第三节 运算符
1、算术运算符 运算符 含义 + (加) 加法 - (减) 减法 * (乘) 乘法 / (除) 除法
% (模) 返回一个除法的整数余数
2、比较运算符 运算符 含义
= (等于) 等于 > (大于) 大于 < (小于) 小于
>= (大于或等于) 大于等于 <= (小于或等于) 小于等于 <> (不等于) 不等于
!= (不等于) 不等于 (非SQL_92标准) !> (不大于) 不等于 (非SQL_92标准) !< (不小于) 不小于(非SQL_92标准) 3、位运算符 运算符 含义
& (按位 AND) 按位 AND (两个操作数) | (按位 OR) 按位 OR(两个操作数) ^ (按位互斥 OR) 按位互斥 OR(两个操作数) 4、一元运算符 运算符 含义
+ (正) 数值为正 - (负) 数值为负
~ (位NOT) 返回数字的补数 5、逻辑运算符 运算符 含义
ALL 如果一系列的比较都为TRUE,那么就为TRUE
AND 如果两个布尔表达式都为TRUE,那么就为TRUE ANY 如果一系列的比较中任何一个为TRUE,那么就为TRUE BETWEEN 如果操作数在某个范围之内,那么就为TRUE EXISTS 如果子查询包含一些行,那么就为TRUE
IN 如果操作数等于表达式列表中的一个,那么就为TRUE LIKE 如果操作数与一种模式相匹配,那么就为TRUE NOT 对任何其他布尔运算符的值取反
OR 如果两个布尔表达式中的一个为TRUE,那么就为TRUE SOME 如果在一系列比较中,有些为TRUE,那么就为TRUE 6、运算符优先顺序
当一个复杂的表达式有多个运算符时,运算符优先性决定执行运算的先后次序.执行的顺序可能严重地影响所得到的值.
运算符有下面这些优先等级.在较低等级的运算符之前先对较高等级的运算符进行求值.
当一个表达式中的两个运算符有相同的运算符优先等级时,基于它们在表达式中的位置来对其从左到右进行求值。
+ (正)、-(负) 、~(位 NOT) *(乘)、/(除)、%(模) +(加)、(+串联)、-(减)
=,>,<,>=,<=,<>,!=,!>,!< 比较运算符 ^(位异或)、&(位与)、|(位或) NOT AND
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME = (赋值)
第四节 其他选择
3、其它选择 (1)使用常量:
实例:Select ?姓名? ,stuname from student (2)计算列:
实例:Select stuno,class+2 from student (3)给结果集起别名:
两种方式: a、字段名 as 别名 b、别名=字段名
实例:Select ?姓名?=stuname , sex as ?性别? from student
第五节 函数
在SQL中,函数对数据或数据组执行操作,然后返回需要的值。函数表达式可以出现在SELECT列表中,或者
在任何允许出现的位置上。SQL包含了七种函数: (1)聚合函数:返回汇总值。
(2)转型函数:将一种数据类型转换为另外一种。 (3)日期函数:处理日期和时间。 (4)数学函数:执行算术运算。
(5)字符串函数:对字符串、二进制数据或表达式执行操作。
(6)系统函数:从数据库返回在SQLSERVER中的值、对象或设置的特殊信息。 (7)文本和图像函数:对文本和图像数据执行操作。
1、聚合函数:它对其应用的每个行集返回一个值。 函数 返回值
AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。 COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。 COUNT(*) 返回表中的行数(包括有NULL值的列)。
MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。 MIN(表达式) 返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间 列。
SUM(表达式) 返回表达式中所有的总和,忽略NULL值。仅用于数字列。
2、转换函数:有CONVERT和CAST两种。
CONVERT实例: Select convert(varchar(10) ,stuno) as stuno,stuname from student CAST实例: Select cast(stuno as varchar(10)) as stuno,stuname from student 注意:
1)如果没有指定表达式转换后的所得到的数据类型的长度,则SQLSERVER自动提供的长度为30。 2)转换为位(bit)类型时,会将任何非零值转换为1。
3)转换为money或smallmoney类型时,假定货币单位为整数。 4)仅当char或varchar数据类型表示数字时,可以转换为整数数据类型。
5)将char或varchar数据类型转换为money类型时,可包含小数点和美元符号($)。 6)将char或varchar数据类型转换为浮点或实数类型时,可包含指数符号。 7)如果对新的数据类型的而言值过长,则值将被截断。
8)可以显示的方法将Text列转换为char或varchar列,以及将image列转换为binary或varbinary列。但是,不能超过255个字符。 3、日期函数
由于不能直接执行算术函数,所以日期函数就十分有用。
它可以帮助您析取出日期值中的天、月和年,这样就可以分别处理它们。 在SQL中,日期的表示方法及有效范围,如下: 日期部分 缩写 值 日期部分 缩写 值 年 yy 1753-9999 周 wk 1-53 季度 qq 1-4 小时 hh 0-23 月 mm 1-12 分钟 mi 0-59 一年中的天 dy 1-366 秒 ss 0-59 一月中的天 dd 1-31 毫秒 ms 0-999 一周中的天 dw 1-7
日期函数如下: 函数 返回值
GETDATE 当前的系统日期。
DATEAD(datepart,number,date) 返回带有指定数字(number)的日期(date),该数字添加到指定的日期部分(datepart)