常用的一些SQL语句整理,也许有你想要的。

本篇文章是对一些常用的sql语句进行了总结与分析,需要的朋友参考下,也许会有你需要的。

1.SQL行列转换

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果): 
姓名 语文 数学 物理 
---- ---- ---- ----
李四 74 84 94
张三 74 83 93

sql语句为:

select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名

2.SQL分页

--分页方案一:(利用Not In和SELECT TOP分页) 
语句形式: 
SELECT TOP 10 * FROM TestTable
WHERE (ID NOT IN(SELECT TOP 20 id FROM TestTable ORDER BY id)) 
ORDER BY ID 


SELECT TOP 页大小 * FROM TestTable 
WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) 
ORDER BY ID 

------------------------------------- 

--分页方案二:(利用ID大于多少和SELECT TOP分页) 
语句形式: 
SELECT TOP 10 * FROM TestTable 
WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 20 id FROM TestTable ORDER BY id) AS T)) 
ORDER BY ID 


SELECT TOP 页大小 * FROM TestTable 
WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) 
ORDER BY ID 

------------------------------------- 

--分页方案三:(利用SqlServer2005中的新特性ROW_NUMBER进行分页)

Select * FROM (
  select ROW_NUMBER()Over(order by id desc) as rowId,* from TestTable
) as mytable
where rowId between 21 and 40

大家根据自己的需要选择对应的sql语句。

提示:方案三必须为sqlserver2005以上版本才可使用。

3.SQL查询结果合并

使用UNION 和UNION ALL。UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一个符合条件的资料都列出来,无论资料值有无重复。

--合并重复行
select * from A
 union
select * from B

--不合并重复行
select * from A
 union all
select * from B

提示:两个表查询的结果相同,才能进行合并

4.SQL随机排序

使用ORDER BY NEWID()

SELECT * FROM TestTable ORDER BY NEWID()

5.其他

  欢迎各位补充~

  如果有不对的地方还请指出,如果你觉得这个整理对你有所帮助,就点下推荐,谢谢。

  

posted @ 2013-08-12 15:54  LineZero  阅读(1000)  评论(0编辑  收藏  举报