sql server基础知识
2019-09-29 本文已影响0人
Jure_joe
**Sql server****数据库知识**
1、 主键自增identity
create table user
(
id int,identity(1,1) primary key,
…
)
2、 分组中的compute by
Select * from table_name order by age compute max(salary) ,min(salary),sum(salary), avg(salary) by age;
3、 exists字段使用
select * from clerk_table where exists(select * from clerk_table where school =’‘黑龙江’)
4、 all 和 any字段的使用
select * from clerk_table salary > any (select salary fom clerk_table where school =
‘哈工大’)
要求工资大于后边所有条件的条件
select * from clerk_table salary > all (select salary fom clerk_table where school =
‘哈工大’)
5、 top查询
查询前几条记录
select top 3 * from clerk_table
查询前百分之十
select top 20 percent * from clerk_table
6、 into关键字使用
如果表不存在会自动进行创建,将另外一张表查询到的记录放入该表中
Select * into new_table from clerk_table where salary > 1000
7、 union interset关键字使用
集合并和集合交运算,第一个为两个表一起显示,第二个为两个表分开显示
select * from clerk_table union select * from new_table
select * from clerk_table interest select * from new_table
8、 等值链接
select * from A,B where A.x = B.x and A.age=18
9、 内链接
select * from A inner join B on A.x=B.x where A.age=18
10、外连接 左表或右表全数据,另一张表中的数据在新查询结果的表中如果没有数据会显示空值
select * from A left/right join B on A.x=B.x where A.age=18
11、全连接
select * from A full join B on A.x=B.x where A.age=18
12、查看索引
exec help_index clerk_table
13、创建索引,以工资字段进行创建,并使用倒序
create index new_index clerk_table(salary desc)
14、更改索引名称
exec sp_rename ‘clerk_table.new_index’,’new_index2’,’index’
15、删除索引
drop index clerk_table.new_index2
16、创建视图,视图本身就是依赖sql语句存在的,使用视图安全性较好,使一些没有权限的用户无法看到完整的表信息,但是性能不好,毕竟使用后,底层还是将其拆分为最底层的sql语句
create view view_name as select * from clerk_table where salary>2800
17、修改视图
alter view view_name as select * from clerk_table where salary <1220
18、查询视图
select * from view_name
19、删除视图
drop viw_name
**T-SQL****语法**
1、 变量的声明(declare)、变量的赋值(set 或者 select),set只能为当一变量的赋值,select可以为多个变量赋值,中间用逗点隔开即可
declare @test_var int
set @test_var = 1000
select @test_var=3000
2、 输出(print 或 select)print输出一个,select可输出多个
print @test_var
select @test_var ,@test_var2
3、 全局变量以两个@开头
4、 注释:
/*
这是多行注释
*/
--这是单行注释
declare @test_var INT ,@test_var2 varchar(60)
select @test_var = 1000,@test_var2='jure_joe'
select @test_var,@test_var2
5、 begin…end程序块,类似于java中的代码块
--这是一个begin....end程序块
BEGIN
declare @test_var int , @test_var2 varchar(60),@test_var3 varchar(60)
select @test_var=2000,@test_var2='你这头猪',@test_var3='妞妞'
IF @test_var!=2000
print @test_var2
ELSE
print @test_var3
END
6、 case语句
BEGIN
declare @test_var int , @test_var2 varchar(60)
set @test_var=100
set @test_var2 =
CASE
when @test_var>=90 and @test_var<=100 then '优秀'
when @test_var<90 and @test_var>=80 then '良好'
when @test_var<80 and @test_var>=60 then '及格'
else
'不及格'
END
select '学员成绩:'+ @test_var2
END
7、 while语句 break语句、continue语句
declare @sum int,@test_var int
select @test_var=0,@sum=0
while @test_var<=100
begin
set @sum=@sum+@test_var
set @test_var=@test_var+1
end
select '求得的和为:',@sum
8、 goto语句
declare @sum int,@test_var int
select @test_var=0,@sum=0
--自定义标签,指定跳转的地点
test_target:
set @sum = @sum + @test_var
set @test_var = @test_var+1
while @test_var<=100 goto test_target
select '求得的和为:',@sum
9、 算术函数:SIN()函数、cos()、tan()…
declare @test_var int,@test_var2 int
set @test_var =100
--算术平方根
set @test_var2 = SQRT(@test_var)
print @test_var2
——ROUND函数
declare @test_var float,@test_var2 float
set @test_var =75.16431
--保留为两位小数
set @test_var2 = round(@test_var,2)
print @test_var2
10、字符串的操作函数left()、right()、substring()、reverse()、replace()、upper()、lower()….
11、函数创建
create function test_function (@test_var int) returns int
as
begin
declare @sum int
set @sum = @test_var*8
return @sum
end
12、函数的调用print 或 select
print dbo.test_function(20)
select dbo.test_function(190)
13、使用循环语句调用函数
declare @test_var int
set @test_var=0
while @test_var<=20
begin
print dbo.test_function(@test_var)
set @test_var = @test_var+1
end
14、函数修改
alter function test_function (@test_var int) returns int
as
begin
declare @sum int
set @sum = @test_var*979
return @sum
end
15、存储过程:在本地编写t-sql会大量占用带宽,但是在服务器这边做好存储过程后,会减少t-sql的使用,一次性完成,减少不必要的带宽,避免频繁修改应用程序,若想改,修改存储过程即可;
(1)、系统存储过程
a、sp_attach_db:附加数据库
b、sp_detach_db:分离数据库,并没有把数据库删除
c、sp_rename:给对象改名
Exec sp_rename 就数据库名 新数据库名
d、sp_help:显示数据库相关数据
e、sp_changedbowner:改变数据库所有者
Exec sp_changedbowner ‘所有者’
f、sp_password:改密码
Exec sp_password 旧密码 新密码 登录名
16、存储过程的创建
create proc new_proc @test_param varchar(60),@test_param2 varchar(59)
as
begin
print '第一个参数:'+@test_param
print '第二个参数:'+@test_param2
end
17、存储过程的调用
exec dbo.new_proc '大家好','不想活了'
18、存储过程中输出参数output的使用,相当于返回值
(1)、创建
create procedure [dbo].[ner_proc2] @test_var int,@test_var2 int,@test_var3 int output
as
begin
set @test_var3 = @test_var +@test_var2
end
(2)、调用
declare @test_var int
set @test_var = 60
print @test_var
execute dbo.ner_proc2 600,900,@test_var output
print @test_var
19、存储过程中增、删、改、查的使用
(1)、查询
create procedure pro_select @test_var varchar(40)
as
begin
select * from dbo.student where name = @test_var
end
(2)、查询调用
declare @test_var varchar(40)
set @test_var = '杨添佑'
execute dbo.pro_select @test_var
20、存储过程的修改,在数据库中直接右键,点击修改,或者将创建存储过程的语句中将create关键字改为alter
(1)、修改
ALTER procedure [dbo].[pro_select] @test_var int output
as
begin
select @test_var=MAX(change) from dbo.student
end
(2)、调用
declare @test_var int
execute dbo.pro_select @test_var output
select @test_var as change
21、存储过程改名:sp_rename 旧名字 新名字
删除存储过程:drop procedure 数据库名字
**游标的使用**
1、游标的创建:for read only 为只读游标,不写为普通游标 ,for update 为游标的更新
declare test_cusor cursor for
select * from dbo.student
for read only
2、游标的调用:open关键字为打开游标,打开后才能使用,和使用数据库的use关键字差不多,想使用游标的话,使用fetch关键字
open test_cusor
--逐条向后查询
fetch next from test_cusor
3、来回自由跳动的游标:scroll
declare test_cusor1 cursor scroll for
select * from dbo.student
for read only
--打开游标
open test_cusor1
--直接跳到最后的一条游标
fetch last from test_cusor1
--直接跳到第一条游标
fetch first from test_cusor1
--执行下一条游标
fetch next from test_cusor1
--从后往前执行
fetch prior from test_cusor1
--跳转到指定的游标
fetch absolute 3 from test_cusor1
--相对游标,使用relative关键字,以当前的游标为原点,向前使用负数,向后使用正数
fetch relative 3 from test_cusor1
**触发器**
1、 触发器的创建:指对该表进行增删改操作时会调用该触发器(事后触发器,关键字为for)
create trigger test_trigger on dbo.student for insert as
begin
print '触发工作开始了'
end
2、 更新触发器:
create trigger trigger_update on dbo.student for update as
begin
print '更新触发器触发了'
end
3、 删除触发器:
create trigger trigger_select on dbo.student for delete as
begin
print '删除了'
end
4、 通过存储过程指定触发器的顺序:sp_settriggerorder为系统的存储过程,@triggername为触发器的名称,@order为指定触发的顺序,有first,last,null;null为不指定触发器的顺序,@stmttype为指定对表执行什么操作所对应的触发类型,有update,delete,insert
sp_settriggerorder @triggername='test_trigger',@order='last',@stmttype='insert'
5、 替代触发器:使用关键字为instead of,即为替代了对表的增删改操作,不会对表的内容进行影响
create trigger trigger_insteadof on dbo.student instead of insert as
begin
print '触发了'
end
6、 如何使用t-sql语句修改触发器,将创建的create关键字改为alter即可;删除触发·起则使用drop trigger 触发起名字
7、 查看触发起基本信息的存储过程:sp_help
exec sp_help trigger_update