sqlserver基本语法汇总(事务还没整理后续会发出)

数据库创建代码

use master:

为什么使用master 。因为master数据库记录了SqlServer系统的所有系统级命令,还记录了所有其他数据库的存数据的位置,SqlServer的初始化信息。

数据库创建

create database 数据库名

on primary--主文件组

(name='数据库名'

filename=‘D:\文件\数据库名称.mdf

size=5MB --数据库大小

filegrowth=1MB--文件的增量

log on(

name= 日志文件名

filename=‘D:\文件\数据库名称.ldf

size=5MB --数据库日志文件大小

filegrowth=10%--文件的增量)`

创建表

use 数据库名称 go--切换到想要的数据库

create table 表格名(

id int identity(初始量,增量) primary key not null,

name varchar(10) not null,

删除表格

drop table 表名

修改表格

1.可以在创建表格的时候定义,或者将原有表格删除,在进行创建,仅限于无数据的表格。

2.alter table 进行修改

--添加一列 alter table 表格 add 列名 (列的类型) 是否为空

--删除一列 alter table 表名 drop column 列名

--修改一列 alter table 表名 alter column 修改后的数据类型 是否为空

--修改列名 exec sp_rename ‘表.列名’ ,‘列名’ ,‘数据类型’(一般不要修改列名,开始要定义好)

创建约束

约束类型

primary key (主键约束)

foreign key(外键约束)

unique(唯一性约束)

check (检查约束)

default(默认约束)

表创建时增加约束

id int identity(初始量,增量) primary key not null

name varchar(20) foreign key references 主表名 (主键列名)

id int unique not null

id int default(数值或者加单引号的字符) not null

id int check(id<123 ) not null

表创建后增加约束

alter table 表名 add constraint 主键约束名 主键约束类型 (列名)

alter table 表名 add constraint 外键约束名 外键约束类型 (列名)references 主表 (主键列名)

alter table 表名 constraint 唯一性约束名 唯一约束类型 (列名)

alter table 表名 add constraint 检查约束名 检查约束类型 (表达式)

alter table 表名 add constraint 默认约束名 默认约束类型 (表达式)for 列名

插入数据

单条插入

insert into 表名(列名) values ( “ ”)

insert into 表名(列名) select 值,····

多条插入

1.insert into 表名(列名) values ( “ ”,“ ”···)

2.insert into 表名(列名 ,列名,列名)

select a,b,c union

select a5,b4,c4 union

select a3,b3,c3 union

select a2,b2,c2 union -----(union all 会允许重复值只存在)

克隆数据

1.insert into 表名-目标表 (列名) select 列名 from 表-源表(目标表必须存在)

  1. select 列名 into 表名-目标表 from 表名-源表(目标表不存在)

更新与删除

update 表名 set 列名=更新值,····where 条件(几乎全部加上where条件,没有where的话全部都会被更新为一个数据,同时主键是不能更新的)

  1. 删除数据 但表还在。但是数据会随着删除前的标识符自增----delete from table 不加条件会删除全部数据

  2. 表数据清楚,恢复到初始化 标识符也会恢复------truncate table 表名 where····

区别delete删除数据会被记录在日志文件,truncate 不会被记录,不会激活触发器,drop 和truncate是即时操作,不能rollback(回滚),但是delete update insert 事务中,可以恢复。

truncate慎用 一旦删除,不能恢复

查询表格

查询全部

select * from 表名

查询部分

select 列名,列名 from 表名 可以加条件where

给列命别名(适用于程序中显示中文列名)

select 列名 as 新名字, 列名 新列名 ,别名=列名 from表名 where条件

排序

主键,默认升序 从小到大 asc

降序 dasc

select 列名 from 表名 where+条件 group by ?order by dasc /asc

模糊查询

% 0个或者多个 (%字符)以字符结尾 (字符%) 以字符开头 (%字符%)存在某个字符

select* from 表名 where 列名like ‘%字符%’

_ 只能是一个

select ···from··· where ··like ‘ _adf_d_f'(一个下划线就是一个字符,换句话说长度固定)

[]范围匹配 括号中所有字符中的一个

[a-s]a至s之间某个字母 [a|c|d]acd之中的某个字符

[^]不在括号中的所有字符之间的单个字符

[^adc]匹配到 ADC之外的某个字符

效率排行:%最差

范围查询

select from where 子句 ---给定范围

--比较运算符 > ,< ,>= ,<= ,<>

select * from 表名 where 列名< 30

--in not in

select * from 表名 where 列名 in (30,40,230)在这三个数值中

not in就是不在 in还可以加上查询出的范围in (select ···from···where··)

-- between and 等价于 >= and <=

where 列名 between 20 and 30 等价于 >=20 and <=30

前面多少条 百分比

select top 10 * from 表名(查询前十条)

select top 10 percent * from 表名(查询前十分之一的全部信息)

聚合函数

---对一组值进行运算并返回单一的值 (1是伪造列的意思 )

select count (1) from 表名 ----统计一个表格的记录数

五个聚合函数(经常与group by连用)

count max min AVG sum

select sum(列名) from 表名

select AVG(列名) from 表名

select max(列名) from 表名

select min(列名) from 表名

select 列名 ,count (1)用户数 from 表名 group by 列名

select 列名 ,count (1)用户数 from 表名where 家条件 group by 列名

(order by 一直存在最后)

select出现的列名一定要出现在group by 之中 或者包含在聚合函数中

连接查询

连接分类:内连接 外连接 全连接 交叉连接

内连接:inner join 使用比较运算符 = ,> ,<,>=,<= ,<>进行表之间的比较,查询与条件相匹配的数据 。

等值连接

显示连接

select 列名,列名from 表 inner join 连接表格 on 连接表格.列=表.列 where 加条件

隐式连接

select 列名 ,列名 from 表 a ,表,b where a.列=b.列 and加条件

外连接:左外连接,右外连接 全外连接

左连接 :left join on 返回左表的所有行 ,右表没有匹配上的,对应的列就显示null。

select 列名 ,列名 from 左表left join 右表 on左表.列=右表.列

右连接: :right join on 返回右表的所有行 ,左表没有匹配上的,对应的列就显示null。

select 列名 ,列名 from 左表 right join 右表 on左表.列=右表.列

全连接 交叉连接:

全连接:full join 返回左表和右表中所有行,当某一行在另外一个表中不存在时,会在另外一个表中返回null

select 列名 ,列名 from 左表 full join 右表 on左表.列=右表.列

交叉连接: cross join 笛卡尔积

如果不带where子句时,返回被连接的两个表的笛卡尔积 返回行数会是两个表行数的乘积。带where子句时,等价于 inner join on

select 列名 ,列名 from 左表 cross join 右表

类型转换

数字+数字 --相加 字符+字符----拼接

convert 函数用于类型转换

select ’abc‘+ convert(varchar ,2)运行后结果为abc2 经常会把数字装换成字符串,进行拼接

select convert(varchar(10) ,getdate(),100)---转换日期的 100代表的是日期格式,还有其他格式,可以度娘一下

cast 函数: cast(表达式 as 类型)

select ’abc‘ +cast( 2 as varchar)-----注意 cast能转换日期 ,但不能固定格式

字符串操作函数

查找子串。位置

select charindex(’目标串‘ ,’查找串‘)--返回字符串中指定的子串出现的位置。

select patindex(’%目标串%‘ , ’查找串‘)--返回字符串中指定的子串出现的位置。与上面charindex区别是目标串前后必须带%。

大小写转换

select upper(’abcdedg‘)

select lower(’ABCD‘)

取长度

select len (’adfhla‘)

去空格

select ltrim(’ ahj ‘)---去掉了左边空格

select rtrim(’ ahj ‘)---去掉了右边空格

取子串

select left(目标串 , 开始查找始址)---从左边开始查找

select right(目标串 , 开始查找始址) ----从右边开始查找

select substring(目标串,始址,取字符串的长度)---放回字符串从左边开始,以上字符串都是从1开始计数的

select replicate( ’子串‘,数字)---将字符串进行重复函数

select reverse(’字符串‘)----字符串翻转操作

select replace(’查找串’ , ‘目标串’ , ‘替换串’) ----字符串替换函数

select stuff (‘查找串’, ‘始址’,‘指定长度’,‘替换字符’)---指定子串替换指定位置指定长度后生成的字符串

还有很多函数,建议度娘

索引

作用:数据的查询和处理速度---应用成败的标准。索引应运而生。

概念:索引类似于书记前面的目录,便于查找快速定位,不必全部扫描。加快查询速度,提高系统性能。

缺点:占用存储空间并非越多越好

分类:

聚集索引: clustered 逻辑顺序和物理顺序是一致的 ,一个表只能有一个聚集索引 (主键)

非聚集索引:nonclustered 逻辑顺序和物理顺序并非是一致的 ,一个表可以有多可非聚集索引。(唯一索引)

非聚集索引效率低于聚集索引

如果需要多个列上建立索引,这些列建立组合索引,这些列最好是小数据类型的,比如数字型,整形。

索引是看不到的,但是创建了索引,在查询数据时,优势显而易见。

创建时默认非聚集缩影

create index 索引名称 on 表(列)with( drop _existing = on)----on表示删除原有索引并建立新的索引,off表示不删除原有索引

创建聚集索引

create clustered index 索引名称 on 表(列)with( drop _existing = on)

创建唯一索引

create nonclustered index 索引名字 on 表(列) with(

pad_index =on ,

fillfoctor=50,--制定创建多。每个索引页的数据占索引页大小的百分比

ignore_dum_key=on --避免重复建插入

----读写比: 100:1 设置为100

----读<写: 50到70

---读写相等:80-90

复合索引

create index 索引名称 on 表(列,列)with( drop _existing = on)----on表示删除原有索引并建立新的索引,off表示不删除原有索引

视图

定义:虚拟表 由一个表或多个表通欧查询定义的,将查询定义保存起来实际不包括数据。

视图存储的是查询语句(索引视图除外,应为已经被具体化)

作用:简化查询。增加数据的保密性,安全性上的得到保证

缺点:只是监护查询,病不起高查询速度,增加了维护成本

分类:

标准视图 :存储查询定义,没有存储数据

create view 视图名字 as t-sql查询语句select 列名··from····

索引视图 (被具体化的视图,创建了索引显著提高查询性能聚合了很多行的查询不太适合经常更新的基本数据集)不允许使用*号,必须全部列出列名 和表的所有者

create view 视图名字 with schemabinding as select···from···

分区视图:一台或多台服务器水平链接一组成员表的分区数据

create view 视图名

as select *from 表 union all select * from 表2

标准视图和分区视图都不允许删除修改数据,会影响基础表,索引视图删除数据的话,对应的基础表的数据也会被删除,慎用。、

存储过程

定义:一组为了完成特定功能的一个或一组的sql语句的集合,经过编译以后存储在服务器端的数据库中,可以利用存储过程来加速上去了语句的执行,调用名称,传入参数,执行来完成特定功能。

分类:

系统存储过程:master数据库中,其他数据库中是可以直接调用的的,并且不必在前面加上数据库名,创建数据库时,这些系统存储过程在新的数据库中自动创建。

自定义存储过程: 用户自己创建,完成特定功能,可以传入参数,也可以有返回值,里面可以是只有一个操作,也可以包括多个。

执行: exec 存储过程名,参数列表(多个参数,逗号隔开)

优点:1.提高应用层序的通用性和可移植性,多次调用,不必重新去编写,维护人员可以修改

2.可以更有效的管理数据库权限。

3.提高执行sql的速度

4.减轻服务器的负担

缺点:专门维护,占用数据库空间。

语法: create proc 存储过程名 @userID int,@uaername varchar(50) as begin 加上sql语句 end

创建一个无参传入的存储过程

create proc 存储过程名 as begin select * from 表名 end

创建一个含参数的存储过程

create proc 存储过程名称 @username varchar(50) ,@userpwd varchar(50),@参数 类型 begin declare @time datetime set @time = ’2021-12-14‘ insert into 表格( username ,userpwd ,createtime, age ,列名) values (@username ,@userpwd,@ time ,@age,@列名参数) select * from 表名)end

调用

exec 存储过程名字 ’ 张三‘ ,12345, 34 ,4

触发器

一种特殊的存储过程,存储过程是使用名称调用的,触发器是由事件触发自动调用,触发器是在对表进行操作 插入 更新 删除自动执行触发器,如果定义对应的触发器,系统就会自动调用。

分类:

DDL触发器(定义语言触发器): create alter drop

DML触发器(操纵语言触发器): insert update delete

DML触发器有两种: after触发器: insert update delete ;操作之后出发 instead of触发器: insert update delete ;不执行定义的操作,执行的是触发器本身。

inserted deleted:插入表,删除表

逻辑表也是续表,系统在内存中创建的,不会存储到数据库中,只读性质的,读取但不能修改数据,结构与操作的表相同。触发器执行过程中存在,并且可以访问,工作完成后自动删除。

inserted 存放插入或者更新后的数据

deleted 存放更新前或者删除的数据

触发器执行过程中,都是可以访问的,提交之前,可以撤销,即事物回滚,。触发器就是一个特殊的事物,可以进行一些检查,设置条件,如果不满足,可以回滚。

after触发器:对表操作后触发。

create trigger 触发器名字 on 表名 for insert as +sql语言

create trigger 触发器名字 on 表名 for update as +sql语言

create trigger 触发器名字 on 表名 for deleted as +sql语言

==备份

if (object_id ('表名','u') is not null)

---目标表存在

insert into 表名 select *from deleted

----目标表不存在

else

select * into 表名 from deleted

=====================================================

instead of-----insert

create trigger 触发器名字 on 表名 instead of insert as sql语言

游标

对数据查询结果的一种访问机制,用户对结果集进行逐条访问

游标的对象是结果集

访问方式:逐条访问(定义在特殊结果集上的指针,控制这个指针遍历数据集或指定特定的行。

游标的作用:可以定位或者遍历某一行数据的位置,并进行读写。

缺点:数据读取出来后会放到内存中的tempOB,由于内存空间的问题,读取数据不宜太大,会导致内存空间不足。

分类:静态 动态 只进 键集驱动游标

静态:结果集对数据库如何操作,结果集都不会变。结果集与操作后的数据一致的话-------关闭游标再重新打开

动态:与静态相对,前后滚动,结果集获取所有的改变,提取时,含数据,顺序,成员,都会发生变化,对数据可见,API函数或者t-sql中的 where current of子句通过游标进行更新,游标外部所做的更新直到提交时才可见。

只进:不支持滚动,从头读到尾,对数据库所做更改在提取时是可见的,因为游标只进不退。提取后的更改不可见。

静态游标在滚动时,检测不到表数据的变化,消耗资源相对较少,动态游标在滚动水监测到数据的变化,消耗的资源相对较高,二只进游标不支持滚动,在提取时检测到表数据变化,提取后检测不到,消耗的自哦远相对较小,所以,一遍情况下都会选择静态游标,在只读取数据时选择只进游标,动态游标一般不使用。

游标的生命周期:声明---打开--读取数据--关闭游标---释放游标

==================================================

创建只进游标

declare 游标名字 cursor local-----global 全局游标

for select ····from····where··· open 游标名字 declare 变量1 ,变量二,变量三,(@ 变量名 数据类型) set

begin和end之间加上操作语句

close 游标名称

deallocate 游标名称

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值