数据笔记3
2014-02-25 20:55
253 查看
单表约束:
1、 可空、非空约束
2、 主键
3、 唯一性:操作最简单
4、 默认:功能最小;
5、 检查约束 check
检查约束:check
作用:是用来检查列数据是否符合数据的要求(按照实际生活中的逻辑关系判断);
例如年龄,性别等
作一个Person表,来测试检查约束。
检查约束的第1种形式:将数据限制在一个用区间表示的范围内。
区间:完全开闭区间,半开半闭区间等。
针对Person表的年龄列,将其限制在[1,120]
检查约束的第2种形式,就是值的范围,不能用区间表示,因为这个范围中的每个值都是平等的,没有大小之分。
性别列的检查约束原则是,这列数据只支持两个值,’男’和’女’,而且在两者必选其一。
在某个范围内的多个值中,选择其一个,使用in子句。
在性别列上添加检查约束。
create table person(
pid int identity(100,1) primary key,
pname nvarchar(6)not null,
page int check(page between 1 and 120),
--page int check(page>0 and page<=120) 第二种约束写法
psex nchar(1) check (psex in('男','女')),
)
向表中插入数据
insert into person values('赵六',22,'男')
insert into person values('张三',-10,'男')
insert into person values('李四',999,'女')
insert into person values('王五',18,'雄')
只有一条记录插入进去了
其他三条出错了
检查约束的第3种形式,继续对列中的数据进行更加详细的限制,详细到每个字符的内容。具体说,用正则表达式对数据进行规范。设置这种情况的约束时,使用like子句。
此处的”like”不是指“喜欢”,而是“像…的样子”的意思。
建立一个用户表users,来测试这种形式的检查约束。
create table users(
uid uniqueidentifier primary key default newid(),
uname nvarchar(20) not null unique,
password varchar(6)not null check(password like'[0-9][0-9][0-9][0-9][0-9][0-9]'),--[\\d]{6}
)
插入数据
insert into users(uname,password) values('没核儿','001234')
insert into users(uname,password) values('没核','123abc')
只有一条记录插入了,而另一条添加不进去
统计函数:
1、 最小值函数 min(column_name)
2、 最大值函数 max(column_name)
3、 求和函数:sum(column_name)
4、 求平均值函数:avg(column_name)
5、 行记录数:count(*),count(column_name),后者不统计空值列所在的行
use pubs
select count(*) '行记录数' from jobs
go
select min(min_lvl) as '最小值',max(min_lvl) '最大值'
from jobs
go
select sum(min_lvl) as '和',avg(min_lvl) '平均值'
from jobs
go
count(*)这个统计函数,在向表中添加记录或查询时非常有用。建一个表测试。
建一个成绩表,有两列数据,编号(主键),成绩;编号50个,用100以内的随机数表示;成绩在0-100之间,包括两者。
create table score(
sid int primary key,
sscore int not null check(sscore between 0 and 100),
)
通过sqlsever提供的while循环向表中添加记录:
用count(*)来控制循环的结束条件
while (select count(*) from score)<>50
begin
declare @id int;
declare @sscore int;
set @id=1+floor(rand()*100)
set @sscore=ceiling(rand()*100);
insert into score values(@id,@sscore)
end
查看成绩表,看是否是50条记录?
select count(*) as '实际记录数' from score
利用上述的方式向表中添加记录,中间也出现主键值重复的情况,但总会保证50条记录的插入。
考试结束了,考了语、数、外三门,成绩在0-100之间。要求包括表列中有学号(自增),三门成绩,总分,平均分。
因为无论总分也好,平均分也好,都与三门成绩紧密相关的。
重新创建新的成绩表:
create table score(
sid int identity primary key,
chinese int not null check(chinese between 0 and 100),
math int not null check(math between 0and 100),
english int not null check(english between 0and 100),
total_score as(chinese+math+english),
average_score as(chinese+math+english)/3.0,
)
向表中添加记录并查询:
insert into score values(70,80,90)
select*from score
由查询可知,只要插入三门成绩,总分和平均值会自动计算出来。
统计10名学生的成绩情况,三门成绩随机得到。
while (select count(*) from score)<>10
begin
declare @chinese int,@math int,@english int;
set @chinese=ceiling(rand()*100);
set @math=ceiling(rand()*100);
set @english=ceiling(rand()*100);
insert into score values(@chinese,@math,@english)
end
1、 可空、非空约束
2、 主键
3、 唯一性:操作最简单
4、 默认:功能最小;
5、 检查约束 check
检查约束:check
作用:是用来检查列数据是否符合数据的要求(按照实际生活中的逻辑关系判断);
例如年龄,性别等
作一个Person表,来测试检查约束。
检查约束的第1种形式:将数据限制在一个用区间表示的范围内。
区间:完全开闭区间,半开半闭区间等。
针对Person表的年龄列,将其限制在[1,120]
检查约束的第2种形式,就是值的范围,不能用区间表示,因为这个范围中的每个值都是平等的,没有大小之分。
性别列的检查约束原则是,这列数据只支持两个值,’男’和’女’,而且在两者必选其一。
在某个范围内的多个值中,选择其一个,使用in子句。
在性别列上添加检查约束。
create table person(
pid int identity(100,1) primary key,
pname nvarchar(6)not null,
page int check(page between 1 and 120),
--page int check(page>0 and page<=120) 第二种约束写法
psex nchar(1) check (psex in('男','女')),
)
向表中插入数据
insert into person values('赵六',22,'男')
insert into person values('张三',-10,'男')
insert into person values('李四',999,'女')
insert into person values('王五',18,'雄')
只有一条记录插入进去了
其他三条出错了
检查约束的第3种形式,继续对列中的数据进行更加详细的限制,详细到每个字符的内容。具体说,用正则表达式对数据进行规范。设置这种情况的约束时,使用like子句。
此处的”like”不是指“喜欢”,而是“像…的样子”的意思。
建立一个用户表users,来测试这种形式的检查约束。
create table users(
uid uniqueidentifier primary key default newid(),
uname nvarchar(20) not null unique,
password varchar(6)not null check(password like'[0-9][0-9][0-9][0-9][0-9][0-9]'),--[\\d]{6}
)
插入数据
insert into users(uname,password) values('没核儿','001234')
insert into users(uname,password) values('没核','123abc')
只有一条记录插入了,而另一条添加不进去
统计函数:
1、 最小值函数 min(column_name)
2、 最大值函数 max(column_name)
3、 求和函数:sum(column_name)
4、 求平均值函数:avg(column_name)
5、 行记录数:count(*),count(column_name),后者不统计空值列所在的行
use pubs
select count(*) '行记录数' from jobs
go
select min(min_lvl) as '最小值',max(min_lvl) '最大值'
from jobs
go
select sum(min_lvl) as '和',avg(min_lvl) '平均值'
from jobs
go
count(*)这个统计函数,在向表中添加记录或查询时非常有用。建一个表测试。
建一个成绩表,有两列数据,编号(主键),成绩;编号50个,用100以内的随机数表示;成绩在0-100之间,包括两者。
create table score(
sid int primary key,
sscore int not null check(sscore between 0 and 100),
)
通过sqlsever提供的while循环向表中添加记录:
用count(*)来控制循环的结束条件
while (select count(*) from score)<>50
begin
declare @id int;
declare @sscore int;
set @id=1+floor(rand()*100)
set @sscore=ceiling(rand()*100);
insert into score values(@id,@sscore)
end
查看成绩表,看是否是50条记录?
select count(*) as '实际记录数' from score
利用上述的方式向表中添加记录,中间也出现主键值重复的情况,但总会保证50条记录的插入。
考试结束了,考了语、数、外三门,成绩在0-100之间。要求包括表列中有学号(自增),三门成绩,总分,平均分。
因为无论总分也好,平均分也好,都与三门成绩紧密相关的。
重新创建新的成绩表:
create table score(
sid int identity primary key,
chinese int not null check(chinese between 0 and 100),
math int not null check(math between 0and 100),
english int not null check(english between 0and 100),
total_score as(chinese+math+english),
average_score as(chinese+math+english)/3.0,
)
向表中添加记录并查询:
insert into score values(70,80,90)
select*from score
由查询可知,只要插入三门成绩,总分和平均值会自动计算出来。
统计10名学生的成绩情况,三门成绩随机得到。
while (select count(*) from score)<>10
begin
declare @chinese int,@math int,@english int;
set @chinese=ceiling(rand()*100);
set @math=ceiling(rand()*100);
set @english=ceiling(rand()*100);
insert into score values(@chinese,@math,@english)
end
相关文章推荐
- SQLServer 2008 (六) 基础总结
- 畅通工程续
- 打开中文网站显示英文或者在浏览页面查询时无结果显示出现乱码
- Linux操作系统下IPTables配置
- 不算java初学者,但依然薄弱的太多
- java线程系列---Runnable和Thread的区别 .
- POJ 2762 Going from u to v or from v to u? Tarjan缩点+判断链
- 【Linux C】时间和日历历程
- 如何显示文件后缀名(来源 百度)
- 安卓中遇到服务端json返回处理错误
- 空基类优化
- URAL 1152 False Mirrors 状压+记忆化搜索
- hibernate与mysql映射类型对应表与mysql导入导出
- java环境
- 在ListView上面动态显示控件
- 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读
- 红黑树的插入删除-红黑树动态顺序统计
- python 信号处理句柄第二个参数的作用
- hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)
- JAVA中值类型和引用类型的不同 .