一.Sqlserver一些基本命令
查询数据库是否存在:
if DB_ID("testDB")is not null;
检查表是否存在:
if OBJECT_ID(“textDB”,“U”) is not null ;其中U代表用户表
创建数据库:
create database+数据名
删除数据库:
二. 单表查询(1)分组--对于分组查询,select字句会有限制,需要查询字段要出现在group by 子句中,同时分组以后,可以对分组情况进行统计。
(2)查询条件不要使用计算列
查询条件带计算列走的是索引扫描,而where子句后面采用查找范围限制,则走的是索引查找。走索引查找的查询性能要高于走索引扫描(数据库不是很大的情况下)
(3)sqlserver中的null,null在数据库中表示不存在
NULL的运算规则:有null的任何运算都是null。
is [not] null: 只能用做条件判断表达式,是否是null?是 条件为true,不是 条件为false。
isnull():函数,如果第一个参数是null,则用第二个参数的值替换第一个参数的值作为函数的返回值。记住:第二个参数的类型必须和第一个兼容。
nullif():函数,如果两个参数值相等、有一个参数是null、或两个参数是null,函数返回值是null;否则返回第一个参数的值。
(4)top用法:意在取出表中满足条件的前多少位。
id可能不连续:select top 10 * from A where ID not in(select top 30 ID from A order by ID asc) order by ID asc
a.top与percent联合使用,percent表示所占的百分比:select top(20) percent* from A
b.with ties附加属性:with ties一般是和Top , order by相结合使用的,会查询出最后一条数据额外的返回值
SELECT TOP n WITH TIES * FROM A ORDER BY a DESC(如果按照order by 参数排序TOP n返回了前面n个记录,但是n+1…n+k条记录和排序后的第n条记录的参数值(order by 后面的参数)相同,则n+1、…、n+k也返回。n+1、…、n+k就是额外的返回值)
c.over开窗函数
其中over(),括号里面可以附加条件,基于什么进行汇总。不添加,则表示对所有的记录进行汇总。
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
over后的写法:
over(partition by deptno order by salary)
三.排名函数
(1)row_number,行号,一般与over联合使用
sql中的over函数和row_numbert()函数配合使用,可生成行号。可对某一列的值进行排序,对于相同值的数据行进行分组排序。
(2)rank ,排名,真正意义上的排名,
rank()是跳跃排序,有两个第二名时接下来就是第四名
(3)dense_rank,密集排名
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
(4)分组ntile。按某一条件进行分组。