SQL即Structured Query Language,它是为查询和管理关系型数据库管理系统(RDBMS)中的数据而专门设计的一种标准语言。 Microsoft提供的T-SQL是标准SQL的一种扩展,在它的RDBMS(Microsoft SQL Server)上负责处理数据。
不区分大小写
用单引号把字符串括起来
bit:可以取值为0、1或null。当作布尔类型来用,1为true。
int:-20亿到20亿,4字节
bigint:-2^63到2^63-1,8字节
numeric[ (p[ ,s] )]:- 10^38 +1 到 10^38 – 1,p(精度) 包括小数点左边和右边的位数。 1—38。默认 18。s(小数位数) 小数点右边的位数。0—p,默认0, 最大存储大小基于精度而变化。decimal和numeric等价。
money:代表货币或货币值的数据类型。-9220亿—9220亿,精确到货币单位的万分之一,8字节。
固定长度的字符串检索效率更高。
char [ ( n ) ]:ASCII编码,固定长度,小于指定的字符数目时,后面自动填充空格,大于指定的数时,会截取超出的字符,n 用于定义字符串长度,1—8,000,默认1。 存储大小为 n 字节。
varchar [ ( n | max ) ]:可变长度。 max 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小为所输入数据的实际长度 + 2 个字节,很少用max。
nchar [ ( n ) ]:Unicode编码,固定长度。1—4000,存储大小为 n 字节的两倍。
nvarchar [ ( n | max ) ]:可变长度
datetime:日期范围1753 年 1 月 1 日到 9999 年 12 月 31 日,时间范围00:00:00 到 23:59:59.997,8字节
date:0001-01-01 到 9999-12-31,3 个字节
time:00:00:00.0000000 到 23:59:59.9999999
datetime2 :日期范围0001-01-01 到 9999-12-31,时间范围00:00:00 到23:59:59.9999999
如果要兼容08以前的只能用datetime
use 数据库名;--使用当前数据库
create table 表名 ( 列名称1 数据类型 not null ,列名称2 数据类型 default 默认值 ,列名称3 数据类型 primary key(主键字段), foreign key(外键字段)references 目标表名(被关联的字段) ); 最好不要使用联合主键,选定主键时,最好选一个和业务无关的字段
alter table 表名 add 字段名 字段类型 alter table 表名 drop 字段名
drop table 表名
如果在表之间创建了外键关联关系,那么在删除被引用数据表的时候会失败,因为这样会导致关联关系被破坏,所以必须首先删除引用表,然后才能删除被引用表。
not null约束强制列不接受null值。如果不向字段添加值,就无法插入新记录或者更新记录。
create table Persons ( Id_P int not null, LastName varchar(255) not null, FirstName varchar(255), Addresss varchar(255), City varchar(255) );
推荐将列定义为not null,除非有明显的原因而需要支持null。
insert into 表名(列1,列2,列3)values(值1,值2,值3); 从08开始支持这样的赋值语法 insert into Person(id,name,sex,age) values (1,'A','m',23) ,(2,'B','f',13) ,(3,'C','m',42) 在插入数据的时候某些字段没有值,可以忽略这些字段,其值则为null
update 表名 set 列名=新值 where 列名=某值;
delete from 表名 where 列名=值; delete from 表名;--在不删除表结构的情况下删除所有的行
select 列名 from 表名;
select * from 表名;--查看所有数据,尽量少使用
可以为表或列指定别名
列名 as 别名
select 列名 from 表名 where 列 运算符 值;
运算符 | ||
---|---|---|
= | 等于 | |
<> | 不等于 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 | |
(not)between…and… | 小于等于 | (不)在某个范围内,包括两个边界 |
(not)like | 匹配 | %零个或多个字符,_单个字符 |
and | 和 | |
or | 或者 | |
in | 匹配 | where column_name in (value1,value2,…)//对and的简化 |
avg(列名)--计算字段平均值
min(列名)--最小值
max(列名)--最大值
sum(列名)--和
count(列名)--条数,用的少
count(*)--除了count(*)别的聚合函数计算时都不包括null值
count(distinct column_name)//函数返回指定列的不同值的数目
结合聚合函数根据一个或多个列对结果集进行分组,如果有where语句,必须放到where语句之后。
select Customer,sum(OrderPrice) from Orders group by Customer;
聚合函数不能在where语句中使用,必须使用having子句代替。
位于group by子句之后
having字句中不能包含未分组的列名
用于筛选分组后的内容
select Customer,sum(OrderPrice) from Orders where Customer='Bush' or Customer='Adams' group by Customer having sum(OrderPrice)>1500
聚合函数() over()
使用聚合函数,结果只能是一行,使用over可以将结果扩展到所有的行
例如:查询出所有的分数,要求在每行结果中显示出平均分
select *,avg(score) over() from ScoreTbl;
位于select语句末尾,用于根据指定的列对结果集进行排序,默认按照升序对记录进行排序
select Company, OrderNumber from Orders order by Company desc, OrderNumber asc desc为降序
select top 限制结果集数据 字段列表
select top 限制结果集数据 字段列表
select top 2 * from Persons;--选取前两条记录
select top 50 percent * from Persons;--选取前50%的记录
%:代表零个或多个字符
_:代表一个字符
[]:指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。还有一个作用是,有时候取名会和系统名冲突,可以加一个方括号告诉系统这不是关键字。
[^]:不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
select * from Employee where FName like '[SJ]%';--检索开头字符为S或J长度不限的字符串
select LastName,FirstName,Address from Persons where Address is null;
select distinct 列名 from 表名;//去除重复的值
distict是对整个结果集(结果集是选出结果组成的表)进行数据重复抑制的,而不是针对某一个列
组合两个完全不同的查询结果集,而这两个查询结果之间没有必然的联系,只是我们需要将他们显示在一个结果集中而已
union运算符要放置在两个查询语句之间
select Number,Name,Age from Employee
union
select CardNumber,Name,Age from TempEmployee
条件:1.每个结果集必须有相同的列数2.每个结果集的列必须类型相容
union运算符合并了两个查询结果集,其中完全重复的数据行被合并为了一条。如果需要在联合结果集中返回所有的记录,则需要在union后边加all。
getdate()获得当前日期时间
convert(varchar(50),日期时间值,101)获得日期时间值得日期部分
convert(varchar(50),日期时间值,108)获得时间部分
dateadd(标记,增量,时间)
dateadd(week,1,’2003-3-12’)给时间加一周
datediff(标记,开始时间,结束时间)
datediff(day,’2014-3-2’,’2014-4-3’)后面的日期减去前边的日期,返回天数
datename(标记,时间)
datename(weekday,Birthday)计算Birthday是星期几
detepart(标记,时间)返回日期的一部分
cast(expression as date_type)
convert(data_type,expersion)
expersion为待进行类型转换的表达式,type为转换的目标类型
select Name, (case name when 'Tom' then 'GoodBoy' when 'Lily' then 'GoodGirl' when 'Sam' then 'BadGirl' else 'Normal' end)as isgood from Person select Name, Weight, (case when Weight<40 then 'thin' when Weight>50 then 'fat' else 'ok' end)as isnormal from Person