sql server 常用语法(二)

1查找值的平方

SELECT SQUARE(8)

64

2sql server的case when用法

CASE sex

         WHEN '1' THEN '男'

         WHEN '2' THEN '女'

ELSE '其他' END


CASE WHEN sex = '1' THEN '男'

         WHEN sex = '2' THEN '女'

ELSE '其他' END

3  sql server  标准差,平均数

标准差:

STDEV() as '标准差'

平均数:

avg() as '平均数'

4

INSERT INTO trade_calendar_t([trade_date],[is_week],[is_month],[is_season],[is_year])
(SELECT 	
CONVERT(varchar,[TradingDate],112)		
				,CASE IfWeekEnd
				WHEN '1' THEN '1'
				ELSE '0' END
      ,CASE IfMonthEnd
				WHEN '1' THEN '1'
				ELSE '0' END
      ,CASE IfQuarterEnd
				WHEN '1' THEN '1'
				ELSE '0' END
      ,CASE IfYearEnd
				WHEN '1' THEN '1'
				ELSE '0' END
  FROM [juyuan_DB].[dbo].[QT_TradingDayNew]
  where IfTradingDay = '1' and SecuMarket='83')

5 关于sqlserver  的cross join、inner join、full join用法详解

1交叉连接CROSS JOIN

如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;

2内连接INNER JOIN

内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。

3外连接OUTER JOIN

指定条件的内连接,仅仅返回符合连接条件的条目。外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。

左外连接LEFT [OUTER] JOIN

显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL

右外连接RIGHT [OUTER] JOIN

显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL

全外连接full [outer] join

显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集

6  SQLServer之Case用法          计算条件列表,并返回多个可能的结果表达式之一

case具有两种格式:

  • 简单case表达式,它通过将表达式与一组简单的表达式进行比较来确定结果
  • case搜索表达式,它通过计算一组布尔表达式来确定结果

when when_expression 
使用简单 case格式时要与 input_expression 进行比较的简单表达式 。 when_expression 是任何有效的表达式 。input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型 。

case 简单表达式的工作方式如下:将第一个表达式与每个 when 子句中的表达式进行比较,以确定它们是否等效。 如果这些表达式等效,将返回 then 子句中的表达式 

  • 仅用于等同性检查。

  • 按指定的顺序计算每个 when 子句的 input_expression = when_expression。

  • 返回首个 input_expression = when_expression 的计算结果为 true 的 result_expression 。

  • 如果 input_expression = when_expression 的计算结果均不为 true,则在指定了 else 子句的情况下,SQLServer数据库引擎将返回 else_result_expression;若没有指定 else 子句,则返回 null 值 。

case 搜索表达式:

  • 按指定顺序对每个 when 子句的 boolean_expression 进行计算 。

  • 返回首个 boolean_expression 的计算结果为 true 的 result_expression 。

  • 如果 boolean_expression 的计算结果均不为 true,则在指定了 else 子句的情况下,数据库引擎将返回 else_result_expression;若没有指定 else 子句,则返回 null 值 。

7  跨服务器导数据表 

exec sp_addlinkedserver   '192.168.1.80' , '' , 'SQLOLEDB', '192.168.1.80' 
exec sp_addlinkedsrvlogin  '192.168.1.80' , 'false' , null , 'yuyuandong' , 'iDS9tV1Y3JYS' 
select * into [perf_attr_stock].[dbo].t_stock_factor_juyuan_test from [192.168.1.80].[perf_attr_stock].[dbo].t_stock_factor_juyuan_test

8 查询前1000

SQL没有表前后行之分的,只有排序区别,可以按升序或者降序,查表的后1000行,等于把排序方法改一下,默认是desc,改成asc,语句: 
select top 1000 * from table order by 列 asc
用 DESC 表示按倒序排序(即:从大到小排序)
用 ACS 表示按正序排序(即:从小到大排序)

9 sql相关函数

AVG 函数返回数值列的平均值。NULL 值不包括在计算中                 SELECT AVG(column_name) FROM table_name    COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)       SELECT COUNT(column_name) FROM table_name  
FIRST() 函数返回指定的字段中第一个记录的值                       SELECT FIRST(column_name) FROM table_name 
LAST() 函数返回指定的字段中最后一个记录的值                      SELECT LAST(column_name) FROM table_name  
MAX 函数返回一列中的最大值。NULL 值不包括在计算中               SELECT MAX(column_name) FROM table_name
MIN 函数返回一列中的最小值。NULL 值不包括在计算中               SELECT MIN(column_name) FROM table_name
SUM 函数返回数值列的总数(总额)                               SELECT SUM(column_name) FROM table_name 
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组   SELECT column_name, aggregate_function(column_name)
FROM table_name WHERE column_name operator value GROUP BY column_name  
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value  
UCASE 函数把字段的值转换为大写                           SELECT UCASE(column_name) FROM table_name 
LCASE 函数把字段的值转换为小写                           SELECT LCASE(column_name) FROM table_name
MID 函数用于从文本字段中提取字符                         SELECT MID(column_name,start[,length]) FROM table_name
LEN 函数返回文本字段中值的长度                           SELECT LEN(column_name) FROM table_name
ROUND 函数用于把数值字段舍入为指定的小数位数              SELECT ROUND(column_name,decimals) FROM table_name
NOW 函数返回当前的日期和时间                             SELECT NOW() FROM table_name 
FORMAT 函数用于对字段的显示进行格式化                    SELECT FORMAT(column_name,format) FROM table_name

sql  server常用语法总结

变量declare

赋值操作

declare @name nvarchar(32)
set @name='小明'
select @name

2 LEAD和LAG函数

LEAD

语法:LEAD ( scalar_expression [ ,offset ] , [ default ] )     OVER ( [ partition_by_clause ] order_by_clause )

scalar_expression,要返回的值基于指定的偏移量。 这是一个返回单个(标量)值的任何类型的表达式。scalar_expression 不能为分析函数

offset默认值为1, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset 不能是负数值或分析函数。

default默认值为NULL, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset不能是负数值或分析函数
 

LAG

访问相同结果集的先前行中的数据,而不使用 SQL Server 2012 中的自联接。 LAG 以当前行之前的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与先前行中的值进行比较。

LEAD向后填值,LAG是往前求值

OVER(PARTITION BY)

1)  over后的写法:  over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数

over(partition by deptno)按照部门分区

over(partition by deptno order by salary)

2)  开窗的窗口范围:

over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。

over(order by salary rows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。

3)与over函数结合的几个函数介绍

row_number()over()、rank()over()和dense_rank()over()函数的使用

在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果;
select * from (select name,class,s,row_number()over(partition by class order by s desc) mm from t2)  where mm=1;

rank()和dense_rank()可以将所有的都查找出来:如上可以看到采用rank可以将并列第一名的都查找出来;
rank()和dense_rank()区别: rank()是跳跃排序,有两个第二名时接下来就是第四名;dense_rank()l是连续排序,有两个第二名时仍然跟着第三名

sum()over()的使用

select name,class,s, sum(s)over(partition by class order by s desc) mm from t2 --根据班级进行分数求和

first_value() over()和last_value() over()的使用  

按照范围来找出第一条记录类型和最后一条记录类型

 lag() over()函数用法(取出前n行数据)

 lead() over()函数用法(取出后N行数据)

 3  SQL中Truncate的用法

删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少。

当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

4 SQL中的连接可以分为内连接,外连接,以及交叉连接 

cross  join   交叉连接:返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积 

如果不带where条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积

out  join      外连接分为外左连接(left outer join)和外右连接(right outer join)

left  join      左连接取左边的表的全部,右边的表按条件,符合的显示,不符合则显示null

right join     右连接取右边的表的全部,左边的表按条件,符合的显示,不符合则显示null

inner join    内连接也称为等值连接,返回两张表都满足条件的部分

4  OBJECT_ID 函数

使用 OBJECT_ID 不能查询非架构范围内的对象(如 DDL 触发器)。对于在 sys.objects 目录视图中找不到的对象,需要通过查询适当的目录视图来获取该对象的标识号。

OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )

 object_name 要使用的对象。object_name 的数据类型为 varchar 或 nvarchar。如果 object_name 的数据类型为 varchar,则它将隐式转换为 nvarchar。object_type 架构范围的对象类型。object_type 的数据类型为 varchar 或 nvarchar。如果 object_type 的数据类型为 varchar,则它将隐式转换为 nvarchar。

发布了127 篇原创文章 · 获赞 31 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/lzz781699880/article/details/98614845