----sqlserver基礎知識點集合----
--1.表相關
--建庫
create database mytest
--使用庫
use mytest
--建表
create table td_user (
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,--主鍵約束,自增
[UserName]
nvarchar NOT NULL unique,--唯一性約束
[UserPwd]
nvarchar NOT NULL, [UserMail]
nvarchar NOT NULL, [age] [int] check (age>=0 and age<=100) NOT NULL,--條件約束
[CreateTime] [datetime] NOT NULL default getdate() --默認值
)
/
数据完整性=数据的有效性和正确性(完整性=有效,正确) 完整性约束 1.唯一约束(允许一行数据为空) 2.主键约束(唯一约束+ 非空约束) 3.默认值约束 4.check约束 5.主外键约束 6.非空约束 一个表在不同的关系中既可以是主表又可以是子表 主外键是一对多关系 /
create table student(
--字段名数据类型约束(一般在此只加非空约束)
stuId int not null, stuName varchar(20) not null, stuAge int not null, stuSex bit not null, stuTel varchar(13) not null, stuAddress varchar(30)
)
go
--添加主键约束
alter table student
add constraint PK_stuId primary key (stuId)
--添加唯一约束
alter table student
add constraint UQ_stuName unique (stuName)
--添加check约束
alter table student
add constraint CK_stuAge check (stuAge >=18 and stuAge <= 35)
--添加默认约束
alter table student
add constraint DF_stuAddress default (‘地址不详‘) for stuAddress
go
--添加外键约束
alter table exam --修改外键表
add constraint FK_stuId
foreign key(stuId) references student(stuId)
--外键表字段 主键表字段
--删除约束(alter table 表名drop constraint 约束名)
alter table exam
drop constraint FK_stuId
Go
/
哪个是外键表,就给它添加外键约束 给表添加主外键约束的时候遵循个一致 1.外键表外键与主键表主键数据类型一致(语法规范) 2.长度一致(语法规范) 3.名称一致(一般是项目规范,名称最好是一致) /
/
索引/
-------------------------------存储过程Study------------------------------
--删除表 drop table student go
--创建用户信息数据表 create table student ( id int identity(1,1),--递增, stuNo varchar(50) primary key,--唯一键 stuName varchar(50), stuAge datetime, stuSex varchar(5) )
--创建用户分数数据表 create table course ( id int identity(1, stuNo varchar(50), courseName varchar(50), courseScore decimal )
--插入数据 --插入单条数据 insert into student(stuNo,stuName,stuAge,stuSex) values(‘01‘,‘王男‘,‘1996-08-27 09:00:00.000‘,‘男‘)
--多数量插入数据 --SQL Server2008特有的插入 insert into student values(‘02‘,‘杨幂‘,‘1995-4-20 6:0:0‘,‘女‘), (‘03‘,‘程峰‘,‘1988-9-17 15:30:0‘,‘男‘)
insert into course values(‘02‘,‘思想政治‘,‘85.5‘), (‘02‘,‘数学‘,‘70‘),‘语文‘,‘80‘),‘物理‘,‘90‘),‘化学‘,‘65‘),‘英语‘,‘96‘)
insert into course values(‘03‘,‘60‘),‘84‘),‘76‘),‘54‘)
--使用UNION ALL来进行插入 insert into student select ‘04‘,‘wangan‘,‘1895-5-27 14:30:28‘,‘女‘ union all select ‘05‘,‘zhangnan‘,‘1990-1-20 19:0:0‘,‘女‘ go
--修改数据 update student set stuSex=‘男‘,stuAge=‘2016-5-9 8:0:0‘ where stuName=‘王男‘ go
--删除数据 delete from student where stuNo=01 go
--存储过程查询所有数据 --begin...end 类似编程语言中的{} create proc stu1 as begin select * from student; end go
exec stu1 go
--存储过程根据条件用户名查询用户信息 create proc stu2 @sname varchar(50) --声明全局变量 as begin select * from student s where [email?protected]; end go
exec stu2 ‘‘ go
--存储过程内部设定用户名查询用户信息 create proc stu3 @sname varchar(50)=‘王男‘ as begin select * from student s where [email?protected]; end go
exec stu3 go
--存储过程根据用户名查询是否存在这个用户信息 create proc stu4 @sname varchar(50), @result varchar(8) output --输出参数 as begin if (select COUNT(1) from student s where [email?protected])>0 --if exists (select COUNT(1) from student s where [email?protected]) set br/>@result=‘存在!‘ else set br/>@result=‘不存在!‘ end go
declare @result varchar(8) exec stu4 ‘王男‘,@result output print @result go
--存储过程内部设定局部变量用户名来查询用户信息 create proc stu5 as declare @sname varchar(50) --局部变量声明 set @sname=‘杨幂‘ begin select * from student s where [email?protected] end go exec stu5 go
--存储过程根据条件用户学号查询用户名 create proc stu6 @stuNo varchar(50) as declare @sname varchar(50) set @sname=(select s.stuName from student s where [email?protected]) select @sname go exec stu6 ‘01‘ go
--存储过程插入用户信息 create proc stu7 @stuNo varchar(50), @stuName varchar(50), @stuAge datetime, @stuSex varchar(5) as begin insert into student (stuNo,stuSex) values (@stuNo,@stuName,@stuAge,@stuSex) end go exec stu7 ‘07‘,‘王莽‘,‘2000-9-9 9:9:9‘,‘女‘ go
--存储过程根据用户名来删除对应的用户信息br/>[email?protected]@rowcount返回操作条数 --return返回信息,终止下面的操作 create proc stu8 @stuName varchar(50) as begin delete from student where [email?protected] return @@rowcount end go
declare @result varchar(50) exec @result=stu8 ‘王莽‘ select @result as ‘删除条数‘ --print @result go
--存储过程根据用户学号来查询他的平均分 create proc stu9 @stuNo varchar(50), @avg int output as begin set @avg=(select AVG(courseScore) from course where [email?protected]) --等同 --select @avg=AVG(courseScore) from course where [email?protected] end go declare @avg int exec stu9 ‘02‘,@avg output print @avg go
--存储过程根据用户学号来联合查询用户信息和课程信息 create proc stu10 @stuNo varchar(50) as select c.stuNo,s.stuName,s.stuAge,s.stuSex,c.courseName,c.courseScore from student s join course c on s.stuNo=c.stuNo where [email?protected] go exec stu10 ‘02‘ go
--存储过程判断学号是否存在,不存在,插入用户信息,返回消息;存在,返回信息 create proc stu11 @stuNo varchar(50), @stuSex varchar(5), @result varchar(50) output as if exists (select * from student where [email?protected]) begin set @result=‘对不起,学号已存在!‘ end else begin insert into student (stuNo,stuSex) values br/>(@stuNo,@stuSex) set @result=‘恭喜你,用户信息插入成功!‘ end go
declare @result varchar(50) exec stu11 ‘06‘,‘王忠磊‘,‘1980-8-8 8:9:0‘,‘男‘,@result output print @result
--存储过程查询当前用户的平均成绩与总的平均成绩之间的关系 create proc stu12 @stuNo varchar(50) as declare @curAvg decimal(18,2) declare @totalAvg decimal(18,2) if exists(select * from course where [email?protected]) begin set @totalAvg=(select AVG(courseScore) from course) select @curAvg=AVG(courseScore) from course where [email?protected] print (‘总的平均分:‘+convert(varchar(18),@totalAvg)) print (‘该生的平均分:‘+convert(varchar(18),@curAvg)) if @curAvg>@totalAvg print ‘高于平均水平!‘ else print ‘低于平均水平!‘ end else print ‘该生对应的分数信息不存在,请重新查询!‘ go exec stu12 ‘03‘go
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|