特定记录的查找
1、SQL Server
使用关键字TOP,限制返回的行数TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
select top 5 * from 表名
2、MySQ
使用Limit
select * from 表名 limit 5
3、Oracle
在where字句中通过使用ROWNUM来限制行数
select * from 表名 where rownum<=5
查询A第11条到第15条数据
1、MySQL使用 limit m,n
select * from A limit 10,5;
或者select * from A limit 5 offset 10;
2、SQL Server使用top
select top 5 * from A where not in (select top 10 排序字段from 表名)
3、Oracle使用rownum
select * from (select 字段,rownum from 表名where rownum<=15)where rownum >= 10;
最佳选择:利用分析函数以上四种数据库都支持
select row_number() over(ORDER BY 字段 asc) as rownumber,* from 表名
这样查出来的表中就会多一列“rownumber”,从1开始递增。这就好办了,在外面嵌套一层就可以“为所欲为”了
开窗函数:over()将统计出来的数据分布到原表的每一行中结合聚合函数、排名函数使用
rank()/dense_rank()
rank()和dense_rank()可以将所有的都查找出来,rank可以将并列第一名的都查找出来;rank()和dense_rank()区别:rank()是跳跃排序,有两个第二名时接下来就是第四名。是连续排序,有两个第二名时仍然跟着第三名
查找语句中if~else的实现
1、
IF(expr1,expr2,expr3)
如果 expr1 是TRUE 则返回expr2; 否则返回值则为 expr3
例:select name, if ( sex = 1, ‘男’, ‘女’ ) as ‘性别’ from 表名
2、
IF …
BEGIN
…(代码块)
END
ELSE (注意这里没有ELSE IF,要实现只能在下面的块中用IF判断)
BEGIN
…(代码块)
END
3、
CASE sex
WHEN ‘1’ THEN ‘男’
ELSE ’女’(可省略)
END
等价于
CASE WHEN sex=1 THEN ‘男’
ELSE ‘女’
END
注意
(1)case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
(2)最后必须用end结尾