标签:
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
NULL | NULL |
NULL | 2 |
1 | 3 |
1 | 4 |
2 | 5 |
3 | 5 |
4 | |
5 |
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
关于派生表:
查询既订购迷你水泵又订购带有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
标签:
原文地址:http://www.cnblogs.com/wish198/p/4519537.html