MSSQL学习笔记
最近在看教程,重新学习SQL,突然发现基础太差,好多东西都不懂。原来只知道打开Manager啪啪的在那用,理论上的东西查好远。现在翻来看看,到是能理解不少。边看边记,可能有些语句都不太懂,只是想记下来,以后慢慢回味。
1.SQL<>SQLSERVER<>MSSQLSERVER
SQL指查询语言,SQLSERVER存在MSSQLSERVER和SybaseSQLSERVER的区别,MSSQLSERVER特指微软的SQLSERVER
2.char、vachar、nvchar之间区别
均为字符数据类型,当数据中含有中文字符时用nvchar;vchar表示长度可变,而char表示长度一旦确定即不可改变,长度不足时用空格补齐,而achar不会用空格去补充
3.主键外键
int uniqueidentifier(Guid,UUID)用select newid()获取,C#中调用Guid.NewId().Guid类型主键可设置默认值为NewId().会自动生成Guid
4.聚合函数:count max min avg sum等。聚合函数不可出现在where子句中。where count(*)>2//错误。解决方法是用having子句,having子句必须跟在group by子句后
5.通配符过滤:单字符匹配用like '_XXX' 多字符匹配like 'k%'
6.null不等于空,而是不知道内容是什么。null+2=null<>''+'2'='2'
7.Group by 列名;select 后面的字段必须在group by子句中,或者是聚合函数
select age,count(*) from Table group by age;
select age,name from table group by age;//name 不在group by 子句中
8.distinct取消重复是针对整行的数据,而不是某一字段的重复
9.union将两个查询结果合并到一起,两个查询语句的查询字段数目相同,对应的字段类型需相同(相容)。另外,union会对合并后的查询结果去除重复,如果仅想合并查询结果集则需在union后加all
10.函数
ABS()绝对值 CEILING()向上取整数 FLOOR()向下取整数 ROUND(float,int)四舍五入,舍入离自己半径最近的数
LEN()字符串长度 LOWER() UPPER() LTRIM() RTRIM() SUBSTRING(str,startpoint,len)
GETDATE() DATEADD(datepart,number,date)计算增加后的日期 DATEDIFF()计算日期差额
DATEPART()取出日期中特定部分(datapart:ss秒,mi分,hh小时,dd天,mm月,yy年)
CAST(expression as datatype) CONVERT(datatype,expression)
case expression when 2 then '' when 3 then '' end
11.索引,被经常使用去查询的字段建立索引,查询时按原来查询一样,方便查询。插入、删除、更新时都需要改变索引,降低速度。所以只对经常出现在where子句中的字段设索引
12.join语法(left join、right join、cross join) select from table1 as t1 join table2 as t2 on table1.col1=table2.col(表也可以起别名)
13.子查询。将一个查询结果供其他查询使用,用的时候将其视为普通的表一样。select子句作为一列的话,查询子句只能返回一行一列。
select 1 as col1,(select getdate()) as date//正确 select 1 as col1,(select getdate() as date,newid() as id)//错误
14.in(value1,value2,....) in里面也可用select子查询,但子查询需要返回单行多列
15.Row_NUMBER()函数(叫开窗函数,05以上版本提供),用于求行号介于某两个书之间的行.只能出现在select或order by子句
select * from
(
select row_number() over(order by col1 desc) as rownum,
col2,col3,... from table1
)as t1 where t1.rownum>=3 and t1.rownum<=5 将子查询作为一个表进行操作
16.实现idisposable接口的对象,使用完都需要dispose 最方便的用法是使用Using
17.insert into table output inserted.id values('' '' '') 返回新插入的一行的id(自动生成行号情况),此时在C#中可用command.executescalar()返回一行一列的数据
18.sql注入式漏洞攻击。1' or '1'='1 字符串拼接,解决方法是查询时使用参数化方式查询
版权声明:本文为博主原创文章,未经博主允许不得转载。