MSSQL
mssql docker安装
https://www.jianshu.com/p/e3c3fbbbf2e8
--表示注释
建库
create batabase test on( Name=test,--库名 FileName='d: est.mdf',--存储主要数据文件路径 Size=8MB,#大小 MaxSize=UnLimited,--UnLimited 最大容量配置 FileGrowth=64MB --10% --64MB,增长模式,超过后自增量 ), ( Name=test_2, FileName='d: est_2.ndf',--储存次要数据文件路径,可有可无 Size=8MB, MaxSize=UnLimited,--UnLimited FileGrowth=64MB --10% --64MB ) Log On ( Name=test_log, FileName='d: est_log.ldf',--日志文件路径 Size=8MB, MaxSize=1000MB,--UnLimited FileGrowth=10% --10% --64MB )
修改数据库名称
-- 权限修改数据库名 ALTER DATABASE TESTDB01 -- TESTDB01名称修改为TESTDB02 MODIFY NAME = TESTDB02;
修改数据库结构
ALTER DATABASE TESTDB01 -- 修改文件 MODIFY FILE( NAME = 'TESTDB01', SIZE = 20MB, MAXSIZE = 80MB, FILEGROWTH = 10MB ); -- 查看是否修改成功 EXEC SP_HELPDB TESTDB01;
删除数据库
drop database testdb01;
数据库类型
数字类型 bigint 8bit int 4bit smallint 2bit tinyint 1bit float 取决于数据类型 时间类型 time 时:分:秒.精确到小数点后7位 data 年-月-日 smalldatatime 年-月-日 时:分:秒 datatime 年-月-日 时:分:秒.小数点后三位 datatime2 年-月-日 时:分:秒.小数点后七位
建表
Create table创建表
Primary key 主键 不允许为空值,重复值
如果主键放在其他位置可以在中间后面加入(id)表示设置id字段为主键
Foreign key 外键
Null 非空约束
Not null 不能为空
Unique唯一
Identity 标识列,也称自增量
数据类型
Char 整型(非unicode)
Varchar可变整型(非unicode)
Nchar整型(unicode)
Nvarchar可变整型(unicode)
Unicode(2)可以2个中文或者2个英文
unicode(2)可以放2个英文或者一个中文
Check选择
修改表结构
增 insert into多行插入 Values插入值
Insert into多行插入 (普通法)后面加表名
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
Foreign key 设置外键 (先插主键再插外键)
References(引用)后面表名字段名,如果单独在外面外键后面跟字段名再references跟表名字段名(注意类型一致)
单行插入
多行插入
insert into useinfo (id,name,age,id2,password2,username,password )values (3,'zhangsan','12','1','123456','lisi','654312') ,(4,'zhangsan','12','1','123456','lisi','654312') ,(5,'zhangsan','12','1','123456','lisi','654312')
insert copy表的做法
insert into useinfo ("id","name","age","id2","password2","username","password") select id,v1,v2,v3,v4,v5,v6 from tb
改
更新update set
where 约束条件
删
删除Delete from
Truncate table表名
与delete区别1.delete可以加条件,truncaate不行2.delete删除数据不释放空间,truncate删除数据同时释放空间
drop table表名 删表
drop datebase 删库
查
select * from 表名
查询去重
select DISTINCT name from useinfo
as用法
as 对于字段可以as+别名,在用select 语句时为了在有显示区分时使用
组合字段
is用法(空值搜索)
如果搜索的是空值用关键字is,而不是用 ' = '
如果要搜索被删除的字段,不能用这个方法,因为删掉时字段的属性改变为‘‘
两个引号里面没有东西,而null是在定义它的时就是没有属性的,而这个已经被赋予了属性,所以用where [name] =’’;
常量列
或者
后面值都是固定的,在select操作时增加的内容并没有存在源数据中
top用法
显示前5行
百分比显示前一半的数据,如果有10条数据,设置51的话,显示6行数据,因为数据是整行显示的
升序降序
order by 排序方式
asc升序(默认)由小到大
desc降序 由大到小
可以降序后面加逗号再升序,现已前一个排序方式排序,如果前一个字段中有相同的字段那么在后面一个排序中以降序方式排序
特殊关键字
- 函数返回小于或等于指定值(value)的最小整数,取整,没有四舍五入这一说法 select FLOOR(password2) from useinfo
-- 向上取整 select CEILING(password2) from useinfo
-- 返回字节数 select DATALENGTH(name) from useinfo
charindex(查找字符串,被查找字符串,查找起始位置)
如果没找到返回0
charindex来表示字符串位置,第一个语句吕在第一位,显示结果为以
第二个在表里找吕的人,先找到吕第一位的人然后where定位到哪一行就显示出来了
Len()字符串后面空格不计,返回字符串长度
Lower()返回小写字符
Upper返回大写字符
Itrim()去左边的空格
Rtrim()去右边空格
ltrim(rtrim(' test ')) --去除首尾空格
显示从右边数起3个字符串
select left('xxx',4) 显示从左边数起3个字符串
Replace(字符串,被替换内容,替换内容),所有a替换成b
Stuff(),从第四个开始取4位变为****
模糊匹配
%后面所以字段
_后面一个字段
__后面两个以此类推
Between 范围值 1 and 范围值2 闭区间[20,40]包括20和40
select * from useinfo where name BETWEEN '12' and '13' -- 在某一范围之间,这里是字符串,因为这个字段是 select * from useinfo where name not BETWEEN '12' and '13' -- 不在某围之间
in用法
In(值1,值2,。。)
只要有这三个都会被选出来,与下面这个一样
子查询
select * from useinfo where id in (select p_id from sp where p_id = 2)
日期函数
Select GETDATE() Defalut就是得到date
在当前时间加一年
Datediff(单位,前一个日期,后一个日期)
datediff通常用于图书馆中的借书系统中
聚合函数
Sum 求和 avg平均 max最大值 min最小值 count
当进行聚合函数搜索时,其他字段也要是聚合函数作者分组字段
Group by 分组查询 将一列分组,以两个字段进行分组
Having分组筛选(只能写聚合函数和分组字段)
与where不同的是where筛选的是原生的,having是group by的数据
其优先级where>group by>having
内联 inner join
格式: Select xxx From 表1 Inner join 表2 On 联结条件 Where 筛选条件
三表联结
左外联结
a left inner join b(此时a在left inner join左,b在右)
如果a表数据多于b表 ,外联结果和内联一样
如果b表数据多于a表, 外联结果中a表没有的数据为空值
右外联结
a right inner join b
全外联结
包含左右内联数据 b(此时a在rightinnerjoin左,b在右)
一样,右边数据多,没有影响
左边多,外联结果中b表没有的数据为空值
内外联总结:
交叉联结cross join 不相干的数据都联结起来,没有where条件
版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。