SqlServer 常用
Sql的函数
newId() 获得guid;
- getDatatime() 获得当前时间;
- Row_number() 分页常用的函数。
比top 好用的函数select Row_Number() over (order by Fsalary Desc//按Fsalary进行排序) As rownum, Fnumber,Fname,FSalary,Fage From T_Employee
- distinct :消除重复的数据。distinct 消除完全重复的行,针对的是整行。
- Union:两个表的列要一样 ,两个表的两个类型要相容。Union会合并查询结果集,会将完全重复的数据合并为一条,不想合并时加一个All即:Union All。Union的速度快。
- Abs()求绝对值。
- Ceiling()舍入到最大整数。
- Floor()舍入到最小整数。
- Round()四舍五入。
- Len(0计算字符串的长度。
- Lower()小写。
- Updata()大写。
- ltrin()去掉左边的空格。
- Rtrin()去掉右边的空格。
- Ltrin(Rtrin())或者Rtrin(Ltrin())去掉左右的空格。
- subString(string ,start,Length)截取字符串,和C#一样。
- GetDate()获得当前日期
- DateAdd()计算增加后的日期参数为date,为待计算的日期;参数date为增量;参数DataPart为计量单位。例如:select DATEADD(DAY|Month|Year(任选一个),3,GETDATE())
- datediff(datepart,startdate,enddate)计算两个日期之间的差额。datepart为计量单位。
- datepart (datepart,date) 返回一个日期的特定部分
- Cast(expression As data_type)例如:cast('2008-08-26' as datetime)。
- Convert(data_type,expreession[表达式])。例如:convert (datetime,'2009-09-05')。
- Right()获得小数位,例如:Right(1235.123,3) 返回 123。
- IsNull(espression,value) 如果expression不为空则返回expression 否则返回value。例如:isnull(name,‘益民’),name为空则返回'益民'。
- 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 - adf
- 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中注意事项
- Sql中字段出现中文的,例如Name=‘N张三’。中文字符前面记得加'N'。有时候不加'N'可能会出现问题。
- 没有有出现在group by 中的列,不能出现在select语句后的列名列表中的。
- 聚合函数是不能出现在 where中,要用到聚合函数时就要使用having。如果有group by的话,having要出现在group by之后。
- 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 常用的更多相关文章
- ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数
原文:ylb:SQLServer常用系统函数-字符串函数.配置函数.系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- ========== ...
- SqlServer常用语句
首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨 No.1 关于查询时间区间是否重叠的sql语句 问题是这样:插入之前,想查询同User是否其 ...
- sqlserver常用知识点备忘录(持续更新)
背景 一个项目的开发,离不开数据库的相关操作,表/视图设计,存储过程,触发器等等数据库对象的操作是非常频繁的.有时候,我们会查找系统中类似的代码,然后复制/粘贴进行再进行相应的修改.本文的目的在于归纳 ...
- SQLServer常用运维SQL整理
今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞.连接分布.最耗CPU的TOP10 SQL.查询SQL并行度配置.查询SQL 重编译的原因等等 整理了一些常用的SQL 1 ...
- SQLServer常用运维SQL整理(转)
转载地址:https://www.cnblogs.com/tianqing/p/11152799.html 今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞.连接分布.最 ...
- sqlserver常用日期、时间函数和格式
Sql Server中常用的日期与时间函数1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 ...
- sqlserver常用全局变量
@@SERVERNAME : 返回运行SQL Server 2000本地服务器的名称. @@REMSERVER : 返回登录记录中记载的远程SQL Server服务器的名称. @@C ...
- sqlserver常用数据类型(精炼版)
一:系统数据类型 2.浮点数据类型 3.字符数据类型 4.日期和时间数据类型 5.文本和图形数据类型 6.货币数据类型 7.位数据类型 8.二进制数据类型 9.其他数据类型 二:自定义数据类型 数 ...
- SQLServer常用分页方式
mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试. 0.原来的SQL的所有数据 下面 ...
随机推荐
- 行转列求和:不加 in 条件,sum的数据会不会准确?
我的习惯写法,担心不加 in 条件 ,统计结果会包含其他的数据 SELECT ZWKMYE_KJND as 年度,ZWKMYE_KJQJ as 月份,ZWKMYE_DWBH as 单位, ' then ...
- oracle 配置 oem
1.启动命令是[oracle@yoon ~]$ cd $ORACLE_HOME/bin [oracle@yoon ~]$ ./emctl start dbconsole 停止命令是[oracle@yo ...
- [Environment Build] Win10下Appach配置
1. Apache下载,登录http://httpd.apache.org/download.cgi,选择Files for Microsoft Windows, 有以下几个选择, 我选择的是Apac ...
- html5 shiv
使用html5标签吧!ie6.ie7.ie8不支持怎么办?它的原理是如此的简单: 1.document.createElement("ele"); // js虚拟创建一个元 ...
- Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entities
Data Developer Center > Learn > Entity Framework > Get Started > Loading Related Entitie ...
- [原]Java修炼 之 基础篇(一)Java语言特性
学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发.本篇博客开始就从近年来比较流行的Java开始为大家讲起. 背景 1995年 ...
- Protocol-RS-232/422/485标准
引: 通常的微处理器都集成有1路或多路硬件UART通道,可以非常方便地实现串行通讯.在工业控制.电力控制.智能仪表等领域中,也常常使用简便易用的串行通讯方式作为数据交换的手段. 但是,在工业控制等环境 ...
- windows多线程编程(一)(转)
源出处:http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022036.html CreateThread:Windows的API函数(SDK函 ...
- 《梦断代码》读书笔记第0篇——“软件时间”、“死定了”、“Agenda之魂“
第0章 软件时间 在未读这本书前,刚看到名字觉得是本讲代码的书,后来老师说是一个个的故事,这引起了我的兴趣,于是我便速速开始了第0章的阅读,读完一遍大概能读懂在讲什么,可能由于是译过来的书,书里面一 ...
- 阿里云:linux 一键安装web环境
参考地址:http://www.cnblogs.com/ada-zheng/p/3724957.html