限制返回的行数
- 问题
你想限制查询中返回的行数。你不关心顺序,只要返回的行数是指定的(n)。 - 解决方案
使用数据库提供的内置函数来控制返回的行数。
DB2
在 DB2 中,使用 FETCH FIRST 子句。
select *
from emp fetch first 5 rows only
MySQL 和 PostgreSQL
在 MySQL 和 PostgreSQL 中,使用 LIMIT 来限制返回的行数。
select *
from emp limit 5
Oracle
在 Oracle 中,要限制返回的行数,可以在 WHERE 子句中对 ROWNUM 进行限制。
select *
from emp
where rownum <= 5
SQL Server
在 SQL Server 中,使用关键字 TOP 来限制返回的行数。
select top 5 *
from emp
从表中随机返回n行数据
- 问题
你想从表中随机返回 n 行数据。为此,你想修改下面的语句,使其返回 5 行数据,且每次
执行时返回的行都不同。
select ename, job
from emp
- 解决方案
使用 DBMS 提供的返回随机值的内置函数。在 ORDER BY 子句中,使用该内置函数以随机
的方式对行进行排序,然后使用上一节介绍的方法来限制返回的行数。
DB2
结合使用内置函数 RAND、ORDER BY 和 FETCH。
select ename,job
from emp
order by rand() fetch first 5 rows only
MySQL
结合使用内置函数 RAND、LIMIT 和 ORDER BY。
select ename,job
from emp
order by rand() limit 5
PostgreSQL
结合使用内置函数 RANDOM、LIMIT 和 ORDER BY。
检索记录 | 9
select ename,job
from emp
order by random() limit 5
Oracle
结合使用(内置包 DBMS_RANDOM 中的)内置函数 VALUE、ORDER BY 子句和内置函数 ROWNUM。
select *
from (
select ename, job
from emp
order by dbms_random.value()
)
where rownum <= 5
SQL Server
结合使用内置函数 NEWID、TOP 和 ORDER BY 来返回随机的结果集。
select top 5 ename,job
from emp
## 标题 order by newid()
**
将NULL转换为实际值
**
- 问题
有些列为 NULL,但你不想返回 NULL,而想返回非 NULL 值。 - 解决方案
使用函数 COALESCE 将 NULL 值替换为实际值。
select coalesce(comm,0)
from emp
- 讨论
函数 COALESCE 可以将一个或多个值作为参数,并返回参数列表中的第一个非 NULL 值。在
上述解决方案中,如果 COMM 不为 NULL,就返回它,否则就返回 0。
处理 NULL 值时,最好利用 DBMS 提供的内置功能。在很多情况下,有多个函数可以很好
地完成这项任务,但 COALESCE 在所有 DBMS 中都管用。另外,在所有 DBMS 中,都可以
使用 CASE 来完成这项任务。
select case
when comm is not null then comm
else 0
end
from emp
虽然可以使用 CASE 将 NULL 值转换为实际值,但使用 COALESCE 更容易且更简洁