金沙国际唯一官网网址SQLSEXC60VEGL450–一条SQL语句

内容主要是对数据库的基本,的基本了解,包含字段表达式,from 表或结果集,为了创建良好的数据库需满足三大范式,  设计数据库步骤,SQL高级中的case语句、连接操作、子查询、派生表,要求把DelFlag=0的显示成未删除

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

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 壹 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 ‘英语’

declare @avgScore int select @avgScore=AVG(writtenExam) from StuExam
if(@avgScore>=70) begin print ‘本班成绩特出’

三.SQL决定语句

–二.一 对游标的操作
–将每条数据读取并出口

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

壹:非相关子查询是独自于外部查询的子查询,子查询总共执行三回,执行完结后将值传递给外部查询。
 二:相关子查询的履行注重于表面查询的数额,外部查询执行1行,子查询就推行三回。数据是或不是留存,假如不存在重返真

一致性:1旦事情完成,不管在文件中、数据文件中、内存中的全部数据都是均等的

大局暂且表:表名以##为开始。四个会话可共享全局一时表。当成立全局暂时表的对话断开,并且未有用户正在访问全局一时半刻表时删除

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

select @变量名=value

set @sum=0;

–查询全数学员的全名、年龄及所在班级 (班级在另二个表中)
–当两个列在差异的表中时,要跨表查询,所以1般能够应用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(只询问七个表中都局地数据)

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.充值金额>=十0 and T.充值金额<500 then T.充值金额
end) as ‘海豚用户’
,sum(case when T.充值金额>=10 and T.充值金额<十0 then T.充值金额
end) as ‘小鱼用户’
from
(
select [ChannelUserKey] as
用户ID,sum(convert(float,[RechargeAmount])/拾0) 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前边的数据源
— 一、派生表 再次回到结果集的子查询
— 语法: select … from (select 查询) as 别名;
— 注意: 无法选用游标
— 二、公用表表明式CTE
— 3、视图
— 四、内联表值函数

— 查询学生音讯
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 = ‘玉溪语儿’;


–存款和储蓄进度的始末不会被随便看出(纵然解密也是有希望的)。

学号

–第九页数据 每页5条数据
–over属于开窗函数

— 事务

— 最大旨的操作以工作为单位
— 将一个业已成功的数据库操作行为规定为3个事务
— 特点:
— 原子性——执行的结果是0一特征(要么落成、要么失利)
— 持久性——执行的结果不可逆转
— 1致性——壹旦形成业务,各样版本的结果都相同
— 隔开分离性——事务与工作之间不抵触

— 事务严酷定义:
找三个操作,假如知足原子性、持久性、一致性和隔断性就称为二个作业

select * from Exe2.LoginTbl;

insert into Exe2.LoginTbl(uid, pwd)
values
(‘苏坤’, ‘susu123’)
, (‘尼古Laszlo夫斯基斯巴达司机四司机司机司机司机’, ‘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;
;

 

— 存款和储蓄进程
— 容易的当作数据库中的方法
— 函数、视图、存款和储蓄进程

— 就是1段实施代码

drop view 视图名

未提交读、已提交读、可重新读、种类化读、快速照相

–在视图中的查询语句,必须为每1列成立二个列名
create view vw2
as
select
tsname,
case
when tsage>13 and tsage<=16 then ‘少年’
when tsage>50 then ‘老年’
else ‘青壮年’
end as 称呼
from TblStudent

— 子查询
— 便是在2个查询中嵌套三个询问
— 一般意义就是运用多张表查询3个音讯
— 例如查询”衢州语儿”的成就
select * from TestDataBase..Student;
select * from TestDataBase..Score;
— 在学生表中查得stuId,然后再到分数表中询问分数
select stuId from TestDataBase..Student where stuName =’周口语儿’;

Create proc usp_one  @name nvarchar(10)

, stuPhone

–查询学生姓名、年龄、班级及成绩(战表属于第三张表)
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

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

exec usp_selectGrade ‘李小龙’,@id output 

commit

–》》》full join 是查询全部的多少(未有的为空)

— 银行转载的案例

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;

— 注意,不要将变量名命名称为与储存进度的参数1致
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 皮秒。

(贰 行受影响)
表 ‘newStudent’。扫描计数 壹,逻辑读取 226四 次,物理读取 0 次,预读 0
次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:

缓存正是数据沟通的缓冲区(称作Cache),当某1硬件要读取数据时,会率先从缓存中找寻须求的数据,假诺找到了则直接执行,找不到的话则从内部存款和储蓄器中找。由于缓存的周转速度比内部存款和储蓄器快得多,故缓存的效益正是帮忙硬件更加快地运行。

 

–用一条语句为表增加多个约束
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

— 系统中常用的积存进度 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=’my叁thDataBase’, @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 ‘今每1日气很好’;
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

print ‘老年人’

end

–扩充外键约束,表Class中有1列EmpDeptId引用Student表中的DeptId
alter table Class add EmpDeptId int not null
alter table Student add constraint PK_Student_DeptId primary
key(DeptId)

CPU 时间 = 1六 飞秒,占用时间 = 3壹 皮秒。

SQL Server 分析和编写翻译时间:
CPU 时间 = 0 飞秒,占用时间 = 0 纳秒。
SQL Server 分析和编写翻译时间:
CPU 时间 = 0 纳秒,占用时间 = 0 微秒。
SQL Server 分析和编写翻译时间:
CPU 时间 = 0 纳秒,占用时间 = 0 飞秒。

(二 行受影响)
表 ‘newStudent’。扫描计数 一,逻辑读取 伍 次,物理读取 0 次,预读 0
次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
CPU 时间 = 壹5 微秒,占用时间 = 2四 阿秒。
*/

— 索引不肯定好

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

declare @age int set @age=21

begin transaction

有个别最近表:表名以#为发端。只在时下对话中央银卓有成效,不能够跨连接待上访问。假诺平素在两次三番会话中开创,则当前线总指挥部是断开后去除,假设是在蕴藏进度中开创的,则存款和储蓄进程进行完成后去除

— 分页

select * from TestDataBase..Student;
— 当前页数、每页展现的条数 十
— 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 ;


— 在要求频仍的操作一些表表达式的时候
— 视图和内联表值函数

— 视图
— 就是将查询的讲话封装成2个对象,每一趟查询的时候平素操作那么些指标即可
— 虚拟表
— 使用派生表
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;

— 内联表值函数
— 带有参数的视图
— 效率: 将3个可变条件的询问封装成三个函数对象,执行结果是一张表
/*
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 近来1遍执行SQL语句的错误码
select @@ERROR;
— @@version
select @@version
print @@version;

— @@identity 近年来1次插入数据的自行增加编号
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

 

 

 


  设计数据库步骤:需要分析阶段,概要设计阶段,详细设计阶段,

end as 删除状态

–输出值
exec usp_Add 100,230

  go  

, stuStudydate

–插入数据
insert into Teacher values(‘网名好’,’12352536′,’Wjifdfji@qq.com’)

2.创设带入参数的囤积进程

事情:2个完完全全,要么全体实践成功,要么全体实践破产

九.(补充)全局权且表,局地权且表

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

 

尽量制止在触发器中履行耗费时间操作,因为触发器会与sql语句认为在同1个事情中(事务不了事,就不或者自由锁)

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

as

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

print @gradeid

else 值

视图本人并不存款和储蓄数据,只是存款和储蓄的查询语句,倘诺把真实表中的多寡修改后,则经过视图查询到的结果也变了。

else if(@age<100)

update bank set balance=balance + @money where cid=@to

1.子查询

As

stuId

–》》》通过while总计一-100中间有着奇数的和

exec sp_helptext ‘proc_temp_encryption’

while @i <= 100

–》》》练习:查询全体学员(参预和未到庭的试验)的上学的小孩子姓名、年龄、成绩,假诺未有参预考试展现缺考,借使小于english或许math
小于57分展现不如格
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

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

->set @参数名=值

–二.1.1将游标向后运动一条
fetch next from cur_Student

(注意:加密囤积进程前应当备份原始存款和储蓄进程,且加密应该在安插到生育环境前达成。) 

— 接纳结构

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

1.EXISTS 子查询
 EXISTS: exists 关键字能够检查评定数据是还是不是存在,倘使存在重返真。
语法
 if exists(子查询)
 语句
示例:
 查询本校学生有未有叫张三的
 if exists( select * from student
 where studentname=’张三’ )
 begin
 print ‘有叫张3的’
 end

, stuEmail

–壹.概念游标
declare cur_Student cursor fast_forward for select * from Student

那些内部存储器1般都以Sql Server运维时候作为缓存的,例如你运维七个select语句,
执行个存款和储蓄进程,调用函数;

update bank set balance=balance – 900 where cid=’0002′

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

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    

(

–为EmpName增添七个唯1约束
alter table Class add constraint UQ_Class_EmpName unique(EmpName)

叁 用户自定义的存款和储蓄进程

return

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

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

end

正文

 

row_number() over(order by stuid) as num

–扩充1列(扩张一列EmpAddr varchar(壹仟))
alter table Class Add EmpAddr varchar(1000)

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

create proc usp_test2

–创制四个自定义的囤积进度
create proc usp_HelloWorld
as
begin
print ‘hello world’
end

二.外键约束   为学生表添加1个clsid列来表示其班级   alter table StuInfos
add clsid int   外键约束   

when DelFlag=0 then N’未删除’

7.触发器

–三– 计算笔试平均分,借使平均分超过617分打字与印刷’优秀’
同时显示前3名学员的考试消息不然      打字与印刷’较差’显示后3名学员消息

 

陆.囤积进程

set @变量名=value

思想政治工作内容

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

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

select * from fn_FenYe(@pageCount, @pageIndex);

–创造删除数据触发器
–不能够有主键
create trigger tri_Teacher_after
on Teacher after delete
as
begin
insert into TeacherBak
select * from deleted
end

exec usp_one ‘李%’

select top 30

–贰.开拓游标
open cur_Student

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

inner join

–次之个参数借使用户不传,则有三个暗许值
create procedure usp_Add
@num1 int,
@num二 int 1000 –为存款和储蓄进度的参数设置暗中认可值
as
begin
print @num1+@num2
end

创办视图索引

 

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

go

单值(三个单元格)   
标量子查询(日常放在where子句中作为条件,或然在select中作为一个值)

–创立分页存款和储蓄进程
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
–查询第六页内容每页显示十条数据
exec usp_PageBum 10,5

as

select CreateDate,ISNULL(CreateDate,getdate()) from UserInfo

前言

–四– 难点: 依照如下规则对机试战表进行反复加分,     
 直到机试平均分当先八四分成止       请编写T-SQL语句达成,注:(循环+多分支)
88分以上:  不加分 80-8十八分:   加一分 70-七十八分:   加贰分 60-陆拾九分:   加叁分
陆二十多分以下:  加四分 declare @a int   while(一=一) begin select
@a=AVG(labExam)from dbo.stuExam if(@a<8伍) begin update dbo.stuExam
set labExam =case          when labExam>=90 then  labExam        
 when labExam>=80 then labExam+一          when labExam>=70 then
labExam+二          when labExam>=60 then labExam+三          else     
    labExam+5         end end else break end select AVG(labExam) AS
机试战表平均分 from dbo.stuExam

多值    多值子查询

–右外联与左外联都以先将相称的数码找到,然后再将那贰个从没相配的数额拉长进去,(注意:不是一块查询出来的,有先后顺序)

陆,加密存款和储蓄进度

 

–存款和储蓄进程中的参数的标题
–存储进程即便有参数,则调用的时候必须为参数赋值
exec usp_Add –不传参数则报错

SQL_SE奥迪Q5VE宝马7系 提供系统存款和储蓄进程,它们是壹组预编写翻译的T-SQL语句,系统存款和储蓄过程提供了管制数据库和更新表的机制,并充当从系统表中检索消息的急迅情势。

begin try

4.扬言变量与应用

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

declare @sum int;

二.连表查询

壹.存款和储蓄进程只在创马上进行编写翻译,现在每一趟执行存款和储蓄进度都不需再重复编写翻译,而貌似SQL语句每执行1次就编写翻译一回,所以接纳存款和储蓄进度可增加数据库执行进度。
二.当对数据库举行理并答复杂操作时,可将此复杂操效用存款和储蓄进程封装起来与数据库提供的事务处理结合一起使用。
三.存款和储蓄进度能够重复使用,可削减数据库开发职员的工作量。 4.安全性高,可设定唯有少数用户才有所对点名存款和储蓄过程的使用权

, stuInputtime

 

use MySchool

 

8.游标

1.创制不带参数的积存进度

意思:将一个实施的经过(大概会很复杂)封装成3个名字,然后采取那个名字就能够执行那么些进程

–删除数据
–sql
server中的触发器是表级触发器,无论删除多少行如故插入多少行,只触发贰遍
–是按语句来触发的,每一次执行1次讲话,触发3遍触发器
delete from Teacher where tcid>18

–应用那几个,大家能够对少数首要的储存进程进展加密。

表    一般作为数据源进行再一次搜索

工作有两性情子:原子性 1致性 隔断性 持久性
原子性:对于数据修改,要么全都执行,要么全都不实行
1致性:当数码形成时,数据必须处于同1状态
隔绝性:对数码进行修改的装有并发事务时相互隔开分离的。那评释工作必须是独自的,它不应以别的方法依赖于或影响其它作业
永久性:事务完结后,他对数据库的改动被永久保持,事务日志能够保证工作的永久性

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

end catch

–账户A给账户B转账 当1方出标题时,八个语句都不履行
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

go   

if @i % 2 = 0

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

仓储进度的亮点:

, classId

–创造插入数据触发器
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

GO

, stuPhone

–》》》局地变量
–表明变量
declare @name varchar(10)
declare @age int

 

->定义变量:

视图的指标是惠及查询,所以一般意况下无法对视图举行增加和删除改查

with encryption

t3.final desc;

–》》》全局变量
print @@language
print @@version
print ‘aaa’+100
–通过判断@@error变量中是不是不为0,就能够判明上一条sql语句执行是还是不是出错了
–要是@@error为0,表示上一条sql语句执行没出错,假如@@error不为0,则代表上一条sql语句出错了。
print@@error

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

update bank set balance=balance + @money where cid=@to

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

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

 

后记

exec proc_temp_encryption;

end

–打开工作
begin transaction

Create proc usp_one  @name nvarchar(10)

if(@myError = 0)

–4.释放能源
deallocate cur_Student

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

, case t1.stuSex when ‘m’ then ‘男’ else ‘女’ end as 性别

–把其余3个查询的结果作为当前询问的标准化来利用。
–子查询中=、!= 、< 、> 、<=
、>=之后只好回去单个值,固然多个值就会报错
–化解办法 能够用in 代替
select * from Student
where tbage in(select tbage from Student where tbname=3)

As

 

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

剔除约束   

create proc usp_test4

–删除壹列(EmpAddress列)
alter table Class drop column EmpAddress

go

End

–创制贰个存款和储蓄进程计算五个数的和
create procedure usp_Add
@num1 int,
@num2 int
as
begin
print @num1+@num2
end

exec proc_temp_encryption;

->在SQL Server中的Try-catch

 

4.全部优异的安全性

update bank set balance=balance – @money where cid=@from

–一条语句删除八个约束,约束名用 逗号 隔离
alter table Class drop constraint
PK_Student_DeptId,
FK_Class_Student,
CK_Class_EmpAge

 

两张近日表

–把3个询问结果作为别的三个查询的查询源
select * from (select * from Student where tbage between 3 and 5)
as ct where tbname=伍 –ct是新创的表名

 alter table Classes

1.Case的用法

10.(补充)约束

  对于SQL SELacrosseFVEEscort数据库也学了有说话了,自身也对团结所学做了有个别计算。

begin

–三.关闭游标
close cur_Student

六,加密存款和储蓄进度

select — 紧跟查询

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

1.模块化程序设计

go

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

alter table StudentInfo
add constraint pk_金沙国际唯一官网网址,CompanyID foreign key(CompanyID) references
WageInfo(CompanyID)
GO

共享锁(读)、排他锁(增删改)

–删除三个仓库储存进度
drop proc usp_Add

为什么要求仓库储存进度?

begin

–提交事务
commit transaction

 alter table Classes

->分页(重要)

–查询未有加入考试的学生的姓名与号码
–把左表(left join
关键字左侧的表)中的全部笔录都显得出来,对于这个在右表中能找到相称的记录,展现对应合营数据,对于那3个右表中找不到极度的笔录彰显为null
select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
left outer join TblSore.tsid=ts.tsid   –outer能够不写

sex char(2) check(sex=’男’ or sex=’女’) default ‘男’, –性别

end

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

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

end try

–输出存储进度
exec usp_HelloWorld

alter table StuInfos drop constraint fk_StuInfos_Classes

, stuSex

–回滚事务
rollback transaction

declare @id int

set @i = 0;

–为年龄扩张2个检查约束,年龄必须在壹—120岁之间(包括)
alter table Class add constraint CK_Class_EmpAge check(EmpAge>=0
and EmpAge<=120)

  go

with t

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

as

*/

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

create 索引类型 index 索引名

else

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

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

begin

–》》》左外联接(中国左翼诗人联盟接)

赋值格局①:用set 输出方式1:用print   declare @temp int –表明   

DataSet的始末介绍,三种单例方式(并发量的设想),SQL高级中的case语句、连接操作、子查询、派生表

3.视图

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

->补充约束

–证明变量并伊始化

常用的系统存储过程

系统存储过程

说明

sp_databases

列出服务上的所有数据库

sp_helpdb

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

sp_renamedb

更改数据库的名称

sp_tables

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

sp_columns

返回某个表列的信息

sp_help

返回某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

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

sp_password

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

 

 

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

select * from dbo.Student where StudentName like @name

exec sp_help;

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

为了成立优质的数据库需满意3大范式。

go

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

–输出 print @name+’是一个’+@result

end as 删除状态

–输出值
print @name
print @age

性别     (男或女,暗中同意男)   年龄     (12-60)   电话     (唯1)   班级编号
(外键)   

 

–》》》右外对接
–代表要将右表(right join
右侧的表)中的全部数据都来得,左表中只呈现那个相配的数额。

    select * from student;

declare @myError int;

5.事务

As

select @@VERSION

–为性别增添2个默许约束,暗中同意为男
alter table Class add constraint DF_Class_EmpGender default(‘男’) for
EmpGender

 go  

vw_FenYeable.num

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

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

最近来讲,用触发器的机会还不多

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

3.减弱网络流量

set @myError += (select @@ERROR);

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

 print @temp         –输出   

SQL语句

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

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

->公用表表明式(CTE)

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

select * from StuInfos

, sum(case when 课程=’语文’ then 成绩 else 0 end) as ‘语文’

–赋值
set @name=’yhz’
set @age=17

drop table TeaInfos  

create trigger tr_类型_触发器的名字 on 表名

with encryption

 

  declare @temp int=壹 –表明的同时赋值  

while 表达式

一.班级表   班级编号 (主键)   班级名   (长度固定三位)   班级人数 (私下认可30)

->执行

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

begin

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

go

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

->执行

1对变量有二种赋值方法

, t2.className as 课程

 

假设不几次三番,那么能够设想加3个列,让其总是

二– 表明七个变量存储’姓名、性别、年龄’,再打字与印刷音讯,格式如下:
姓名:杰达姆,性别:男,年龄:18 –证明

使用形式1:(类似C#中的case的用法)

   建数据库的SQL语句如下(包括了一旦有该数据库先删除在建立数据库)

->内连接

create proc proc_temp_encryption

 

go

 

二 系统存款和储蓄进程

set @isSuccess = 1;

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

else N’未知’

–五– 查询比张秋丽大柒岁以上的学员消息 declare @age int  select
@age=stuAge from stuinfo where stuName=’张秋丽’ select * from stuinfo
where stuAge>=10+@age 

语句

 create table TeaInfos  

 

(注意:加密仓库储存进度前应该备份原始存款和储蓄进度,且加密应该在配备到生育环境前成功。) 

begin

print @gradeid

between (@pageIndex – 1) * @pageCount + 1 and @pageCount * @pageIndex;

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

 

索引

from

commit transaction

set @myError += (select @@ERROR);

为何须要仓库储存进程?

->暗中认可参数的储存进程

调用存款和储蓄过程:

begin

rollback transaction

create proc usp_FenYe1

–应用这些,大家得以对一些首要的仓库储存进程举行加密。

— 逻辑处理与流程序控制制

go  

据此无论是大公司依旧小店铺都会用存款和储蓄进程,不过也有的公司会须求整个用C#的逻辑来写

drop table Classes

10.触发器

create proc proc_temp_encryption

go

  4、 带通配符参数存储进程

 

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

, stuAddress

–两个转型函数:   壹.convert — 语法:  convert(类型,数据)   二.cast   

是三个非常的储存进程,如果用C#来比喻的话本质如故情势

 

when 值1 then 返回值

NOT IN:鲜明给定的值是或不是与子查询或列表中的值相匹配,如若分歧盟则反回真。
使用格局:
 在须求子查询重回多多少时选取。
语法:
 select 列表 from 表名 
 where 列名 not in(子查询)
示例:
 查询未到场过考试的学员音讯
 select  * from student 
 where studentno not in
 (select studentno from Result)

表表明式的意趣是表参加运算得到的结果依旧表,常用的表表明式:

declare @id int

->SQL中的变量

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

commit

Sql
Server系统内部存储器管理在尚未配备内部存款和储蓄器最大值,很多时候大家会意识运维Sql
Server的种类内部存款和储蓄器往往高居不下。那是出于她对于内部存款和储蓄器使用的政策是有稍许闲置的内部存款和储蓄器就占用多少,直到内部存款和储蓄器使用虑达到系统峰值时(预留内部存款和储蓄器根据系统默许预留使用为准,至少四M),才会去掉一些缓存释放少量的内部存款和储蓄器为新的缓存腾出空间。

->系统存储进程

全局变量只好用无法和谐创办和赋值!!!

end

declare @变量名 数据类型

, stuBirthdate

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

 

with fillfactor=30

, stuAddress

  1. 多少缓存:执行个查询语句,Sql Server会将有关的数据页(Sql
    Server操作的数码都以以页为单位的)加载到内部存储器中来,下一遍借使重复恳请此页的多少的时候,就无需读取磁盘了,大大升高了速度。

 

alter table StuInfos with nocheck –不对表现壹些数据作限制操作

 

–convert(varchar,@age)

, @to as char(4)

SQL语句

, stuBirthdate

alter table 表名

else