Sql Server数据库基础知识
一:数据类型
1.整数型
bit : 0 或者 1
tinyint: 0-255类型数据
bigint: ( -9223372036854775808到9223372036854775807)的整型数据
int : 范围(-2147483647到2147483647)整型数据
smallint: 范围:(-32,768到32,767)
2.字符串类型
char: 1-8000 定长字符数据(当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度)(最多能存储8000个英文,4000个汉字)
varchar: 1-8000 变长字符数据(变长字符数据则不会以空格填充)(最多能存储8000个英文,4000个汉字)
text: 1-8000 可变长度的非Unicode数据(字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。)
nchar 1-4000 (则最多存储4000个字符,不论是英文还是汉字;)
nvarchar 1-4000 (则最多存储4000个字符,不论是英文还是汉字;)
ntext 1-4000 (则最多存储4000个字符,不论是英文还是汉字;)
3.时间类型
datetime (从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒)
smalldatetime (从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。)
4.浮点类型
decimal:
numeric :
【都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。】
float:(从-1.79^308到1.79^308之间的浮点数字数据)
real :(从-3.40^38到3.40^38之间的浮点数字数据)
二:常见的SQL语句
创建语句设置ID自增长并设置为主键
CREATE TABLE tb_name
(
ID INT IDENTITY(1,1) PRIMARY key,
NAME NVARCHAR(200)
)
更新语句
1.正常更新
UPDATE tb_name SET Name='01' WHERE ID=8
2. 替换更新(将name列里面的数据的01替换成02)
UPDATE dbo.tk_name set name = replace(name,'01','02')
3.联表更新
update test1
set test1.name=test2.name,test1.age=test2.age
from test1
inner join test2
on test1.id=test2.id
3:查询语句
select COUNT(1) FROM T_CDM_TestCoalInfo
两个字段结构一样的表联合查询
SELECT
t.ID,
t.value,
t.create_time,
t.remarks,
t.status
FROM (
select *,0 AS status FROM tk_user_account_in AS account_in
UNION all
SELECT *,1 AS status from tk_user_account_out AS account_out) AS t
4:查询分页语句
select top (select 10) * -- 这里注意一下,不能直接把变量放在这里,要用select
from (select row_number() over(order by ID) as rownumber,*
from T_CDM_TestCoalInfo) temp_row
where rownumber>(2-1)*10;
select *
from (select *,ROW_NUMBER() over(order by ID) i from T_CDM_TestCoalInfo) t
where i between 11 and 20
select *
from T_CDM_TestCoalInfo
order by ID
offset 10 rows fetch next 5 rows ONLY--跳过前面10条直接。往后直接取5条数据
【此方法适用于Sql Server 2008之后的版本(不含)】
性能优化
正常的查询
select num from a where num in(select num from b)
用下面的这条比较好
select num from a where exists(select 1 from b where num=a.num)
关于时间操作
--getdate 获取当前时间 select getdate() --dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月 select dateadd(MONTH,12,'2013-02-17 13:20:16') --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应的值) --datediff 两个时间的差 (后面-前面=返回值) select datediff(day,'2013-02-01','2013-02-18') --返回:17 (参数day可以改为 month,year等日期加相应的值) --datepart 获取日期的某个部分整数 select DATEPART(month, '2013-2-17') --返回 2 (参数month可以改为 day,year等日期加相应的值) --datename 获取指定部位的字符串 select datename(weekday, '2013-2-17') --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值) --day(), month(),year() 获取指定部位的字符串 select day('2013-2-15') --返回15
二:格式转换
select CONVERT(varchar, getdate(), 120 ) --返回 2013-02-17 13:37:54 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --返回 20130217133828 select CONVERT(varchar(12) , getdate(), 111 ) --返回 2013/02/17 select CONVERT(varchar(12) , getdate(), 112 ) --返回 20130217 select CONVERT(varchar(12) , getdate(), 102 ) --返回 2013.02.17 select CONVERT(varchar(12) , getdate(), 101 ) --返回 02/17/2013 select CONVERT(varchar(12) , getdate(), 103 ) --返回 17/02/2013 select CONVERT(varchar(12) , getdate(), 104 ) --返回 17.02.2013 select CONVERT(varchar(12) , getdate(), 105 ) --返回 17-02-2013 select CONVERT(varchar(12) , getdate(), 106 ) --返回 17 02 2013 select CONVERT(varchar(12) , getdate(), 107 ) --返回 02 17, 2013 select CONVERT(varchar(12) , getdate(), 108 ) --返回 13:42:50 select CONVERT(varchar(12) , getdate(), 109 ) --返回 02 17 2013 select CONVERT(varchar(12) , getdate(), 110 ) --返回 02-17-2013 select CONVERT(varchar(12) , getdate(), 113 ) --返回 17 02 2013 1 select CONVERT(varchar(12) , getdate(), 114 ) --返回 13:42:24:743