SqlServer语法整理

来源:互联网 发布:jdk 8u60 windows x86 编辑:程序博客网 时间:2024/06/08 02:42

一、建数据库

1、使用T-SQL创建数据库 (次要数据文件是可写可不写的,根据实际情况看)

create database databasesName

on [primary]
( --以下是主数据文件属性


name = 'database_data',--表示主数据文件的逻辑名称
filename = '路径\database_data.mdf',--表示主数据文件的物理路径
size = XXmb, --表示主数据文件的初始大小
maxsize = XXmb,--表示主数据文件的最大值
filegrowth = xx--表示主数据文件的增长速度,可以按mb增长,也可以按百分比增长


),
( --以下是次要数据文件属性


name = 'database_data2',--表示次要数据文件的逻辑名称
filename = '路径\database_data2.ndf',--表示次要数据文件的物理路径
size = XXmb, --表示次要数据文件的初始大小
maxsize = XXmb,--表示次要数据文件的最大值
filegrowth = xx--表示主数据文件的增长速度,可以按mb增长,也可以按百分比增长


)
[log on]
( --以下是日志文件的属性

name = 'database_log',--表示日志文件的逻辑名称
filename = '路径\database_log.ldf',--表示日志文件的物理名称
size = XXmb, --表示日志文件的初始大小
maxsize = XXmb,--表示日志文件的最大值
filegrowth = xx--表示主数据文件的增长速度,可以按mb增长,也可以按百分比增长


)

二、建表

2、使用T-SQL语句创建表

create table 表名

列名1 数据类型 列的特征,
列名2 数据类型 列的特征,
列名3 数据类型 列的特征
        ……

列的特征(在建表的过程建立约束):
主键:primary key
外键:foreign key references 包含主键的表名(主键字段)
联合主键:constraint <主键名>  primary key(字段,另一个字段)
检查约束:check (约束的范围)
默认约束:default(默认的内容)

在现有的数据表上添加约束:
alter table 表名
add constraint 约束名 约束类型 具体的约束说明
例如: 加主键约束:alter table students
   add constraint pk_stuno primary key(stuno)
加唯一约束:alter table class
   add constraint uq_classname unique(classname)
加默认约束:alter table students
   add constraint df_sex default('男') for sex
加检查约束:alter table students
   add constraint ck_age check(age between 15 and 40)
加外键约束:(主表class和从表students建立联系,关联字段为classno)
   alter table students
   add constraint fk_classno foreign key(classno)
   references class(classno)

三、增、删、改

  • 3、使用T-SQL语句插入数据

insert [into] 表名 [(列名)] values (值列表)

注意: 1、值列表的个数必须与列名数目保持一致
2、值列表中的值的数据类型、精度要与对应的列类型保持一致
3、可以不指定列名,但值列表中值得顺序应该与表中字段顺序保持一致
4、不应为标识列字段指定值,因为它是系统控制自动增长的
5、值列表中的数据项,应符合对应列的检查约束要求
6、如果表中某些字段设置了为非空约束,那么insert语句必须为其指定列值
7、如果一个表中某些字段设置了默认值,那么使用insert语句如何给该列插入默认值呢?
1> insert语句中不指定具体默认值的列名和列值
2> insert语句中指定列名,在值列表中使用‘default’关键字与之相对应

4、一次插入多行数据

1> insert select 语句插入多行数据

insert into <表2> [列名] select <列名> from <表1>


注意:  1、语法中<表2>必须事先存在。如果不存在,执行时将会出现错误
2、查询出的字段数目、数据类型、字段顺序,与插入列保持一致


2> select into 语句插入多行数据


select <列名> into <新表> from <原始表>


注意:  1、<新表>不能事先存在,它是在执行该语句时系统自动创建的


select identity(数据类型,标识种子,标识增量) as 列名
into <新表>
from <原始表>


3> 使用union关键字插入多行数据


insert [into] <表名> [列名]
select <值列表> union
select <值列表> union
select <值列表> 


注意:  1、[列名]可以省略,如果省略列名,那么<值列表>的数据个数、顺序、数据类型必须与
表中字段顺序、数据类型保持一致
2、在union语句中,如果列名部分有默认约束列,不能试图在<值列表>中使用default关键字
设定默认值

5、使用T-SQL中update语句修改数据

update <表名> set <列名=值> [where <更新条件>]

其中: 1、<列名=值>为必选项,用于更新表中某列数据,在set后面可以出现多个,只需用逗号隔开
2、where关键字是可选的,用来限定条件,如果update语句不限定条件,表中所有数据行都将被更新

注意: 1、可以更新主键列数据,但应保证更新后的主键列数据不能出现重复信息,否则,将更新失败
2、可以更新表中外键列数据,但应保证数据在主键表中应事先存在

6、使用T-SQL中delete语句删除数据

delete from <表名> [where <更新条件>]

7、使用Truncate Table 语句删除数据

truncate table <表名>

四、查(基础篇)

8、使用select语句进行查询

select [列名] from [表名]
[where <查询条件表达式>]
[order by <排序的列名> [ASC或DESC]]

其中: 1、如果有多个列名需要用逗号隔开
2、order by 是用于排序的,可以将查询出的数据按照order by 所指定的字段进行排序,排序时还可以通过ASC
或DESC指定升序或降序排列

注意: 1、查询表中的部分列
2、如果要将表中所有列查询出来,可以在<列名>处使用‘*’字符,‘*’代表所有列
3、使用where过滤部分行数据
4、使用as字句将列转别名(还可以使用‘=’实现)
1> 使用as转别名时,如果是中文别名时,可以不写引号
2> 列名应使用英文半角引号,否则将出现错误
5、使用‘+’连接多个字段,合并成一列
6、使用TOP关键字查询表中限定行数
7、在查询结果中使用常量列
8、使用distinct关键字屏蔽重复数据
9、使用is null查询空数据
10、如果要将多个表的数据一并查出,并且以一个结果集的形式显示,可以使用union联合查询

9、对结果集进行排序

可以使用order by 字句对生成的结果集进行排序
1> 在select语法中order by后面的<排序列名>可以是字段名也可以是表达式。
2> 当有多个排序列时,需要用逗号隔开
3> ASC为升序排序,DESC为降序排序,如果不指定默认为升序

10、模糊查询

where <列名> [not] like <字符表达式>
where <列名> [not] in <[常量列表]>
where <列名> [not] between <起始表达式> and <结束表达式>

11、常用SQL内置函数

(不整理)


五、查(进阶篇:分组统计与多表关联查询)

12、聚合函数

1> sum()
2> avg()
3> max()   min()
4> count(): count(*): 返回表中所有数据行的记录数
   count(列名):返回指定列非空值个数

13、分组统计

select 字段列表 [聚合函数]
from 表
[where 条件]
[group by <字段列表>]
[having 条件]
[order by 字段列表 ASC|DESC]

其中:group by <字段列表>可以有多个字段,各字段用逗号隔开,它表示按多列进行分组
注意:select语句中应除聚合函数之外的所有列,应写在group by字句后面,否则将出现错误

14、多表关联查询

1> 内连接

(俩表)
select <列名>
from 表1 inner join 表2
on 表1.列名 条件运算符 表2.列名
[where 条件]
[order by 排序列]

(多表)
select <列名>
from 表1 inner join 表2
on 表1.列名 条件运算符 表2.列名
inner join 表3
on 表1.列名 条件运算符 表3.列名
……
[where 条件]
[order by 排序列]

2> 外连接

select <列名>
from 主表 left|right [outer] join 从表
on 主表.列名 条件运算符 从表.列名
[where 条件]
[order by 排序列]

3> 完全连接

select <列名>
from 主表 full [outer] join 从表
on 主表.列名 条件运算符 从表.列名
[where 条件]
[order by 排序列]

15、子查询语句(就是select查询语句的嵌套)

1> in和not in查询
2> exists和not exists

六、T-SQL编程

16、T-SQL变量

1> 局部变量

变量声明

declare @变量名称 变量类型[, @变量名称 变量类型 ……]

变量赋值

set @局部变量 = 变量值    (单个变量赋值)
select @局部变量 = 变量值 ……  (多个变量赋值)(select查询语句中赋值)

注意: 1、select赋值语句不要和select语句混合使用
如:select @age = age, sex from students where stuno = '64'     错
   select @age = age, @sex = sex from students where stuno = '64'  对

2> 全局变量

@@rowcount 前一条SQL语句处理的行数
@@error 前一条SQL语句报错的错误号
@@identity 最后一次插入的标识值
@@servername 本地SQL Server的名称
@@language 返回当前所用语言的名称
@@version 返回当前SQL Server的安装版本、处理器体系结构、生成日期和操作系统

17、输出语句

print 表达式

其中:表达式可以是变量、字符串或运算式等

18、流程控制语句

1> 语句块

begin
  <命令行或程序块>
end


2> 条件语句


if <条件表达式>
  <命令行或程序块>
[else [条件表达式]
  <命令行或程序块>]


3> 循环语句


while <条件表达式>
begin
  <命令行或程序块>
[break]
[continue]
[命令行或程序块] 
end


4> 分支语句


case <运算式>
when <运算式> then <运算式>
……
when <运算式> then <运算式>
[else <运算式>]
end

19、批处理语句

“go”就是批处理的标志

20、注释语句

1> --
2> /* */
0 0