数据笔记3

单表约束:

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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值