关于用到的SQL整理

SQL Server :

定义变量

declare @num int

set @num=1

select @num= count(*) from table

 

定义一个参数@num 为int类型

为变量赋值的两种方法

 

没有for循环但是有while 和 if

while (@num<5)
begin

set @num=@num+1
end

 

<提示> 字段名不要出现小数点 如 ‘PM2.5‘ 改为 ‘PM25‘

if @Pollutant_Name=‘PM2.5‘
begin
set @Pollutant_Name=‘PM25‘
end

 

关于默认的三中连接方式

table1

inner join  table2 on table1.id=table2.id

就是

from table1,table2 where table1.id=table2.id

左连接就是找出左表全部值,为NULL 也出现 其他同理

打印 @sql  语句

PRINT @SQL

执行 @sql 语句
EXEC(@SQL)

 

关于查询数据行变列

select a.PositionName,c.TimePoint,
max(case when Pollutant_Name=‘SO2‘ then ForecastValue end) as SO2,
max(case when Pollutant_Name=‘NO2‘ then ForecastValue end) as NO2,
max(case when Pollutant_Name=‘PM10‘ then ForecastValue end) as PM10,
max(case when Pollutant_Name=‘CO‘ then ForecastValue end) as CO,
max(case when Pollutant_Name=‘O3‘ then ForecastValue end) as O3,
max(case when Pollutant_Name=‘PM2.5‘ then ForecastValue end) as PM25

from  EC_Station a
inner join EC_AQI_Day_Forecast_Station_1 b on a.StationID = b.StationID
inner join EC_AQI_Hour_Forecast_Station_1 c on b.ID = c.Day_Forecast_ID
inner join EC_Pollutant_Info d on c.Pollutant_ID = d.Pollutant_ID
where b.ID=@Day_Forecast_ID  and c.TimePoint>(24*@Index_Day-24) and   c.TimePoint<=(24*@Index_Day)
group by a.PositionName,c.TimePoint

 

形式1:

case 字段名1 where ‘想要查询的字段名1的值‘ then 字段名2 end

形式2:

case when 字段名1= ‘想要查询的字段名1的值‘ then 字段名2 end

 

由于上面例子用到了group by 所有需要max聚合函数,因为只有一个值,所以max不会起到区最大值影响

 

exit和in

一句话:功能相近,如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in

 

in 与 =的区别
select name from student where name in (‘zhang‘,‘wang‘,‘li‘,‘zhao‘);

select name from student where name=‘zhang‘ or name=‘li‘ or name=‘wang‘ or name=‘zhao‘
的结果是相同的。

not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

注意包含null的值 与null比较都是会得到null

 

相关子查询与嵌套子查询

类编号  图书名         出版社               价格
--------------------------------------------------------
2      c#高级应用    圣通出版            23.00
2      Jsp开发应用   机械出版社          45.00
3      高等数学       济南出版社          25.00
3      疯狂英语       清华大学出版社     32.00

嵌套子查询
SElECT *
  FROM Readers
  WHERE 读者编号 IN
  (
    SELECT 读者编号
    FROM [Borrow History]
  )
  GO

 相关子查询:
相当于动态匹对表a
SElECT 图书名,出版社,类编号,价格
  FROM Books As a
  WHERE 价格 >
  (
    SELECT AVG(价格)
    FROM Books AS b
    WHERE a.类编号=b.类编号
  )
  GO
EXCEPT、INTERSECT用法

 

NULL NULL
NULL
 
 
A:(SELECT * FROM TableA) EXCEPT (SELECT * FROM TableB)
结果: 1

B:
SELECT * FROM TableA INTERSECT SELECT * FROM TableB
结果:2
   3
   4
   5

提个醒: CTE,递归查询,合并,应该单独列一个

http://blog.csdn.net/zhs954838550/article/details/8159417

局部临时表
create table #tbName(列信息);
表名前缀#
只在当前会话中有效,不能跨连接访问
作用域范围类似C#
如果直接在连接会话中创建的,则当前连接断开后删除,如果是在存储过程中创建的则当前存储过程执行完毕后删除
全局临时表
create table ##tbName(列信息);
表名前缀##
多个会话可共享全局临时表
当创建全局临时表的会话断开,并且没有用户正在访问全局临时表时删除
 
表变量:
declare @varT1 table(col1 int,col2 char(2));//存储更小量的数据,比临时表有更多的限制。
临时数据都存储在tempdb,当服务重新启动的时候,会重建tempdb.
临时表的应用:在对大数据量的表做复杂子查询的时候为了提高执行效率,降低内存消耗可以使用临时表。
 
视图
 
视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上
视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同:数据表是实际存储记录的地方,然而视图并不保存任何记录。
相同的数据表,根据不同用户的不同需求,可以创建不同的视图(不同的查询语句)
视图的目的是方便查询,所以一般情况下不能对视图进行增删改
优点:
筛选表中的行\降低数据库的复杂程度
防止未经许可的用户访问敏感数据

 

 

关于派生表:

查询既订购迷你水泵又订购带有AWC标志棒球帽的顾客(SQL SERVER2008高级设计P40) 

因为不能where p.name=a and p.name=b

实例:

select distinct pp.FirstName,pp.LastName

From Person.Person as pp

join(select sc.PersonID from Sales.Customer sc

join sales.salesOrderHeader as soh

on sc.CustomerID=soh.CustomerID

join Sales.SalesOrderDetail as sod

onsoh.SalesOrderID=sod.SalesOrderID

join Production.Product as p

on sod.ProductID=p.ProductID

where p.Name=‘Minipump‘)pumps

on pp.BusinessEntityID=pumps.PersonID

join(select sc.PersonID from Sales.Customer sc

join sales.salesOrderHeader as soh

on sc.CustomerID=soh.CustomerID

join Sales.SalesOrderDetail as sod

onsoh.SalesOrderID=sod.SalesOrderID

join Production.Product as p

on sod.ProductID=p.ProductID

where p.Name=‘AWC Logo Cap‘)caps

on pp.BusinessEntityID=caps.PersonID

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。