Sql加密函数,数据库基础笔记分享

转自:http://www.maomao365.com/?p=4732

前言

有表tb, 如下:
id value

一、mssql sql hashbytes
函数简介

本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作约束,视图,存储过程,触发器的基本了解。


hashbytes函数功能为:返回一个字符,
通过 MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512方式加密后的返回值

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

1 aa,bb
2 aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value

hashbytes(‘参数1’,’参数2’)

正文


参数1:
输入加密类型 例:MD5
参数2:
输入待加密的字符串(加密字符串最大值为 8000字节)
返回值:
返回值最大为8000字节
注意事项:
当输入加密类型,异常时,返回NULL

1.子查询

1 aa
1 bb
2 aaa
2 bbb
2 ccc

二、mssql sql hashbytes
举例应用

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

–方法1.使用xml完成
SELECT A.id, B.value FROM
(
SELECT id, [value] = CONVERT(xml,'<root><v>’ +
REPLACE([value], ‘,’, ‘</v><v>’) +
‘</v></root>’) FROM tb
) A OUTER APPLY
(
SELECT value = N.v.value(‘.’, ‘varchar(100)’) FROM
A.[value].nodes(‘/root/v’) N(v)
) B

例1:

–把另外一个查询的结果作为当前查询的条件来使用。
–子查询中=、!= 、< 、> 、<=
、>=之后只能返回单个值,如果多个值就会报错
–解决办法 可以用in 代替
select * from Student
where tbage in(select tbage from Student where tbname=3)

–方法2.使用CTE完成
;with tt as
(select id,[value]=cast(left([value],charindex(‘,’,[value]+’,’)-1)
as
nvarchar(100)),Split=cast(stuff([value]+’,’,1,charindex(‘,’,[value]+’,’),”)
as nvarchar(100)) from tb
union all
select id,[value]=cast(left(Split,charindex(‘,’,Split)-1) as
nvarchar(100)),Split= cast(stuff(Split,1,charindex(‘,’,Split),”) as
nvarchar(100)) from tt where split>”
)
select id,[value] from tt order by id option (MAXRECURSION 0)

   DECLARE @info nvarchar(4000);  
SET @info = CONVERT(nvarchar(4000),'www.maomao365.com');  
SELECT HASHBYTES('SHA1', @info);   ---返回采用SHA1加密
SELECT HASHBYTES('MD5', @info);    ---返回采用MD5加密
SELECT HASHBYTES('MD2', @info);    ---返回采用MD2加密

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

DROP TABLE tb

例2:

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

 

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

     create table A(info1 varchar(30))

insert into A (info1)values('www.maomao365.com')
insert into A (info1)values('猫猫小屋')
insert into A (info1)values('mssql教程专用')
insert into A (info1)values('mssql函数用法简介') 

select HASHBYTES('Md5',info1) as [md5加密], 
HASHBYTES('SHA1',info1) as [SHA1加密],
info1 from A 

truncate table A
drop table A 

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

 

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

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

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

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

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

2.连表查询

–查询所有学生的姓名、年龄及所在班级 (班级在另一个表中)
–当多个列在不同的表中时,要跨表查询,所以一般可以使用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(只查询两个表中都有的数据)

–》》》full join 是查询所有的数据(没有的为空)

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

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

 

–》》》左外联接(左联接)

–查询没有参加考试的学生的姓名与编号
–把左表(left join
关键字左边的表)中的全部记录都显示出来,对于那些在右表中能找到匹配的记录,显示对应匹配数据,对于那些右表中找不到匹配的记录显示为null
select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
left outer join TblSore.tsid=ts.tsid   –outer可以不写

–》》》右外联接
–表示要将右表(right join
右边的表)中的所有数据都显示,左表中只显示那些匹配的数据。

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

–右外联与左外联都是先将匹配的数据找到,然后再将那些没有匹配的数据添加进来,(注意:不是一起查询出来的,有先后顺序)

–》》》练习:查询所有学生(参加和未参加的考试)的学生姓名、年龄、成绩,如果没有参加考试显示缺考,如果小于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

3.视图

视图本身并不存储数据,只是存储的查询语句,如果把真实表中的数据修改后,则通过视图查询到的结果也变了。

视图的目的是方便查询,所以一般情况下不能对视图进行增删改查

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图