Sql的函数

newId() 获得guid;

  1. getDatatime() 获得当前时间;
  2. Row_number() 分页常用的函数。

    比top 好用的函数select  Row_Number() over (order by Fsalary Desc//按Fsalary进行排序) As rownum, Fnumber,Fname,FSalary,Fage From T_Employee

  3. distinct :消除重复的数据。distinct 消除完全重复的行,针对的是整行。
  4. Union:两个表的列要一样 ,两个表的两个类型要相容。Union会合并查询结果集,会将完全重复的数据合并为一条,不想合并时加一个All即:Union All。Union的速度快。
  5. Abs()求绝对值。
  6. Ceiling()舍入到最大整数。
  7. Floor()舍入到最小整数。
  8. Round()四舍五入。
  9. Len(0计算字符串的长度。
  10. Lower()小写。
  11. Updata()大写。
  12. ltrin()去掉左边的空格。
  13. Rtrin()去掉右边的空格。
  14. Ltrin(Rtrin())或者Rtrin(Ltrin())去掉左右的空格。
  15. subString(string ,start,Length)截取字符串,和C#一样。
  16. GetDate()获得当前日期
  17. DateAdd()计算增加后的日期参数为date,为待计算的日期;参数date为增量;参数DataPart为计量单位。例如:select DATEADD(DAY|Month|Year(任选一个),3,GETDATE())
  18. datediff(datepart,startdate,enddate)计算两个日期之间的差额。datepart为计量单位。
  19. datepart (datepart,date) 返回一个日期的特定部分
  20. Cast(expression As data_type)例如:cast('2008-08-26' as datetime)。
  21. Convert(data_type,expreession[表达式])。例如:convert (datetime,'2009-09-05')。
  22. Right()获得小数位,例如:Right(1235.123,3) 返回 123。
  23. IsNull(espression,value) 如果expression不为空则返回expression 否则返回value。例如:isnull(name,‘益民’),name为空则返回'益民'。
  24. case函数用法,第一种:case Score when 1 then ‘aa’  else data end  例如:select Fname {case Fleve1(字段名字) when 1 then '普通客户'  when 2 then ‘会员’  else ‘客户’  end}  as 客户类型  from   TCuaTomet;第二种:select  FName{case when fsalary<=200 then ‘ 低收入’else end} as
    endName例题:表中有ABC三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列选择B列否则选择C列
    答案:select(case when a>b then a else b end),(case when b >c then b else c end)from t
  25. adf
  26. sdf

datepart 可选值:
取值  别名    说明
year  yy,yyy  年份
quarter  qq.q 季度
dayofyear dy,y 当年度的第几天
day   dd,d  日
week  wk     ww
hour  hh    小时
minute  mi,n  分
second   ss,s   秒
millisecond  ms  毫秒

Sql中注意事项

  1. Sql中字段出现中文的,例如Name=‘N张三’。中文字符前面记得加'N'。有时候不加'N'可能会出现问题。
  2. 没有有出现在group by 中的列,不能出现在select语句后的列名列表中的。
  3. 聚合函数是不能出现在 where中,要用到聚合函数时就要使用having。如果有group by的话,having要出现在group by之后。
  4. having是对分组后信息的过滤 ,能用的列是和select中能用的列是一样的。 having无法代替where,where是对原始数据进行分组的。

 续1:

自动增长列,即使插入错误也会占一位数字。
让自动编号可以编辑:set Identity_insert TbName on,将on改为off即可关闭自动编号。
一条语句插入多条数据:insertinto tbName  select 值1,值,值,值,值 union select 值1,值,值,值,值 ,union可以去掉重复。union all 可以插入多条。
将表一备份到表二中(不存在):select * into 表二 from 表一 。此时表二中将创建并插入表一的数据。
修改列:alter table tName alter column colName 类型

向一个表中插入数据,数据源来自另一个表中
insert  into newTb(列名1,列名1,列名1)   select 列名1,列名1,列名1) from  表二 where --正常的sql语句

N前缀:N字符,在服务器上执行的大妈中显示的Unicode字符串常量必须以大写字母N为前缀。即使所引用的列已经定义为Unicode类型,也应该如此。如果不适用N为前缀,字符串将转换为数据库默认的编码,这可能导致乱码。

char和nchar  编码格式不同,nchar用的是Unicode编码。
varchar和nvarchar 都是可变的,差别也就是编码格式不同。
char(1000)和varchar(1000)同等数据条件下,char用的空间明显偏大,删除数据后记得要收缩数据库。

逻辑运算符优先级:not >and>or

delete    from TbName  自动增长还是使用后的。
 truncate table Tbname 删除表中数据,自动增长还是从1开始,只是表中数据是一次性删除的。Truncate table Tbname 比delete 删除表中数据速度快的多。Truncate 不触发delete触发器。
update TbName set colN=(case  when  列  then 修改后的值)

设计器中建立约束:
可通过设计器进行添加,在关系中添加。

手动建立约束:
手动删除一列:alter  table tabName drop column colName
手动增加一列:alter table tabName add  colName   nvarchar(1000)
修改一个列:alter table tabName alter column cloName varchar(200)
增加一个主键约束:alter table tabName add constraint pk_tbName_tbColName primary key (colId)
非空约束(其实就是修改列):alter table tbName alter column colName varchar(50) not null
增加一个唯一约束:alter table tbName add constraint Uq_tbName_colName unique(colName)
增加一个默认约束:alter table tbName add constraint Pf_tbName_colName default('value') for colName
检查约束,年龄大于0,小于150:alter  table tbName add constraint ck_tbNam_colName check(colName>=0 and colName<=150)
增加一个外键约束:alter table tbName add constraint FK_TbName_ColName foreign key(colId) references fTbNaame)
增加外键时,设置级联更新、级联删除:【ON Delete(NO ACTION|CASCADE(级联删除)|SET NULL|SET DEFALILT(设置默认值))】【ON uPDATE(NO ACTION|CASCADE|SET NULL|SET DEFALILT)】
删除原来的外键:alter tabel tbName drop constraint FK_TbName_ColName
一条语句删除多个约束,约束名,逗号隔开:alter tabel tbName drop constraint FK_TbName_ColName1,FK_TbName_ColName12,FK_TbName_ColNamel3
一条语句,可以给一列增加多条约束:alter table tbName add   constraint Pf_tbName_colName default('value')  for colName   constraint ck_tbNam_colName check   (colName>=0 and colName<=150)

列名改变的三种方法:fid as 学号,fid  学号,学号=fid

select  语文=100,数学=90:查看没有的列和没有的数据。是语文列值为100,数学列值为:90.
select *...,自定义的列=100 from tabel 自定义列为表中没有的列。

top后加percent ,按百分比取条数:select top 30 percent * from tabel order by id asc(--升序)
Distinct :去除重复  是对查询出的整个结果集进行数据重复处理的,而不是针对某一个列。

聚合函数是把多个函数聚合成一个。使用多个聚合函数时,可以使用子查询,聚合函数不对null进行处理。count(all|distict|表达式),count(1)表示永远不为空。

where fage >=20 and fage<=30 and fgender='男'  等价于:where fage between 20 and 30 and fgender='男'  --建议使用这个,这个可能已经优化过。

select * fromstudent where sClass=1 or sClassId=2 or sClassId=3 等价于 select * fromstudent where sClass in(1,2,3)
模糊查询

匹配的都是是字符,常用的是_、[]、^、%。
like '赵__'  等价  '赵%' and len(colName)=3
数据库中的转移符是用[]来表示。这个是除去关键字和空格。

自己定义查询的时候,注意同一列数据类型一致。例如把成绩中的null替换为'缺考',成句中的数据类型是int,查询时可以转换为nvarchar,转换的数据类型只存在于查询出的结果集中,表中的数据没有变化。关键语句如:isnull(cast(fmath as varchar(50)),'缺考')

集合是无序的,子表中的数据order by Id desc 此表不能作为数据源,但是前面加入To N。
having是对组的筛选。having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。where 中不能使用聚合函数,必须使用Having。
Having语句后能跟什么列,主要看富足后的结果集中包含什么列。

sql语句的执行顺序问题
1》 From 表
2》 Where条件
3》Group by 列
4》 Having筛选条件
5》Select 5-1>选择列,5.2>distinct,5.3>top
6》Order by列

类型转换函数
cast(expression As data_type)
convert(data_type,expression[,style])
例如:
select FldNumber,cast(right(sno,3) as integer) as 后三位的整数形式,cast(right(sno,3) as integer)+ 1 as 后三位加1,convert(integer,right(sno,3))/2 as 后三位除以2 from student 。
这里的类型转换并没有改变表中的数据类型,只是暂时改变了查询数据中的数据类型。对字符数字进行排序时,可以临时将字符型转换为数字进行排序。

联合结果集union
联合:将多个结果集合并成一个结果集。
聚合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定。(可以用来连接多个结果)
基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型形容。
union 可以一次性插入多条数据。例如:
insert into Score(student,english,math)
select 1,80,100,union
select 2,80,100,union
select 1,50,100,union
select 1,90,100,union
select 1,70,100
此处如果用union all 不会去除重复数据。

常见应用:底部汇总。例如:销售金额:20000

把现有表的数据插入到新表(表不能存在),为表备份
select * into newStudent from student (newStudent表在select查询的同时自动建立)。这种复制对于约束,不会复制过来。

insert into backupStudent select * from students(backupStudent表必须提前建好)

拷贝表结构:
select * from NewStudent form Mstudent where 1<>1--有些数据库的执行效率较低
--建议使用
select  top0  * from NewStudent form Mstudent

字符串函数中的参数可以使用列名。

续2:

getDate():获得当前日期时间。
DateAdd(datepart,number,date),计算增加以后的日期。
dateDiff(datepart,startdate,enddate):计算两个日期之间的差额。datepart为计量单位。
datePart(datePart,date):返回一个日期的特定部分。

windows身份验证:
string constr="Data Source=;initial Catalog=;Integrated Security=True";

SqlConnectionStringBuilder 帮助获取字符串。
只能打开一次,可以关闭多次。释放资源:connection.Dispose()。
con有一个事件:
statementCompleted事件,每条sql语句执行完毕后触发。多条语句同时执行,如何获取每条语句所影响的行数?实际返回值为每条语句所影响的行数和和。
reader.HasRows//判读reader中的服务器中是否有数据。
if(reader.HasRows)
{
while(reader.Read()){}
}
内部异常不用捕获,在最外层捕获。内部会把异常掩盖。

返回插入列的自动增列的Id的方法:
1--insert into TbName value(1,2,3);select @@identity
这个方法有点不准,因为@@identity都能用
2.insert into TbName output inserted.colId value(1,2,3);
执行插入语句返回刚刚生成的自动编号。
这里的output语句使用的是inserted、delete两个临时表。应用时使用 cmd.ExecuteScalar();

执行任何sql语句其实调用Command对象的ExecuteNonQuery()、ExecuteScalar()、ExecuteReader()都可以,只不过是执行时选对方法比较有意义。
返回自增数列时,可以使用ExecuteScalar();

ExecuteScalar返回第一行第一列,返回类型是object。
ExecuteScalar()方法内部也是调用ExecuteReader()实现的。

SqlServer 常用的更多相关文章

  1. ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数

    原文:ylb:SQLServer常用系统函数-字符串函数.配置函数.系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- ========== ...

  2. SqlServer常用语句

    首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨 No.1 关于查询时间区间是否重叠的sql语句 问题是这样:插入之前,想查询同User是否其 ...

  3. sqlserver常用知识点备忘录(持续更新)

    背景 一个项目的开发,离不开数据库的相关操作,表/视图设计,存储过程,触发器等等数据库对象的操作是非常频繁的.有时候,我们会查找系统中类似的代码,然后复制/粘贴进行再进行相应的修改.本文的目的在于归纳 ...

  4. SQLServer常用运维SQL整理

    今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞.连接分布.最耗CPU的TOP10 SQL.查询SQL并行度配置.查询SQL 重编译的原因等等 整理了一些常用的SQL 1 ...

  5. SQLServer常用运维SQL整理(转)

    转载地址:https://www.cnblogs.com/tianqing/p/11152799.html 今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞.连接分布.最 ...

  6. sqlserver常用日期、时间函数和格式

    Sql Server中常用的日期与时间函数1.  当前系统日期.时间    select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值  ...

  7. sqlserver常用全局变量

    @@SERVERNAME    : 返回运行SQL Server 2000本地服务器的名称. @@REMSERVER       : 返回登录记录中记载的远程SQL Server服务器的名称. @@C ...

  8. sqlserver常用数据类型(精炼版)

    一:系统数据类型 2.浮点数据类型 3.字符数据类型 4.日期和时间数据类型 5.文本和图形数据类型 6.货币数据类型 7.位数据类型 8.二进制数据类型 9.其他数据类型 二:自定义数据类型   数 ...

  9. SQLServer常用分页方式

    mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试. 0.原来的SQL的所有数据 下面 ...

随机推荐

  1. 行转列求和:不加 in 条件,sum的数据会不会准确?

    我的习惯写法,担心不加 in 条件 ,统计结果会包含其他的数据 SELECT ZWKMYE_KJND as 年度,ZWKMYE_KJQJ as 月份,ZWKMYE_DWBH as 单位, ' then ...

  2. oracle 配置 oem

    1.启动命令是[oracle@yoon ~]$ cd $ORACLE_HOME/bin [oracle@yoon ~]$ ./emctl start dbconsole 停止命令是[oracle@yo ...

  3. [Environment Build] Win10下Appach配置

    1. Apache下载,登录http://httpd.apache.org/download.cgi,选择Files for Microsoft Windows, 有以下几个选择, 我选择的是Apac ...

  4. html5 shiv

    使用html5标签吧!ie6.ie7.ie8不支持怎么办?它的原理是如此的简单:    1.document.createElement("ele");  // js虚拟创建一个元 ...

  5. Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entities

    Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entitie ...

  6. [原]Java修炼 之 基础篇(一)Java语言特性

    学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发.本篇博客开始就从近年来比较流行的Java开始为大家讲起. 背景 1995年 ...

  7. Protocol-RS-232/422/485标准

    引: 通常的微处理器都集成有1路或多路硬件UART通道,可以非常方便地实现串行通讯.在工业控制.电力控制.智能仪表等领域中,也常常使用简便易用的串行通讯方式作为数据交换的手段. 但是,在工业控制等环境 ...

  8. windows多线程编程(一)(转)

    源出处:http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022036.html CreateThread:Windows的API函数(SDK函 ...

  9. 《梦断代码》读书笔记第0篇——“软件时间”、“死定了”、“Agenda之魂“

    第0章  软件时间 在未读这本书前,刚看到名字觉得是本讲代码的书,后来老师说是一个个的故事,这引起了我的兴趣,于是我便速速开始了第0章的阅读,读完一遍大概能读懂在讲什么,可能由于是译过来的书,书里面一 ...

  10. 阿里云:linux 一键安装web环境

    参考地址:http://www.cnblogs.com/ada-zheng/p/3724957.html