SERVER数据库学习总结,数据库基础笔记分享

时间:2019-09-17 11:19来源:江苏十一选五手机版数据库
9.(补充)全局一时表,局地有时表 -- 系统中常用的囤积进程 sp_ stored procedure --sp_renamedb -- 修改数据库的名字 --sp_detach_db -- 分离 -- sp_attach_db -- 附加 --sp_executesql -- sp_renamedb -- exec 存款和

9.(补充)全局一时表,局地有时表

-- 系统中常用的囤积进程 sp_ stored procedure

--sp_renamedb -- 修改数据库的名字
--sp_detach_db -- 分离
-- sp_attach_db -- 附加

--sp_executesql

-- sp_renamedb

-- exec 存款和储蓄进度名 参数;
exec sp_江苏十一选五手机版,renamedb 'MyThirdDataBase', 'my3thDataBase';

exec sp_renamedb @dbname='my3thDataBase', @newname='笔者的第五个数据库';

-- sp_executesql
exec sp_executesql N'select @@version'; -- unicode编码
exec('select ''张三'', ''李四''');

-- 存款和储蓄进度的语法
/*
create proc[edure] usp_积攒进程名
参数名 类型名 [= 默认值] [output]
, 参数名 类型名 [= 默认值] [output]
, ...
as
begin
脚本
end
*/
-- 无参无重返值的积攒进度
go
create proc Exe3.usp_StuInfo
as
select * from vw_StuInfo;
go
exec Exe3.usp_StuInfo;
go

-- 有参有暗中同意值的仓储进度
-- 带有参数的
create proc Exe3.usp_StuSearch
@stuName nvarchar(10)
as
select * from Exe3.vw_StuInfo where stuName = @stuName;
go

exec Exe3.usp_StuSearch @stuName='焦作语儿';

exec Exe3.usp_StuSearch '承德语儿';

-- 包含默许值的存款和储蓄进程
-- 分页
go

create proc Exe3.usp_FenYe
@pageIndex int = 1
, @pageSize int = 10
as
begin
select '今每一日气很好';
select * from
(
select ROW_NUMBER() over(order by stuId) as num
, * from Exe3.newStudent
)as t
where t.num between (@pageIndex - 1) * @pageSize + 1 and @pageIndex * @pageSize;
end
go

exec Exe3.usp_FenYe 2, 5;

exec Exe3.usp_FenYe @pageSize=11, @pageIndex=3;

-- 有参有再次回到值的储存进程
-- return output

go
-- return 返回值
create proc Exe3.usp_ReturnTest
as
return 123;
go

/*
public string Func()
{
return "赵晓虎正是牛,你让牛亮亮咋做?";
}
*/
declare @num int;
exec @num = Exe3.usp_ReturnTest;

select @num;
go

三:循环结构 --1-- 输出九八次'笔者爱你' declare @i int=1  while(@i<=99) begin print '第'+convert(varchar,@i)+'小编爱你' set @i+=1 end

--为EmpId扩大二个主键约束
alter table Class add constraint PK_Class_EmpId primary key(EmpId)

实行流程:
from子句 -> where子句 ->group by子句 ->having子句 ->select子句 ->order by子句

exec sp_helptext 积累进度名      能够查看储存进度代码

--查询学生姓名、年龄、班级及成绩(战表属于第三张表)
select
ts.tsname,
ts.tsage,
tc.tclasssname,
tscore.tenglish,
tscore.tmath
from TblStudent as ts
inner join TblClass as tc on ts.tsclassid=tc.tclassid 
inner join TblScore as tscore on tscore.tsid=ts.tsid

-- 名字
-- 作用(例子)
-- 语法

--1-- 请宣示变量@name表示学生姓名,对该学生年龄实行划等第 具体如下: 11岁前体现:'小学生' 12-17出示'初级中学生'  18-22出示'高级中学生' 23-28显示'博士' 28以上'超人' 结果格式:xxx是三个xxx

--为年龄扩张二个反省约束,年龄必须在1—120岁时期(包括)
alter table Class add constraint CK_Class_EmpAge check(EmpAge>=0 and EmpAge<=120)

CPU 时间 = 16 皮秒,占用时间 = 31 飞秒。

SQL Server 分析和编写翻译时间:
CPU 时间 = 0 微秒,占用时间 = 0 阿秒。
SQL Server 深入分析和编写翻译时间:
CPU 时间 = 0 皮秒,占用时间 = 0 阿秒。
SQL Server 剖析和编写翻译时间:
CPU 时间 = 0 阿秒,占用时间 = 0 阿秒。

(2 行受影响)
表 'newStudent'。扫描计数 1,逻辑读取 5 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 施行时间:
CPU 时间 = 15 皮秒,占用时间 = 24 纳秒。
*/

-- 索引不自然好

create unique nonclustered index ix_目录名字 on 表
(字段 desc, 字段 desc)

exec usp_selectGrade '李小龙',@id output 

一部分有时表:表名以#为开首。只在时下对话中有效,无法跨连接访谈。即便一向在一而再会话中创立,则当前线总指挥部是断开后删除,如若是在积累进程中制造的,则存储进度试行完结后删除

-- 分页

select * from TestDataBase..Student;
-- 当前页数、每页展现的条数 10
-- SQL Server 2005+ row_number() 可认为表生成二个总是的数字列
-- 语法 row_number() over(order by 字段)
-- select ROW_NUMBER() over(order by stuId), * from TestDataBase..Student

select top 10 * from TestDataBase..Student;

select top 10 * from TestDataBase..Student
where stuId not in(select top 10 stuId from TestDataBase..Student);

set statistics io on;
set statistics time on;

select top 10 * from TestDataBase..Student
where stuId not in(select top ((100-1)*10) stuId from TestDataBase..Student);

--
select * from
(
select ROW_NUMBER() over(order by stuId) as num, * from TestDataBase..Student
) as t
where
t.num between 1 and 10;

select * from
(
select ROW_NUMBER() over(order by stuId) as num, * from TestDataBase..Student
) as t
where
t.num between 21 and 30;
/*
select * from
(
select ROW_NUMBER() over(order by stuId) as num, * from TestDataBase..Student
) as t
where
t.num between (n-1) * m + 1 and n * m;
*/

-- 公用表表明式(CTE)
-- 语法
/*
with 别名
as
(
结果集
)
运用小名的贰个查询;
*/
with t
as
(
select
t1.stuId
, t1.stuName
, case t1.stuSex when 'f' then '女' else '男' end as stuSex
, datediff(year, t1.stuBirthdate, GETDATE()) as stuAge
, t1.stuEmail
, t1.stuAddress
, t1.stuPhone
, t2.className
, t3.testBase
, t3.testBeyond
, t3.testPro
from
TestDataBase..Student as t1
inner join
TestDataBase..Course as t2
on t1.classId = t2.classId
inner join
TestDataBase..Score as t3
on t1.stuId = t3.stuId
)
select * from t where t.stuName = '舟山语儿';

-- t能够引用
-- 自交差
-- 生成两个数字表

select num from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as t(num);

-- 自交差 10000
select
t1.num * 10 + t2.num + 1
from
(select num from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as t(num)) as t1
cross join
(select num from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as t(num)) as t2
;
-- 用公用表表明式
with t
as
(
select num from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as tt(num)
)
select
t1.num * 1000 + t2.num * 100 + t3.num * 10 + t4.num + 1 as orderId
from
t as t1
cross join
t as t2
cross join
t as t3
cross join
t as t4
order by
orderId;

select * from HeiMa8..AreaFull as t1 inner join HeiMa8..AreaFull as t2 on t1.AreaPid = t2.AreaId ;

--
-- 在急需频仍的操作一些表表明式的时候
-- 视图和内联表值函数

-- 视图
-- 正是将查询的讲话封装成几个对象,每一回查询的时候平素操作这些指标就可以
-- 虚拟表
-- 使用派生表
select * from
(
select
t1.stuId
, t1.stuName
, case t1.stuSex when 'f' then '女' else '男' end as stuSex
, datediff(year, t1.stuBirthdate, GETDATE()) as stuAge
, t1.stuEmail
, t1.stuAddress
, t1.stuPhone
, t2.className
, t3.testBase
, t3.testBeyond
, t3.testPro
from
TestDataBase..Student as t1
inner join
TestDataBase..Course as t2
on t1.classId = t2.classId
inner join
TestDataBase..Score as t3
on t1.stuId = t3.stuId
) as t
where t.stuName = '滨州语儿';

-- 创立视图
-- 语法:
/*
create view vw_视图名
as
select语句
;
*/

use TestDataBase;
go
create view vw_StuInfo
as
select
ROW_NUMBER() over(order by t1.stuId) as n
, t1.stuId
, t1.stuName
, case t1.stuSex when 'f' then '女' else '男' end as stuSex
, datediff(year, t1.stuBirthdate, GETDATE()) as stuAge
, t1.stuEmail
, t1.stuAddress
, t1.stuPhone
, t2.className
, t3.testBase
, t3.testBeyond
, t3.testPro
from
TestDataBase..Student as t1
inner join
TestDataBase..Course as t2
on t1.classId = t2.classId
inner join
TestDataBase..Score as t3
on t1.stuId = t3.stuId
;
go

-- 虚构的表
select * from vw_StuInfo where stuName='通化语儿';

select * from vw_StuInfo where stuId = 304;

update Testdatabase..Student set stuName = '嘉嘉' where stuId=304;

--
-- 视图能够立异数据,但是不建议更新和充实以及去除
-- 连接多张表、视图并不曾显式全体的字段

--
-- 视图的多个生死攸关功效(数据安全)
use HeiMa8;
go
create view Exe3.vw_StuInfo
as
select * from TestDataBase..vw_StuInfo;
go

-- HeiMa8
select * from Exe3.vw_StuInfo;

-- select * from sys.databases;

-- 内联表值函数
-- 带有参数的视图
-- 效用: 将一个可变条件的查询封装成贰个函数对象,施行结果是一张表
/*
create function fn_函数名
(@参数名 as 类型, ...)
returns table
as
return 查询语句;
*/
-- 分页
-- @pageIndex 当前页码
-- @pageSize 每页条数
use TestDataBase;
go

create function fn_FenYe
(@pageSize as int, @pageIndex as int)
returns table
as
return
select * from
(
select ROW_NUMBER() over(order by stuId) as num, * from Student
) as t
where t.num between (@pageIndex-1) * @pageSize + 1 and @pageIndex * @pageSize;
go
-- 分页

-- 1008
select * from fn_FenYe(10, 1008);

-- 视图怎么提供权限,怎么安全
-- 剧中人物 访谈手艺的汇聚
-- 架构 可访谈对象的会集
-- 视图 表的一个结果集

 

-- 变量
-- int num = 10;
-- 声明 赋值 使用
-- declare @变量名 类型;
-- set @变量名 = 值;

declare @num varchar(2);
set @num = '10';

select @num + 'a';
go

-- SQL Server 2008+
declare @num int = 10;
-- 局地变量
-- 系统变量 @@开端

select @@connections
select @@CPU_BUSY;

-- @@error 近些日子一回实践SQL语句的错误码
select @@ERROR;
-- @@version
select @@version
print @@version;

-- @@identity 近来一回插入数据的自发性增加编号
select @@IDENTITY;
use HeiMa8 ;
select * from Exe3.newStudent where stuId = (select @@IDENTITY);

insert into Exe3.newStudent
(stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, classId)
values('牛亮亮', 'm', '1999-9-9 9:9:9.123', '2001-1-1 1:1:1.111','123', '123', '12345678909', 2);

insert into Exe3.newStudent(stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, classId)
output inserted.*
values('刘琦', 'm', '1999-9-9 9:9:9.123', '2001-1-1 1:1:1.111','123', '123', '12345678909', 2);

-- @@trancount
select @@TRANCOUNT -- 获得当前政工的深浅

-- @@SPID
select @@SPID; -- session_id
kill 54

-- set
-- select
-- select @变量=值
go

declare @num int;
select @num = 10;
select @num;
go

select top 3 * from Exe3.newStudent

declare @name nvarchar(1000) = '';
-- set @name = (select top 1 stuName from Exe3.newStudent);
select @name+=stuName from Exe3.newStudent where stuId<10;
select @name;

select @@ERROR;

select * from sys.messages where message_id = 208;

-- 流程序调整制(C#的编程)
-- 选取结构 if-else
-- 循环结构 while
/*
if (bool表达式)
begin -- {
脚本
end -- }
else if bool表达式
begin
-- 脚本
end
*/

declare @num int;
--set @num = 12;

if @num is null
select '是NULL';
else if @num % 2 = 0
begin
select '是偶数';
end
else
begin
select '是奇数';
end
go
-- 循环结构
/*
while bool表达式
begin
脚本
end
*/
declare @sum int;-- = 0;
declare @i int = 0;

while @i <= 100
begin
set @sum += @i;
set @i += 1; -- 没有 @i++ 的语法
end
select @sum;

-- 注意set

 

 

 


  if exists(select * from sysobjects where name='Classes')

--增添外键约束,表Class中有一列EmpDeptId援引Student表中的DeptId
alter table Class add EmpDeptId int not null
alter table Student add constraint PK_Student_DeptId primary key(DeptId)

-- 事务

-- 最宗旨的操作以专门的学问为单位
-- 将贰个早已到位的数据库操作行为规定为贰个事情
-- 特点:
-- 原子性——实施的结果是01特点(要么实现、要么失利)
-- 长久性——推行的结果不可逆袭
-- 一致性——一旦成功作业,各类版本的结果都一律
-- 隔绝性——事务与业务之间不争论

-- 事务严苛定义: 找三个操作,若是满意原子性、悠久性、一致性和隔开分离性就称为二个事务

select * from Exe2.LoginTbl;

insert into Exe2.LoginTbl(uid, pwd)
values
('苏坤', 'susu123')
, ('尼古拉斯洛夫斯基斯巴达司机四司机驾车员司机司机', '123')
, ('牛亮亮', 'niuniu123');


-- 自身写的政工
--事务
create table bank
(
cId char(4) primary key,
balance money, --余额
)

alter table bank
add constraint CH_balance check(balance >=10)

go
--delete from bank
insert into bank values('0001',1000)
insert into bank values('0002',10)
go

select * from bank

-- 0001 -> 0002 1000元

-- 暗中认可的作业格局——隐式事务
update bank set balance=balance - 1000 where cid='0001';
update bank set balance=balance + 1000 where cid='0002';
-- 手动实施工作
-- 开启事务 -> 实行语句 -> 判别满意与否 -> 提交或回滚
-- 语法
-- 开启 begin transaction
-- 提交 commit
-- 回滚 rollback

select @@TRANCOUNT;

begin transaction

delete from TestDataBase..Score;
delete from TestDataBase..Student;

select * from HeiMa8.Exe3.vw_StuInfo;

rollback

--
select * from bank;

begin tran
declare @myError int;
update bank set balance=balance - 900 where cid='0001';
set @myError = @@ERROR;
update bank set balance=balance + 900 where cid='0002';
set @myError += @@ERROR;
if @myError > 0
rollback
else
commit
;

-- try-catch
--begin try
--end try
--begin catch
--end catch

begin tran
begin try
update bank set balance=balance - 1000 where cid='0001';
update bank set balance=balance + 1000 where cid='0002';
commit;
end try
begin catch
rollback;
end catch
;

-- 怎么驾驭成功并未有? -- 使用变量
-- 怎么利用职业? -- 存款和储蓄进程
declare @isSuccess bit;
begin tran
begin try
update bank set balance=balance - 900 where cid='0001';
update bank set balance=balance + 900 where cid='0002';
commit;
set @isSuccess = 'true';
end try
begin catch
rollback;
set @isSuccess = 'false';
end catch
select @isSuccess;
;

 

-- 存款和储蓄进程
-- 轻松的当作数据库中的方法
-- 函数、视图、存款和储蓄进程

-- 正是一段奉行代码

name varchar(10) not null, --名称

--》》》full join 是询问全体的数码(未有的为空)

select语句
语法:select distinct | top 数字 [percent] 字段1 as 别名,包罗字段表明式,函数,常量
from 表或结果集
where 逻辑条件 | 模糊管理 | 范围管理 | null值管理
group by 分组字段
having 筛选标准
order by 排序依赖;

Select @gradeid=gradeid from student where  studentname=@name

视图的指标是利于查询,所以一般景色下无法对视图举行增删改查

-- 银行中间转播的案例

create proc Exe3.usp_ZhuanZhang
@from char(4)
, @to char(4)
, @money money
as
begin
begin tran
begin try
update bank set balance=balance - @money where cid=@from;
update bank set balance=balance + @money where cid=@to;
commit;
end try
begin catch
rollback;
end catch
end
go

--
select * from bank;

exec Exe3.usp_ZhuanZhang '0002', '0001', 900;

go
-- 考虑重临值
create proc Exe3.usp_ZhuanZhangExt
@from char(4)
, @to char(4)
, @money money
, @isSuccess int output -- 表示须求在仓库储存进程中赋值,传出去
as
begin
begin tran
begin try
update bank set balance=balance - @money where cid=@from;
update bank set balance=balance + @money where cid=@to;
commit;
set @isSuccess = 1;
end try
begin catch
rollback;
set @isSuccess = 0;
end catch
end
go

-- 关键使用法
-- 定义两个变量,不赋值,调用存款和储蓄进度,将参数字传送入 后跟output

declare @isSuccess int;

-- exec Exe3.usp_ZhuanZhangExt '0001', '0002', 500, @isSuccess output;
exec Exe3.usp_ZhuanZhangExt
@from = '0001',
@to = '0002',
@money = -500,
@isSuccess = @isSuccess output;

select @isSuccess;

-- 注意,不要将变量名命名称叫与存款和储蓄进度的参数一致
go

create proc Exe2.usp_Login
@uid nvarchar(20)
, @pwd varchar(20)
, @isLogin int output
as
select @isLogin=COUNT(*) from Exe2.LoginTbl
where uid=@uid and pwd=@pwd;
go

--
select * from Exe2.LoginTbl;

declare @isTrue int;

exec Exe2.usp_Login '苏坤1', '1234', @isTrue output;

select @isTrue;

-- 用C#实施存款和储蓄进度
-- 步骤
-- -> 将sql语句改为存款和储蓄进程名
-- -> 修改CommandType命令(text)
-- -> 看再次回到结果调用钦命方法
-- -> 如若有参数,与参数化查询用法同样
-- -> 如若有重返值,设置参数方向就能够(难度)

exec Exe3.usp_FenYe;

-- 触发器
-- 在您实践一个操作的时候,自动的实行的二个仓储进程

-- DML DDL
-- 对作为的归类 update、delete、insert
-- 发生格局 after | instead of

-- 语法
/*
create trigger tr_in|del|up_触发器的名字 on 表名
for | after | instead of
update | delete | insert
as
begin
脚本
end
*/

-- inserted deleted

select * from inserted;

--
select * from Exe2.LoginTbl;
go
create trigger Exe2.tr_del_deleteReturn on Exe2.loginTbl
after delete
as
insert into Exe2.LoginTbl(uid, pwd)
select uid, PWD from deleted;
go

delete from Exe2.LoginTbl;

-- 作为数听别人证明的填补

--

-- 索引正是数码的目录
-- 新华字典
-- 拼音(集中索引) she 与本文一致
-- 部首(非集中索引) 厍 约等于积累的一个键值对表

-- 字 拼音 意思 词组。。。

-- 如何加多索引

set statistics io on;
set statistics time on;

select * from Exe3.newStudent where stuName='苍昊天';
/*
SQL Server 深入分析和编写翻译时间:
CPU 时间 = 0 阿秒,占用时间 = 0 阿秒。
SQL Server 解析和编写翻译时间:
CPU 时间 = 0 纳秒,占用时间 = 20 纳秒。

(2 行受影响)
表 'newStudent'。扫描计数 1,逻辑读取 2264 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 施行时间:

print 和select

--4.自由财富
deallocate cur_Student

-- 子查询
-- 就是在二个询问中嵌套四个查询
-- 一般意义正是利用多张表查询多个新闻
-- 举例查询"齐齐哈尔语儿"的实际业绩
select * from TestDataBase..Student;
select * from TestDataBase..Score;
-- 在学员表中查得stuId,然后再到分数表中查询分数
select stuId from TestDataBase..Student where stuName ='佳木斯语儿';

if exists(select * from sysobjects where name='视图名')

--2.1.1将游标向后运动一条
fetch next from cur_Student

select * from TestDataBase..Score where stuId = 5723;

-- 外界查询
select *
from TestDataBase..Score
where stuId in
( -- 子查询、内部查询
select stuId from TestDataBase..Student where stuName ='周口语儿'
);
-- 外界查询(子查询)

-- 将贰个询问的结果作为另二个询问的准绳

-- 考试成绩与课程查出来 Course
select * from TestDataBase..Course;

select className from TestDataBase..Course where classId in
(
select top 1 classId from TestDataBase..Student where stuName='齐齐哈尔语儿'
);

-- 三个单值 外界查询 where 字段 in (子查询)
select '宜宾语儿' , (select className from TestDataBase..Course where classId in
(
select top 1 classId from TestDataBase..Student where stuName='茂名语儿'
));

-- 表值 select * from (子查询) as 别名
select * from (
select stuName, case stuSex when 'f' then '女' else '男' end as stuSex, DATEDIFF(YEAR, stuBirthdate, GETDATE()) as stuAge from TestDataBase..Student where stuId <= 10
) as t
where t.stuAge between 20 and 30;

--
-- 职员和工人编号 基本薪水 请假扣款 补贴 绩效奖金 项目奖金 社会养老保险扣款
/*
select
来源职员和工人表的查询
, 来自报酬等第表的查询
, 考勤表的查询
... ...
*/

-- 独立子查询(标量、多值)

-- 相关子查询
-- 查询泰安语儿的三科平均分
select AVG(testBase), AVG(testBeyond), AVG(testPro) from TestDataBase..Score where stuId = (select top 1 stuId from TestDataBase..Student where stuName='衢州语儿');

select
stuName
, (select AVG(TestBase) from TestDataBase..Score where stuId = t.stuId) as 基础平均分
, (select AVG(testBeyond) from TestDataBase..Score where stuId = t.stuId) as 中级平均分
, (select AVG(testPro) from TestDataBase..Score where stuId = t.stuId) as 高档平均分
from
TestDataBase..Student as t
where
stuName = '安阳语儿';


use HeiMa8;

create table Score
(
学号 nvarchar(10),
课程 nvarchar(10),
成绩 int
)

insert into Score values('0001','语文',87);
insert into Score values('0001','数学',79);
insert into Score values('0001','英语',95);
insert into Score values('0002','语文',69);
insert into Score values('0002','数学',84);

case表达式:
--if-else结构
case
when 条件1 then 值1
when 条件2 then 值2
。。。
else 值n
end

--switch-case结构
case 字段
when 匹配1 then 值1
when 匹配2 then 值2
。。。
else 值n
end
Set statistics io on;--张开监视磁盘IO操作
Set statistics time on;

select * from Score;
-- 分组
select 学号, '语文', '数学', '英语' from Score group by 学号;
--率先种结构示例:switch--case
select
学号
, case when 课程='语文' then 成绩 else 0 end as '语文'
, case when 课程='数学' then 成绩 else 0 end as '数学'
, case when 课程='英语' then 成绩 else 0 end as '英语'

 2. 赋值操作,   如: select 变量名=值  

--输出存款和储蓄进度
exec usp_HelloWorld

from Score

select
学号
, sum(case when 课程='语文' then 成绩 else 0 end) as '语文'
, sum(case when 课程='数学' then 成绩 else 0 end) as '数学'
, sum(case when 课程='英语' then 成绩 else 0 end) as '英语'
from Score
group by 学号;

其次种结构示例:if--else
select
sum(case when T.充值金额>=500 then T.充钱金额 end) as '鲸鱼用户'
,sum(case when T.充钱金额>=100 and T.充钱金额<500 then T.充钱金额 end) as '海豚客商'
,sum(case when T.充钱金额>=10 and T.充钱金额<100 then T.充钱金额 end) as '小鱼客商'
from
(
select [ChannelUserKey] as 用户ID,sum(convert(float,[RechargeAmount])/100) as 充钱金额,sum([RechargeCount]) as 充钱顾客
from [dbo].[FactRecharge]
where datekey>=20141201 and datekey<=20141210
and ChannelKey=1
group by [ChannelUserKey]
) T


-- 透视转变

select * from Score pivot(
sum(成绩) for 课程 in (语文,数学,英语)
) as t


-- 表连接
-- 功用:将多张表产生一张表
-- 用法与分类(案例)
-- 分类:交叉连接、内接连、外接连

create table joinPerson
(
pId int identity(1,1) not null
, pName nvarchar(10) not null
, titleId int null
);
alter table joinPerson
add constraint PK_joinPerson_pId primary key(pId);

create table joinTitle
(
titleId int identity(1,1) not null
, titleName varchar(10) not null
);
alter table joinTitle
add constraint PK_joinTitle_titleId primary key(titleId);

insert into joinTitle(titleName) values('Teacher'),('Master');
insert into joinPerson(pName, titleId) values('牛亮亮', 1),('苏坤', 2),('杨中科', NULL);

select * from joinPerson;
select * from joinTitle;

select pName, titleName from joinPerson cross join joinTitle;
-- 如若两章表中有重名的字段,就能够出难点,就须要给表加外号
select t1.pName, t2.titleName from joinPerson as t1 cross join joinTitle as t2;

-- 内连接
select
*
from
joinPerson as t1
inner join
joinTitle as t2
on t1.titleId = t2.titleId;

-- 左外连接
select
*
from
joinPerson as t1
left join
joinTitle as t2
on t1.titleId = t2.titleId;

-- 右外接连
insert into joinTitle(titleName) values('班主任');

select
*
from
joinPerson as t1
right join
joinTitle as t2
on t1.titleId = t2.titleId;

-- 全连接
select
*
from
joinPerson as t1
full join
joinTitle as t2
on t1.titleId = t2.titleId;

-- 表表明式
-- 正是经过表与表的演算,获得多少个结果集作为from后边的数据源
-- 1、派生表 重临结果集的子查询
-- 语法: select ... from (select 查询) as 别名;
-- 注意: 不能够运用游标
-- 2、公用表表达式CTE
-- 3、视图
-- 4、内联表值函数

-- 查询学生音讯
select * from
TestDataBase..Student as t1
inner join
TestDataBase..Course as t2
on t1.classId = t2.classId
inner join
TestDataBase..Score as t3
on t1.stuId = t3.stuId
where
stuName = '河源语儿';


select * from
(
select
t1.stuId
, t1.stuName
, case t1.stuSex when 'f' then '女' else '男' end as stuSex
, datediff(year, t1.stuBirthdate, GETDATE()) as stuAge
, t1.stuEmail
, t1.stuAddress
, t1.stuPhone
, t2.className
, t3.testBase
, t3.testBeyond
, t3.testPro
from
TestDataBase..Student as t1
inner join
TestDataBase..Course as t2
on t1.classId = t2.classId
inner join
TestDataBase..Score as t3
on t1.stuId = t3.stuId
) as t
where t.stuName = '北海语儿';


  4、 带通配符参数存款和储蓄过程

》》》》》》子查询分页《《《《《《

exec sp_helptext 'proc_temp'

 

As

--在视图中的查询语句,必得为每一列创造三个列名
create view vw2
as
select
tsname,
case
when tsage>13 and tsage<=16 then '少年'
when tsage>50 then '老年'
else '青壮年'
end as 称呼
from TblStudent

  1. NOT EXISTS 子查询
     NOT EXISTS: exists 关键字能够检验数据是不是留存,固然子虚乌有重回真
    语法
     if not exists(子查询)
     语句
    示例:
     查询这一个大学学生是否尚未叫张三的
     if not exists( select * from student
     where studentname='张三' )
     begin
     print '未有叫张三的'
     end

--把其余叁个查询的结果作为当下询问的尺度来选择。
--子查询中=、!= 、< 、> 、<= 、>=之后只可以回到单个值,倘诺八个值就能报错
--消除办法 能够用in 代替
select * from Student
where tbage in(select tbage from Student where tbname=3)

As

--创制插入数据触发器
create trigger tri_Teacher_insert_after
on Teacher after insert
as
begin
declare @id int
declare @name varchar(10)
declare @phone int
declare @mail varchar(50)
select @id=tcid,@name=tcname,@phone=tcphone,@mail=tcmail from inserted

   5、 不缓存存款和储蓄进程

6.仓库储存进度

视图

--删除一列(EmpAddress列)
alter table Class drop column EmpAddress

 

declare @sum int=0
declare @i int =1
while @i<=100
begin
if @i%2<>0
begin
set @sum=@sum+@i
end
end
print @sum

as

--一条语句删除多个约束,约束名用 逗号 隔绝
alter table Class drop constraint
PK_Student_DeptId,
FK_Class_Student,
CK_Class_EmpAge

 2. set只好赋贰个恒定的值,而select能动态的赋值(值来自于表内) select的效应  

--》》》练习:查询全数学生(加入和未参预的试验)的学员姓名、年龄、战绩,若无插足考试展现缺考,假如小于english可能math 小于60分展现不如格
select
ts.tsname,
ts.tsage,
tscore.tsid,
case
when tscore.tenglish is null then '缺考'
else convert(varchar(10),tscore.tenglish)
end as 德文战绩,
case
when tscore.tmath id null then '缺考'
else convert (varchar(10),tscore.tmath)
end as 数学成绩,
是或不是报名考试=
case
when tscore.tscoreid is null then '是'
else '否'
end
from TblStudent as ts
left join TblScore as tscore on ts.tsid=tscore.tsid

exec usp_one '李%'

2.连表查询

declare @avgScore int select @avgScore=AVG(writtenExam) from StuExam if(@avgScore>=70) begin print '本班战绩卓越'

--把二个查询结果作为其余贰个询问的查询源
select * from (select * from Student where tbage between 3 and 5)
as ct where tbname=5 --ct是新创的表名

Select * from student where gradeId=@gradeid

--查询未有插手考试的上学的儿童的真名与数码
--把左表(left join 关键字左侧的表)中的全体记下都显示出来,对于这一个在右表中能找到相称的笔录,展现对应杰出数据,对于那个右表中找不到十三分的笔录展现为null
select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
left outer join TblSore.tsid=ts.tsid   --outer能够不写

exec sp_helptext 储存进程名      可以查看积累进程代码

本文是个人学习SQL Server 数据库时的过去笔记的整治,内容重视是对数据库的中坚增加和删除改查的SQL语句操作封锁,视图,存款和储蓄进程,触发器的主导精晓。

为何须要仓库储存进度?

》》》开窗函数分页《《《

一 存款和储蓄进程的概念

--回滚事务
rollback transaction

三 客商自定义的积攒进度

--修改一下Emp 的数据类型(varchar(200))
alter table Class alter column Emp varchar(200)

  go  

--1.概念游标
declare cur_Student cursor fast_forward for select * from Student

 

--输出值
exec usp_Add 100,230

1.囤积进度只在开创时开展编写翻译,今后每一趟试行存储进程都不需再重新编写翻译,而相似SQL语句每推行一遍就编写翻译叁次,所以使用存款和储蓄过程可增长数据库实行进度。 2.当对数据库进行理并答复杂操作时,可将此复杂操效能存储进度封装起来与数据库提供的事务管理结合一齐利用。 3.存款和储蓄进程能够重复使用,可减掉数据库开拓职员的事业量。 4.安全性高,可设定独有某个客商才有所对点名存款和储蓄进度的使用权

事务有八个属性:原子性 一致性 隔开性 漫长性
原子性:对于数据修改,要么全都施行,要么全都不实行
一致性:当数码造成时,数据必需处于同一状态
隔开性:对数码举行改动的具备并发事务时互相隔开的。那标识专业必得是独自的,它不应以别的方式注重于或影响别的作业
永久性:事务完毕后,他对数据库的改造被长久保持,事务日志可以维持职业的长久性

 insert into Classes select 't10',25 union select 't11',18 union select 't12',23

--第七页数据 每页5条数据
--over属于开窗函数

-2-- 依据输入的岁数字显示得人的发育阶段 未中年人<18,青少年人<30,成人<60,天命之年人<100,超人>=100

后记

drop table TeaInfos  

--查询全数学生的姓名、年龄及所在班级 (班级在另叁个表中)
--当四个列在差异的表中时,要跨表查询,所以一般能够应用inner join
--tc ts是对表名起的小名
select
ts.tsname,
ts.tsage,
tc.tclassname
from TblStudent as ts
inner join TblClass as tc on ts.tsclassid=tc.tclassid(只询问五个表中都局地数据)

(注意:加密仓库储存进程前相应备份原始存款和储蓄过程,且加密应该在安排到生产条件前完毕。) 

--2.展开游标
open cur_Student

性别     (男或女,暗中认可男)   年龄     (12-60)   电话     (独一)   班级编号 (外键)   

--赋值
set @name='yhz'
set @age=17

调用存款和储蓄进度:exec usp_selectstu

 

  declare @temp int=1 --注解的同临时间赋值  

print @id
print @name
print @phone
print @mail
end

调用存款和储蓄进程:exec usp_stuInfo 2

--删除二个仓库储存进程
drop proc usp_Add

2-- 注解多个变量存款和储蓄'姓名、性别、年龄',再打字与印刷音信,格式如下: 姓名:杰达姆,性别:男,年龄:18 --注脚

alter table Class add constraint FK_Class_Student foreign key(EmpDeptId)
references Student(DeptId)

   我们第一学习数据库设计的局地知识点和用SQL语句建库。

--提交事务
commit transaction

2.施行进程块,功效高

注:内容相比较基础,适合入门者对SQL Server 数据库的询问!!!

create proc usp_selectGrade @name nvarchar(10),@gradeid int output

3.视图

if exists(select * from sysobjects where name='TeaInfos')

--》》》全局变量
print @@language
print @@version
print 'aaa'+100
--通过判别@@error变量中是否不为0,就能够剖断上一条sql语句施行是或不是出错了
--借使@@error为0,表示上一条sql语句实施没出错,倘诺@@error不为0,则意味上一条sql语句出错了。
print@@error

上边是制造表的SQL语句(包罗了一旦有该表先删除在建表)

--用一条语句为表扩展三个约束
alter table Class add
constraint PK_Student_DeptId primary key(DeptId),
constraint CK_Class_EmpAge check(EmpAge>=0 and EmpAge<=120),
add constraint DF_Class_EmpGender default('男') for EmpGender

缓存就是数据调换的缓冲区(称作Cache),当某一硬件要读取数据时,会率先从缓存中检索供给的数据,假如找到了则直接实行,找不到的话则从内部存款和储蓄器中找。由于缓存的运作速度比内部存储器快得多,故缓存的机能就是接济硬件更加快地运转。

4.声称变量与运用

tel char(11) unique, --电话

全局偶然表:表名以##为起初。多少个会话可分享全局一时表。当创设全局一时表的对话断开,况兼没有顾客正在采访全局有时表时删除

 

--2.1 对游标的操作
--将每条数据读取并出口

exec sp_helptext 'proc_temp_encryption'

--1》突显第一页的数量
--分页查询的时候首先是将数据排序
select * from Student order by id desc

存款和储蓄进程的独到之处:

--为EmpName扩大二个唯一约束
alter table Class add constraint UQ_Class_EmpName unique(EmpName)

else print '超人'

正文

--4-- 难点: 依据如下法规对机试成绩举办反复加分,       直到机试平均分超过85分截止       请编写T-SQL语句完成,注:(循环+多分支) 90分以上:  不加分 80-89分:   加1分 70-79分:   加2分 60-69分:   加3分 60分以下:  加5分 declare @a int   while(1=1) begin select @a=AVG(labExam)from dbo.stuExam if(@a<85) begin update dbo.stuExam set labExam =case          when labExam>=90 then  labExam          when labExam>=80 then labExam+1          when labExam>=70 then labExam+2          when labExam>=60 then labExam+3          else          labExam+5         end end else break end select AVG(labExam) AS 机试战表平均分 from dbo.stuExam

--》》》左外联接(中国左翼小说家联盟接)

use MySchool

--正确
create view vw3
as
select top 3 * from TblStudent order by tsage desc

--1-- 注脚变量number,并赋值,然后决断是偶数还是奇数,结果如下: 当前值为11,它是一个奇数 declare @number int set @number=12 if(@number%2=0) print '该数为偶数' else print '该数为奇数' -

--输出值
print @name
print @age

始建国门外键约束

--插入数据
insert into Teacher values('网名好','12352536','Wjifdfji@qq.com')

declare @id int

--3.关门游标
close cur_Student

Sql Server系统内部存款和储蓄器管理在未曾布署内部存款和储蓄器最大值,相当多时候大家会发觉运维Sql Server的系统内部存款和储蓄器往往只扩充不收缩。那是出于他对此内存使用的国策是有个别许闲置的内部存款和储蓄器就占用多少,直到内部存款和储蓄器使用虑达到系统峰值时(预留内部存储器遵照系统暗许预留使用为准,至少4M),才会免去一些缓存释放一些些的内部存款和储蓄器为新的缓存腾出空间。

视图自个儿并不存款和储蓄数据,只是存款和储蓄的查询语句,若是把实际表中的数量修改后,则经过视图查询到的结果也变了。

else if(@age<60)

前言

exec proc_temp_encryption;

1.子查询

--应用这些,大家得以对有些主要的存款和储蓄进度实行加密。

--账户A给账户B转账 当一方出题目时,三个语句都不试行
begin tran
declare @sum int=0
update bank set balance =balance-1000 where cid='0001'
set @sum=@sum+@@error
update banl set balance =balance+1000 where cid='0002'
set @sum=@sum+@@error

语法如下

select * from Student
where tbage=(select tbage from Student where tbname=3)

create proc proc_temp_encryption

declare @rcount int
select @rcount=count(*) from TblStudent
print @rcount

1.班级表   班级编号 (主键)   班级名   (长度固定3位)   班级人数 (暗中认可30)

if @sum<>0
begin
rollback tran
print '回滚'
end
else
begin
commit tran
print '提交了'
end

As

--删除数据
--sql server中的触发器是表级触发器,无论删除多少行照旧插入多少行,只触发一遍
--是按语句来触发的,每一趟实行壹回讲话,触发一遍触发器
delete from Teacher where tcid>18

1:非相关子查询是独自于表面查询的子查询,子查询总共实施三遍,实施实现后将值传递给外界查询。  2:相关子查询的施行重视于外界查询的数量,外界查询试行一行,子查询就实行贰次。数据是还是不是留存,假如不设有重临真

--》》》右外对接
--代表要将右表(right join 侧边的表)中的全部数据都来得,左表中只呈现那三个相称的多少。

 

--创建分页存款和储蓄进程
create proc usp_PageBum
@pageSize int, --每页彰显的数目
@pageIndex int --第几页
as
begin
select * from (select *,row_number()over (order by CityID asc)as num from S_City )as s
where s.num between (@pageIndex -1)*@pageSize +1 and @pageIndex *@pageSize
end
--查询第5页内容每页彰显10条数据
exec usp_PageBum 10,5

常用的系统存储过程

系统存储过程

说明

sp_databases

列出服务上的所有数据库

sp_helpdb

报告有关指定数据库或所有数据库的信息

sp_renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的对象的列表

sp_columns

返回某个表列的信息

sp_help

返回某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

列出当前环境中的所有存储过程

sp_password

添加或修改登录账户的密码

 

--存储进程中的参数的主题材料
--存款和储蓄进程如果有参数,则调用的时候必得为参数赋值
exec usp_Add --不传参数则报错

with fillfactor=30

--将游标循环向后运动,直到最后
while @@fetch_status=0
begin
fetch next from cur_Student
end

调用存款和储蓄进度:exec usp_selectstu

--3》第二页
select top 5 * from Student
where id not in (select top 5 * from Student order by id desc)
order by id desc

3.缩减互联网流量

--》》》通过while计算1-100之内有着奇数的和

安顿数趣事话如下

---子查询写法
select
tsname,
tsage,
班级名称=(select tclassname from TblClass where TblClass.tclassid=TblStudent.tsclassid)
from TblStudent

select AVG(writtenExam),A=case      when Avg(writtenExam)>90 then '优'      when Avg(writtenExam)>80 and Avg(writtenExam)<89 then '良'      when Avg(writtenExam)>70 and Avg(writtenExam)<79 THEN '中'      when Avg(writtenExam)>60 and Avg(writtenExam)<69 then '差'      when Avg(writtenExam)<60 then '极差'      end      from stuExam    

--创设删除数据触发器
--无法有主键
create trigger tri_Teacher_after
on Teacher after delete
as
begin
insert into TeacherBak
select * from deleted
end

2.试行命令缓存:在举办存款和储蓄过程,自定函数时,Sql Server必要先二进制编写翻译再运维,编写翻译后的结果也会缓存起来, 再次调用时就不需求再一次编写翻译。

--4》第三页
select top 5 * from Student
where id not in (select top (2*5) * from Student order by id desc)
order by id desc

 alter table Classes

--证明变量并开始化

set @变量名=value

--在视图中不可能使用order by语句。除非:别的还点名了top 或for xml
--错误
create view vw3
as
select * from TblStudent order by tsage desc

总结: set和select的区别  

10.(补充)约束

--三个转型函数:   1.convert -- 语法:  convert(类型,数据)   2.cast   

--张开工作
begin transaction

declare  @name varchar(20)='小强', @age int=23, @result varchar(10)

5.事务

as

笔记不全,还请见谅!希望对您有所提升。

Create proc usp_selectstu

--成立二个存款和储蓄过程计算四个数的和
create procedure usp_Add
@num1 int,
@num2 int
as
begin
print @num1+@num2
end

储存进度的优点:

select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
right outer join TblSore.tsid=ts.tsid

use master
GO
if exists(select * from sysdatabases where name='Wages')
DROP database Wages
CREATE DATABASE Wages
 ON
 (
  NAME='Wages_data',
  FILENAME='e:projectWages_data.mdf',
  SIZE=5mb,
  FILEGROWTH=15%
 )
 LOG ON
 (
  NAME= 'Wages_log',
  FILENAME='e:projectWages_log.ldf',
  SIZE=3mb,
  FILEGROWTH=15%
 )
GO

7.触发器

 1. 查询SQL语句,如: select * from 表名  

8.游标

子查询:查询中再查询,平日是以叁个询问作为基准来供另贰个查询利用
语法:
   select 列表 from 表名 
 where >(子查询)
注意:
 使用相比运算符时,需要子查询只可以回到一条或空的记录!
示例:
 必要获知比自身小的学生消息
 select * from student
 where studentno in
 (select studentno from student
 where studentname='我')

--》》》局地变量
--评释变量
declare @name varchar(10)
declare @age int

  go

select * from
(
select * ,row_number() over( order by id desc) as paixu from Student
) as tbl
where tbl.paixu between 6*5+1 and 7*5

4.怀有卓绝的安全性

--创设贰个自定义的仓库储存进程
create proc usp_HelloWorld
as
begin
print 'hello world'
end

 

--扩充一列(扩充一列EmpAddr varchar(一千))
alter table Class Add EmpAddr varchar(1000)

select @temp=1 --赋值   select @temp   --输出

--使用set与select为变量赋值的分别
declare @rcount int
set @rcount=(select count(*) from TblStudent)
print @rcount

1.模块化程序设计

--为性别扩张一个暗许约束,默以为男
alter table Class add constraint DF_Class_EmpGender default('男') for EmpGender

2.创设带入参数的储存进程

尽量幸免在触发器中实行耗费时间操作,因为触发器会与sql语句感觉在同三个事务中(事务不停止,就无法自由锁)

一:操作变量 --1-- 证明变量@temp值为1并打字与印刷出来 评释变量关键字:

--2》第一页 显示5条数据
select Top 5 * from Student order by id desc

接下来大家上学了变量,变量分全局变量和一部分变量。

--次之个参数如若顾客不传,则有三个暗中同意值
create procedure usp_Add
@num1 int,
@num2 int 一千 --为存款和储蓄进度的参数设置默许值
as
begin
print @num1+@num2
end

commit transaction

--右外联与左外联都是先将相称的多少找到,然后再将那多少个未有相配的多寡增进进去,(注意:不是三头查询出来的,有先后顺序)

declare @id int

--多分支 set @result=case     when @age<12 then '小学生'     when @age<17 then '初中生'     when @age<22 then '高中生'     when @age<28 then '大学生'     else '超人'    end

--4-- 查询李文才的左右同桌的新闻 declare @seat int select @seat=stuSeatfrom stuinfo where stuname='李文才' select * from stuinfo  where stuSeat=@seat-1 or stuSeat=@seat+1

go

 go  

alter table 表名

 

if(@age<18) print '未成人' else if(@age<30)

--3-- select * from StuInfo

Create proc usp_one  @name nvarchar(10)

 

rollback transaction

 

if exists(select name from sysindex where name='索引')

print '青年人'

drop table Classes

查询

   建数据库的SQL语句如下(满含了若是有该数据库先删除在创立数据库)

alter table StudentInfo
add constraint pk_CompanyID foreign key(CompanyID) references WageInfo(CompanyID)
GO

select * from dbo.Student where StudentName like @name

GO

示例

declare @age int set @age=21

--但此时,存款和储蓄进程仍是可以被execute、alter和drop。

常用的系统存储过程

系统存储过程

说明

sp_databases

列出服务上的所有数据库

sp_helpdb

报告有关指定数据库或所有数据库的信息

sp_renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的对象的列表

sp_columns

返回某个表列的信息

sp_help

返回某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

列出当前环境中的所有存储过程

sp_password

添加或修改登录账户的密码

 

赋值格局二:用select 输出形式二:用select --

差距是select可二遍对七个变量赋值,set只好一回对八个变量赋值。

 

调用存款和储蓄进程:

四:多分支语句

create view  视图名

insert into WageInfo(CompanyName, Poste)values
('微软','职员'),
('百度','职员'),
('腾讯','职员'),
('爱奇艺','职员'),
('华为','职员')
insert into StudentInfo(Name, CompanyID, PosteDate, Wage)values
('张三',1,'2016-05-05',2500),
('李四',2,'2016-05-06',2600),
('王五',3,'2016-05-07',3000),
('赵二',4,'2016-05-08',4000),
('钱一',5,'2016-05-09',5000)
insert into StudentInfo(Name, CompanyID, PosteDate, Wage)values('钱二',null,'2016-05-09',NULL)

Create proc usp_stuInfo @gradeid int=2       (默认)

为了创设美好的数据库需满意三大范式。

print '成年人'

出口语句

为何要求仓库储存进程?

go   

Create proc usp_one  @name nvarchar(10)

exec proc_temp_encryption;

select * from StuInfos

Select * from student where gradeId=@gradeid

exec usp_selectGrade '李小龙',@id output 

clsid int foreign key references Classes(clsid) --班级   )

示范:检索出在work表中每四个机关的参天基本工资的职薪俸料  select * from work a where 基本报酬=(select max(基本报酬) from work b where a.部门名称=b.部门名称)

age int check(age>=12 and age<=60), --年龄

--存款和储蓄进度的从头到尾的经过不会被随机看出(尽管解密也有非常的大可能率的)。

--3-- 计算笔试平均分,假如平均分抢先70分打字与印刷'优异' 相同的时间出示前三名学员的侦察信息不然      打字与印刷'相当差'彰显后三名学生音信

1.模块化程序设计

exec sp_helptext 'proc_temp_encryption'

add constraint 约束名 约束类型 具体的自律表达

sex char(2) check(sex='男' or sex='女') default '男', --性别

存款和储蓄进程是在数据库管理种类保留的,预先编写翻译的,能完毕某种意义的SQL程序,它是数据库应用中央银行使相比较宽泛的一种多少对象。

 

缓存正是数据交流的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中搜求供给的多少,如果找到了则直接实行,找不到的话则从内存中找。由于缓存的周转速度比内部存款和储蓄器快得多,故缓存的效劳便是扶持硬件更加快地运作。

--存款和储蓄进度的内容不会被专断看出(即使解密也可能有希望的)。

 1. set三次只好为二个变量赋值,而select能同不经常候为多个变量赋值  

declare   declare @temp int --声明   

as

 

--赋值:来自于表内 select @sex=stuSex,@age=stuAge from stuinfo  where stuName=@name

print '老年人'

1.创立不带参数的寄存进程

declare @count int --用来记录比不上格的总人口 while(1=1) begin --计算比不上格的人数 select @count=COUNT(*) from StuExam   where writtenExam<60 --决断 if(@count=0)   break --退出死循环 else   update StuExam set writtenExam+=2 end select * from StuExam

一 存款和储蓄进程的概念

  设计数据库步骤:须要剖判阶段,概要设计阶段,详细设计阶段,

As

    select * from student;

alter table StuInfos drop constraint fk_StuInfos_Classes

剔除约束   

add constraint df_clsnums_Classes   default 30 for clsnums   

else if(@age<100)

 

打字与印刷张秋丽的音信(来自于student数据库的多寡),格式如下: 姓名:张秋丽 性别:男 年龄:18

print @gradeid

-- 语法:  case(数据 as 类型)

二 系统存储进程

Sql Server系统内部存款和储蓄器管理在并未有配备内部存款和储蓄器最大值,比很多时候我们会意识运转Sql Server的连串内存往往更加多。这是由于她对于内部存款和储蓄器使用的政策是有微微闲置的内部存款和储蓄器就攻陷多少,直到内部存款和储蓄器使用虑达到系统峰值时(预留内部存款和储蓄器遵照系统暗中认可预留使用为准,至少4M),才会去掉一些缓存释放一点点的内部存款和储蓄器为新的缓存腾出空间。

drop index 表名。索引名

 

  1. 多少缓存:推行个查询语句,Sql Server会将有关的数据页(Sql Server操作的数量都以以页为单位的)加载到内部存款和储蓄器中来,下三回假如重新恳请此页的数目标时候,就不必要读取磁盘了,大大提升了进度。

 

3.创制带出参数的蕴藏进度

NOT IN:显著给定的值是或不是与子查询或列表中的值相相配,假设不相同盟则反回真。
运用方法:
 在须求子查询重临多多少时采取。
语法:
 select 列表 from 表名 
 where 列名 not in(子查询)
示例:
 查询未加入过考试的学员消息
 select  * from student 
 where studentno not in
 (select studentno from Result)

Select StudentName,Gender,GradeId,Phone from dbo.Student

全局变量只好用不能够友好创建和赋值!!!

--5-- 查询比张秋丽大10岁以上的学习者音讯 declare @age int  select @age=stuAge from stuinfo where stuName='张秋丽' select * from stuinfo where stuAge>=10+@age 

Create proc usp_selectstu

on 表名(列名)

6,加密存款和储蓄进度

Select @gradeid=gradeid from student where  studentname=@name

3.建表同期建约束,老师表   编号     (主键 标记列)   名称     (非空)

create 索引类型 index 索引名

索引

1.EXISTS 子查询
 EXISTS: exists 关键字能够检查测量试验数据是还是不是留存,假设存在重临真。
语法
 if exists(子查询)
 语句
示例:
 查询本校学生有未有叫张三的
 if exists( select * from student
 where studentname='张三' )
 begin
 print '有叫张三的'
 end

print @gradeid

那几个内部存款和储蓄器一般都以Sql Server运转时候作为缓存的,比方你运转二个select语句, 实行个存款和储蓄进程,调用函数;

2.施行命令缓存:在实践存款和储蓄进程,自定函数时,Sql Server要求先二进制编写翻译再运维,编写翻译后的结果也会缓存起来, 又一次调用时就无需重新编译。

create proc proc_temp_encryption

3.创办带出参数的蕴藏进度

--2-- 显示学号、笔试战绩、等第,数据如下:  笔试战表:90以上的--A等         80以上的-- B等         70之上的-- C等         60上述的-- D等         60以下的-- E等 stuNo   writtenExam   grade s25303  60            D等 s25302  40            E等 s25301  77            C等 s25318  45            E等 select  stuNo, writtenExam, grade=case    when writtenExam>=90 then 'A等'    when writtenExam>=80 then 'B等'    when writtenExam>=70 then 'C等'    when writtenExam>=60 then 'D等'    else 'E等'     end from StuExam --3-- 请依据平均分和上面包车型地铁评分准绳,编写T-SQL语句询问学员的成就 优 :90分以上    良 :80-89分     中 :70-79分     差 :60-69分     极差 :60分以下         

 print @temp       --输出   

--应用这一个,大家得以对一些重大的寄放进度实行加密。

 ( id int primary key identity(1,1), --编号

语法

Select StudentName,Gender,GradeId,Phone from dbo.Student

1.累积进程只在成立即实行编写翻译,今后每回施行存款和储蓄进程都不需再重复编译,而一般SQL语句每推行一遍就编写翻译贰遍,所以使用存储进度可增加数据库推行进程。 2.当对数据库进行复杂操作时,可将此复杂操成效存款和储蓄进度封装起来与数据库提供的事务管理结合一齐使用。 3.存款和储蓄过程能够重复使用,可削减数据库开采人士的专门的工作量。 4.安全性高,可设定唯有某个客户技巧有对点名存款和储蓄进度的使用权

 print @temp         --输出   

开创变量语法如下是

这一个内部存款和储蓄器一般都是Sql Server运维时候作为缓存的,比方你运维三个select语句, 推行个存储进程,调用函数;

create proc usp_selectGrade @name nvarchar(10),@gradeid int output

with encryption

--convert(varchar,@age)

'alter table Classes

3.回退网络流量

--输出 print  '姓名:'+@name+',性别:'+@sex+',年龄:'   +cast(@age as varchar)   

select top 3 * from StuExam order by writtenExam desc end else begin print '本班战表比较糟糕' select top 3 * from StuExam order by writtenExam end

' clsname varchar(3), --班级名称   clsnums int --班级人数   )   

go

--输出 print @name+'是一个'+@result

set @temp=1       --赋值  

As

create proc proc_temp with recompile as     select * from student exec proc_temp

exec sp_helptext 'proc_temp'

 (   clsid int identity(1,1), --班级编号  

 create table Classes  

SQL_SEEscortVE途睿欧 提供系统存款和储蓄进度,它们是一组预编写翻译的T-SQL语句,系统存款和储蓄进度提供了管制数据库和更新表的编写制定,并出任从系统表中检索音讯的快速格局。

4.具备能够的安全性

--3-- 不停的巩固学员笔试成绩2分,让全部学生的笔试成绩都过关

with encryption

declare @变量名 数据类型

1.创制不带参数的蕴藏进程

  4、 带通配符参数存款和储蓄进度

select * from dbo.Student where StudentName like @name

add constraint pk_clsid_Classes   primary key(clsid)  

   5、 不缓存存款和储蓄进程

go

仓库储存进度是在数据库管理系列保留的,预先编写翻译的,能实现某种意义的SQL程序,它是数据库应用中行使比较宽泛的一种多少对象。

--2-- 计算1-100的增加和,结果格式:1-100的丰盛和为:xxx declare  @i int=1, @sum int=0 while(@i<=100) begin set @sum+=@i set @i+=1 end print '1-100的拉长和为:'+convert(varchar,@sum)

Create proc usp_stuInfo @gradeid int=2       (默认)

add constraint ck_clsname_Classes   check(len(clsname)=3)  

 

 alter table Classes

add constraint fk_StuInfos_Classes    foreign key(clsid) references Classes(clsid)   

调用存储进程:

  1. 数据缓存:实践个查询语句,Sql Server会将相关的数据页(Sql Server操作的多少都是以页为单位的)加载到内部存款和储蓄器中来,下一次纵然重新呼吁此页的多寡的时候,就无需读取磁盘了,大大提升了进程。

SQL_SE奇骏VE奥迪Q7 提供系统存款和储蓄进程,它们是一组预编写翻译的T-SQL语句,系统存款和储蓄进度提供了管制数据库和更新表的编写制定,并担任从系统表中检索新闻的火速格局。

begin transaction

declare @name varchar(10),         @sex char(2),         @age int

2.施行进程块,功用高

go  

select @变量名=value

 

  对于SQL SEHighlanderFVEENCORE数据库也学了有说话了,自身也对团结所学做了一些计算。

二 系统存款和储蓄进程

创立视图索引

 create table TeaInfos  

 3. 输出操作,   如: select 变量名 二:调控流程结构:if,else

As

--输出 print '姓名:'+@name print '性别:'+@sex print '年龄:'+cast(@age as varchar)

drop view 视图名

alter table StuInfos with nocheck --不对表现成个别数据作限制操作

exec usp_one '李%'

2.创办带入参数的蕴藏进程

    select * from student;

as

2.外键约束   为学生表加多四个clsid列来表示其班级   alter table StuInfos add clsid int   外键约束   

一对变量有三种赋值方法

create proc proc_temp with recompile as     select * from student exec proc_temp

 事物视图索引

--赋值 select @name='杰达姆',@sex='男',@age=18

select * from StuInfo select * from StuExam

 

调用存款和储蓄进程:exec usp_stuInfo 2

as

SQL语句

下边是创办约束

--但此时,存款和储蓄进度还是可以够被execute、alter和drop。

USE Wages
GO
if exists(select * from sysobjects where name='WageInfo')
DROP table WageInfo
CREATE TABLE WageInfo 
(
  CompanyID INT primary key IDENTITY(1,1),
  CompanyName varchar(50) NOT NULL,
  Poste varchar(50) NOT NULL,
)
GO
if exists(select * from sysobjects where name='StudentInfo')
DROP table StudentInfo
CREATE TABLE StudentInfo
(
  ID  INT primary key IDENTITY(1,1),
  Name  VARCHAR(50) NOT NULL,
  CompanyID INT ,
  PosteDate  DATETIME ,
  Wage  int,
)
GO

6,加密存款和储蓄进度

三 客商自定义的囤积进程

--声明 declare  @name varchar(10)='张秋丽', @sex char(2), @age int

(注意:加密囤积进程前应当备份原始存款和储蓄进度,且加密应该在布局到生育情状前变成。) 

赋值格局一:用set 输出形式一:用print   declare @temp int --申明   

编辑:江苏十一选五手机版数据库 本文来源:SERVER数据库学习总结,数据库基础笔记分享

关键词:

  • 上一篇:没有了
  • 下一篇:没有了