当前位置:Gxlcms > 数据库问题 > 今天是双11,话说刚刚学习完SQL,自己写的一个SQL笔记

今天是双11,话说刚刚学习完SQL,自己写的一个SQL笔记

时间:2021-07-01 10:21:17 帮助过:3人阅读

drop database 库名 删库
drop table 表名 删表
delete from 表名 删表,保留字段
truncate table 表名 删表,保留字段(更高效,删除的同时重置了表的自动增长)

--建库
create database 库名
on(    
    name=‘库名‘,
    filename=‘地址\库名.mdf‘            
)

--建表
create table 表名
(
    列名 数据类型 primary key,主键约束
    列名 数据类型 foreign key references 主键名(联接列列名),外键约束
    列名 数据类型 not null,非空约束
    列名 数据类型 unique,唯一约束
    列名 数据类型 identity(开始自增值,自增变量),自增约束
    列名 数据类型 default ‘默认值‘,默认约束
    列名 数据类型 check(约束值或者表达式) 检查约束
)

--增加记录
insert 表名(列名A,列名B) values (‘值A‘,‘值B‘) 值与列名一一对应

--删除记录
delete from 表名 where 条件 删除符合条件的值

--修改记录
update 表名 set 列名=‘修改成为的值‘ where 条件 修改符合条件的值

--查询记录
select * from 表名 “*”号代表所有,可以是列名

--增加列
alter table 表名 add 列名 数据类型

--删除列
alter table drop column 列名

--查询
select    查询的首词
from    查询的外键表(也可以就是外键表)
inner join    查询的主键表(inner可以省略,其次还有left(显示左边表的全部)和right(显示右边表的全部))
on    联接的外键的列名=主键的列名
where    需要什么条件
like    按什么查询
group by    按什么分组
having    分组显示的条件
order by    按什么排列(asc是升序,第一个最小,desc是降序,第一个最大)
--子查询
将子查询的结果做为母表的条件进行查询
用in去检索子查询的结果

--all
<all 表示小于最小值,即小于所有
>all 表示大于最大值,即大于所有

--any和some的查询功能相同
<any|some 表示小于最大值
=any|some 表示与in运算符等价
>ang|some 表示大于最小值

--相关子查询
独立于外部主查询而存在称为非相关子查询
依赖于外部主查询的子查询称为相关子查询
当主查询执行结果行数较大时,相关子查询的效率较低
当子查询执行结果行数较大时,非相关子查询的效率较低

--exists
检查子查询是否至少会返回一行数据
返回为true或false
当子查询的行存在时,则执行主查询表达式,否则不执行
外表大内表小用in
外部小内表大用exists

--T-SQL
--局部变量(自己声明的变量)
1.声明:declare {@名字 类型,@名字 类型=值}(保存单个数据,声明后初始化为NULL)
2.赋值:set @名字=值
    select @名字=值 或select @名字=值 from 表(即将查询出来的结果当值)

--全局变量(系统声明的变量,即系统变量)
@@erroy 返回上一条T-SQL的错误号,无错误为0,即执行完成为0
@@identity 返回最后插入的标志值,即插入后自动增长的主键值,没有则无法
查询
@@rowcount 返回上一条语句所影响的行数
@@servername 返回本地服务器名称
@@servicename 返回运行在注册表中的名称
(用户不能修改全局变量的值,用户也不能建立全局变量,使用一次后恢复默认值)

--打印
print:将字符串输出到消息栏(只能是字符串,系统提供convert(varchar(20),值)将money,decimal类型转换为varchar打印)

--begin end
逻辑执行块,相当于花括弧

--条件
>,<,>=,<=,=,<>(不等于)

--if...else
if 条件
begin
 执行语句
end
else
begin
 执行语句
end
(在sql中没有if...if.else...else)

--while循环
while 条件
begin
end
(break跳出循环,continue跳过本次循环)

--case
case 变量
when 等于值(多个用and) then 输出值
else 输出值(都不满足则输出)
end
或者做if...if.else...else用
case
when 判断(同where一样,多个用and) then 输出值
else 输出值(都不满足则输出)
end

--视图
一张由一张表或多张表生成的虚表

1.创建
create view v_视图名
as
查询的数据

2.查询
select * from v_视图名

--索引
聚集索引:主键索引(自动生成)
非聚集索引:其他索引(按表字段建立)
(聚集索引的建立是为了查询,非聚集索引的建立是为了插入)

创建
create [unique](唯一) [clustered(聚集索引)|nonclustered(非聚集索引)]
index idx_索引名
on 表名(列名A,列名B)

--事务
1.特性
原子性:一个事务或者执行或者不执行,没有执行到一半的道理
一致性:一个事务完成后则一个数据库里所有的表都要保证一致
隔离性:一个事务在查看数据时查看事务完成后的值,不查看事务中间值
持久性:一个事务完成后对数据库的改变是永久的

2.执行一个事务
begin transaction(开始一个事务)
执行内容
判断
true
 commit transaction(提交事务,即完成事务)
false
 rollback transaction(回滚事务,即撤销事务开始到这里执行的内容)

3.分类
显示事务:即用户创建执行的事务
隐式事务:当本事务回滚后则自动开始下一个事务
自动提交事务:每一个T-SQL语句都是一个事务,当语句执行出错则回滚到之前(即不执行)

4.作用
保证数据的一致性和可恢复性

--储存过程:需要多次使用的固定操作编写的程序或查询
1.特点
加快系统运行速度,封装复杂操作,实现模块化程序设计和代码复用,增强安全性,减少网络流量

2.系统储存过程
sp_database:列出所有数据库
sp_helpdb:报告所有数据库或指定数据库的信息
sp_renamedb:更改数据库名称
sp_tables:返回当前环境下可查询的对象列表
sp_columns:查看某个表的所有列信息
sp_help:查看某个表的所有信息
sp_helpconstraint:查看某个表的约束
sp_helpindex:查看某个表的索引
sp_stored_procedures:列出当前环境下的所有储存过程
sp_passward:修改帐号登录名

2.创建
go
if exists(select * from sysobjects where name=‘proc_储存过程名‘)
 begin drop procedure proc_储存过程名 end
(判断是否存在创建的储存过程,若有则删除)
go
create proc[edure](edure可以省略) proc_储存过程名
(@变量名A 类型 (输入的值,给下面的查询判断用)
@变量名B 类型 output (output表示输出变量,即执行后拿出去的数据))
(这里可以也不带参数)
as
select @变量名B=查询值 from where 查询值=@变量名A
(查询为例)

3.查询(即执行储存过程)
go
declare @变量名A 类型 ,@变量名B 类型
exec proc_储存过程名 @变量名A=值或值,@变量名B=值或值 output(注明为输出变量)
(这里的传入的值要注意顺序,乱序则需带上创建的变量名)

4.比较(视图与储存过程)
查询的数据需要进行操作用视图
仅仅进行查询用储存过程

今天是双11,话说刚刚学习完SQL,自己写的一个SQL笔记

标签:

人气教程排行