SqlServer创建数据库
1、使用图形界面管理系统创建数据库
2、使用SQL语句创建数据库
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>use master --选择要操作的数据库,这里由于是创建新库,所以选择master</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>go</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>create database TestNewBase --指定数据库名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>on primary --主文件组</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>(</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>name = 'TestNewBase', --主要数据文件逻辑名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>filename = 'D:.....TestNewBase.mdf', --这里必须写上一个主要数据文件的绝对路径</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>size = 10MB, --主要数据文件的初始大小</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>filegrowth = 5%或者5MB --这里指文件的增量</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>log on --开始创建日志文件</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>(</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>name = 'TestNewBase_log', --日志文件逻辑名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>filename = 'D:.....TestNewBase_log.ldf', --日志文件的绝对路径</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>size = 5MB, --日志文件的初始大小</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>filegrowth = 5%或者5MB --日志文件的增量</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>go</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---删除数据库</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>drop database 库名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>go</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer创建表
假设创建一个产品信息表格式说明如下:
create table 表名
(
列名 数据类型 长度 是否为空 标识列 主键 默认值 约束。–列与列之间以逗号分隔
)
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>use TestNewBase --选择现有的一个数据库</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>GO</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>--创建表</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>create table ProductInfos</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>(</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>ID int identity(1000,1) primary key not null, --标识列(1000是标识种子,1是增量)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>ProNo varchar(50) not null,</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>ProName nvarchar(50) not null,</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>TypeId int not null,</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>Price decimal(18,2) default 0.00 null,</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>ProCount int default 0 null</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>go</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---删除表</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>drop table 表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>go</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer修改表
语法说明:
- 添加一列:
alter table 表名 add 列名 数据类型 是否为空
- 删除一列:
alter table 表名 drop column 列名
- 修改列属性:
alter table 表名 alter column 列名 数据类型 是否为空
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---新增一列</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>alter table ProductInfos add ProRemark nvarchar(max) null</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---删除一列</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>alter table ProductInfos drop column ProRemark</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---修改一列</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>alter table ProductInfos alter column ProNo nvarchar(50) null</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>---修改列名 慎用 极少用</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>exec sp_rename 'ProductInfos.ProCount', 'Count', 'column'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer语句创建约束
约束分类:
- 主键约束(联合主键)
- 语法:primary key (列名)
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --示例:</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> alter table 表名 add constraint 约束名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> primary key (列名)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 外键约束
- 语法:foreign key 列名 references 主表名 (列名)
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --示例:</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> alter table 表名 add constraint 约束名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> foreign key (列名) references 主表名 (列名)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- unique约束
- 语法:unique (列名)
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --示例:</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> alter table 表名 add constraint 约束名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> unique (列名)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- check约束
- 语法:check (逻辑表达式)
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --示例:</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> alter table 表名 add constraint 约束名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> check (逻辑表达式)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --表达式示例:字段>值</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- default约束
- 语法:default (缺省值) for 列名
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --示例:</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> alter table 表名 add constraint 约束名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> default (缺省值) for 列名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer插入数据
- 单条数据插入
- insert into 表名 (列名,列名,……) values (值,值,……)
- insert into 表名 (列名,列名,……) select 值,值,……
- 多条数据插入
- insert into 表名(列名) values (值),(值),……
- insert into 表名(列名,列名,……)
select 值,值,……
union all
select 值,值,……
union all
……
- 注意:第二种多条插入时也可以使用union作为多条连接,union与union all的区别在于union可以在连接时去重,而union all则不去重,所以union的执行效率低于union all
- 批量备份表示例
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * into 新建的表名 from 需要备份的表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer更新数据
- 更新数据语法:
- update 表名 set 列名 = 值,列名 = 值,……
where 条件表达式
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --TestTable为学生表,其中name是姓名,age是年龄,id是学生编号且是主键</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> update TestTable </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> set name = '张三', age = 18</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> where id = 5</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- update 表名 set 列名 = 值,列名 = 值,……
from 联表表达式
where 条件表达式
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --TestTable为学生表,ClassTable是班级表</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> update TestTable </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> set TestTable.ClassNo = ClassTable.Number</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> from ClassTable join TestTable </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> on ClassTable.sid = Testtable.id</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> where Testtable.id = 5</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
SqlServer删除数据
- 删除数据
- 整个表数据删除
语法:delete from 表名
- 删除指定数据
语法:delete from 表名 where 条件表达式
- 初始化表(清空数据并恢复标识列序列)
语法:truncate table 表名
注意:初始化是即时操作,不能回滚,不能恢复
SqlServer查询数据
- 查询单表所有数据
语法:select * from 表名
- 查询单表指定数据
语法:select 列名, 列名,…… from 表名 where 条件表达式
- 列名命名别名(执行查询时)
- select 列名 as 别名,列名 as 别名,…… from 表名 where 条件表达式
- select 列名 别名,列名 别名,…… from 表名 where 条件表达式
- select 别名=列名,别名=列名,…… from 表名 where 条件表达式
- 查询结果排序
关键词:order by,asc,desc;其中asc表示升序且为默认,desc表降序
- 语法1(默认升序):select 列名,列名,……
from 表名
where 条件表达式
order by 列名,列名,……
- 语法2(降序):select 列名,列名,……
from 表名
where 条件表达式
order by 列名 desc,列名 desc,……
- 近似查询(模糊查询)
近似查询是在where子句中进行
- 语法:where 列名 like ‘%值%’
说明:近似查询是为了匹配部分符合条件的结果,近似查询是在where子句中实现,近似查询中%代表匹配所有字符不限数量,出现在查询值前则表示前方不限制字符与数量,在值后方则表示后段不限制字符与数量;如:’值%‘则表示以‘值’开头的后段可以匹配任意数量的字符。
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select 列名,…… from 表名或联表 where 列名 like '%值%'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 以‘_’下划线为匹配符的表示匹配单个任意字符
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --由于这里有四个下划线所以表示匹配任意四个长度的字符串</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 like '____'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 以[]一组中括号框定范围匹配,匹配的范围为中括号中的任意一个字符
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --这里中括号里的字符不需要间隔,只要任意匹配上三个其中的一个即可</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 like 'ad[mcd]in'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --这里表示从字母m到字母o中的任意一个字母都可以被匹配</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 like 'ad[m-o]in'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 以[^]中括号中包含上尖符号的表示不包含中括号中的任一个字符,与中括号[]正好相反
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 like 'ad[^abc]in'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 范围查询
范围查询是在where子句中进行
- 使用比较运算符=,<,>,<=,>=,<>,其中<>表示不等于,表达式之间以and或or进行连接,也可以使用()进行条件分组
示例1:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名>值 and 列名<值</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
示例2:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名=值 or 列名=值 or ……</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名>值 and 列名<>值 and ……</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 使用in或not in进行范围限定
语法:where 列名 in (值,值……),表示字段值在小括号所列值得范围内
语法:where 列名 not in (值,值……),表示字段值不在小括号所列值得范围内
其中小括号中可以是一个子查询,示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 in (select 表示值的列名 from 表名)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 使用between或between and进行范围限定
between and等价于 >= and <=的方式
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --表示范围大于等于0并且小于等于9</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from 表名 where 列名 between 0 and 9</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 使用Top查询表中前指定数量的行(不在where子句中)
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --查询前100条数据</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select Top 100 * from 表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --查询前百分之55的数据</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select Top 55 percent * from 表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 聚合函数
聚合函数用于对一组值执行计算并返回单一的值,聚合函数几乎都会与group by结合使用
- count计算行数(个数)
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --计算该表的行数</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select count(列名) from 表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --效果等同,列名不一样</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select count(1) from 表名</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- sum求和函数
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --以列名A为分组条件,对列名B中的值进行求和</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select 列名A, sum(列名B) from 表名 group by 列名A</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- avg平均值函数
写法同求和函数
- max最大值函数
写法同求和函数
- min最小值函数
写法同求和函数
- 分组查询
分组查询group by通常与聚合函数结合使用,分组查询是对聚合结果进行分组,通常作为合计的条件存在,示例可参考求和函数。
语法:
select ……
from ……
where ……
group by 列名,列名……
- 联表查询
联表查询是根据多个表之间的关联字段实现连接并从多个表中提取匹配的数据进行查询。
- 内连接
使用inner join进行多个表之间的连接,使用比较运算符>,<,>=……进行表间比较,内连接是一种等值连接,多表中数据都必须可以匹配才返回相应数据,某表中不存在对应数据则不返回(内连接可以省略inner,直接写成join)
- 显式连接
语法:select * from 表名1 inner join 表名2 on 条件表达式
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select * from table1 inner join table2 on table1.id = table2.id</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 隐式连接
语法:select * from 表名1 , 表名2…… where 表名1.关联字段名 = 表名2.关联字段名
- 外连接
外连接分类:左外连接、右外连接、全外连接;简称左连接、右连接、全连接
- 左连接,left (outer) join on 返回左表的所有行,当右表中没有对应的匹配项,则对应的列就会显示null
结果:左表所有行都会显示,右表行数与之相同,但没有匹配项的行会显示null
语法:select * from 表名1 left join 表名2 on 条件表达式
- 应用举例:当企业用户需要查询所有往来信息时可能会需要得知,那些单位发生过往来,那些单位没有发生,以便调整购销策略。
- 全连接

- 全连接关键字:full (outer) join 返回左右两个表中的所有行,当两表关键字匹配时则在同一行显示,不匹配时则两表以不同行显示且对方表显示null
- 交叉连接
- 交叉连接关键字:cross join 又称笛卡尔积。
- 当交叉连接不带where子句时,返回被连接的两个表的笛卡尔积,返回的行数是两个表行数的乘积。
- 当交叉连接带where子句时,等价于inner join返回的是全匹配的数据
Sqlserver嵌套查询
- From子句嵌套
在使用select联表查询时经常会使用到一些重复关联的表且关联的字段不同,此时联表查询就会出现障碍。有时在查询时需要查询同样条件下最大值或最小值后再进行联表,或者先进行聚合后再进行联表,此时整个联表过程会变得异常复杂。此时我们可能会用到嵌套联表。
语法1:
select 表1.列名A, 表2.列名B, 自定义表名.列名Y……
from 表1 join 表2 on 表1.关联字段 = 表2.关联字段
join (select 列名X,列名Y from 表3) as 自定义表名 on 表1.关联字段 = 自定义表名.列名X
语法2:
select 表1.列名A, 表2.列名B, 自定义表名.列名Y……
from 表1 join 表2 on 表1.关联字段 = 表2.关联字段
join (select 列名X,列名Y from 表2) as 自定义表名 on 表1.关联字段 = 自定义表名.列名X
语法3:
select 表1.列名A, 表2.列名B, 自定义表名.列名Z……
from 表1 join 表2 on 表1.关联字段 = 表2.关联字段
join (select 列名X,sum(列名Y) as 列名Z from 表3 group by 列名X) as 自定义表名 on 表1.关联字段 = 自定义表名.列名X
总体来说,这种嵌套查询相当于在联表时利用一个子查询形成一个自定义的新表,再与其他表进行关联查询,这种形式将会非常常用
- where子句嵌套
在使用where子句进行嵌套查询时常常是为了做范围限定查询,而范围则是通过一个查询子句来实现的。
语法:
select 列名,列名……
from 表名……
where 表名.列名 in (select 列名 from 表名 where 条件表达式)
Sqlserver变量
- 变量定义
变量是被赋予一定值的语言元素
- 变量主要作用
在SQL语句中作为中间值传递或者计算
- 变量分类
- 局部变量
- 全局变量
- 局部变量定义
语法:
declare @变量名 数据类型
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> declare @aaa int</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> declare @bbb varchar(50)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select @aaa = 123, @bbb = 'abc'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select @aaa,@bbb</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --定义变量使用declare进行,局部变量必须以@开头。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --这里定义了两个变量@aaa和@bbb,使用select进行了赋值,最后使用select进行了查询。这里赋值也可以使用set来进行,set与select赋值的区别在于set只能给单个变量赋值,而select可以给多个变量同时赋值。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --变量赋值可以赋一个值,也可以赋予一个表达式。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 全局变量
全局变量是内置变量,只可以使用,不可以自定义;
引用全局变量时必须以@@开头
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select @@LANGUAGE</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --当前使用的语言</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select @@SERVERNAME</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --当前服务器名称</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> ……</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> ……</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- 其他说明
变量通常使用在相对复杂的SQL语句中,有时使用变量将是无可避免的。
Sqlserver其他常用函数与运算符
聚合函数已在sqlserver查询数据小节做过说明,此处不再赘述
- print函数
print函数是用来在消息栏输出结果,通常用来调试或打印结果以验证
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> print '这里打印一句话'</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- raiserror函数
raiserror函数这里只做简单介绍.
主要是用来抛出错误提示,通常用在某些操作不规范的情况下给出提示。
语法:
raiserror(’错误描述’, 错误严重级别, 错误标识)
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> raiserror('XXX不能为空', 18, 18)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --错误严重级别(severity)通常自定义区间为0~18,19~25的严重级别只有sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定,若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --注意:如果错误级别在20~25之间,那么数据库会认为这个错误是致命,那么数据库会将该错误记录到错误日志和应用程序日志后终止数据库的连接。任何小于 0 的严重级别被认为等于0。大于 25 的严重级别被认为等于25。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --错误标识(state)这个参数是可以是1~127之间任意整数,可以用来标识错误的发生位置,如果一段代码的多个位置都会发生同样的错误,那么就可以将这个参数设置为不同的值,用来标识是哪个位置发生错误了。</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- EXISTS 运算符
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True(哪怕找到的记录值为NULL也会返回True),否则返回 False。
示例1:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --查找总访问量(count 字段)大于 200 的网站是否存在</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SELECT Websites.name, Websites.url </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> FROM Websites </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
EXISTS运算符通常用来查询某个记录是否为空,所以也可以与NOT一同使用
示例2:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SELECT Websites.name, Websites.url </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> FROM Websites </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200)</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
EXISTS运算符也可以用在触发器中作为一种删除时排除空删的方法。
- DISTINCT函数
DISTINCT主要作用是去重
语法:
select DISTINCT * from 表名
DISTINCT函数是将所查询的列中的每一行内容全部拼接起来当做一个完整的字符串进行排重,所以除非所有字段值都完全一致,否则无法达到排重效果。
更详细去重方法参考:
1、https://blog.csdn.net/u0/article/details/
2、https://blog.csdn.net/wuyoudeyuer/article/details/
注意:DISTINCT只能在select中使用;DISTINCT 必须放在第一个参数。
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --单列排重</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SELECT DISTINCT city FROM test_distinct</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --多列排重</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SELECT DISTINCT province, city FROM test_distinct</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --所有列排重</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SELECT DISTINCT * FROM test_distinct</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
- DATEDIFF函数
DATEDIFF函数用作两个日期相减,得出两个日期间的时间跨度
示例:
sql</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --计算两个日期间的间隔天数</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select DateDiff(DAY, '2020-01-01', '2020-01-10')</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --计算两个日期间的间隔月数</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select DateDiff(MONTH, '2020-01-01', '2020-03-10')</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> --计算两个日期间的间隔年数</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> select DateDiff(YEAR, '2020-01-01', '2022-03-10')</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
DATEDIFF函数也可计算小时、分钟、秒数详情百度或参考https://blog.csdn.net/ddsheng1128/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/155549.html