sql 限制返回的行数、从表中随机返回n行数据、将NULL转换为实际值

限制返回的行数

  1. 问题
    你想限制查询中返回的行数。你不关心顺序,只要返回的行数是指定的(n)。
  2. 解决方案
    使用数据库提供的内置函数来控制返回的行数。
    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行数据

  1. 问题
    你想从表中随机返回 n 行数据。为此,你想修改下面的语句,使其返回 5 行数据,且每次
    执行时返回的行都不同。
select ename, job
 from emp
  1. 解决方案
    使用 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转换为实际值

**

  1. 问题
    有些列为 NULL,但你不想返回 NULL,而想返回非 NULL 值。
  2. 解决方案
    使用函数 COALESCE 将 NULL 值替换为实际值。
 select coalesce(comm,0)
 from emp
  1. 讨论
    函数 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 更容易且更简洁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值