IBM DB2

重用命令

连接到本地数据库名

db2 connect to <数据库名>

列出所有schema:

select schemaname from syscat.schemata

SQL

分页

DB2的分页同Oracle类似,都是通过rowid进行分页,如下:

-- 从第一条查到第一千条
select * from (
    select 字段列表,
           rownumber() over (order by 排序字段1, 排序字段2 ) as orowid
    from 表名
) as o where o.orowid >= 1 and o.orowid <= 1000;

去重

对于完全重复的记录,去重比较简单,直接使用distinct关键字即可:

select distinct 字段1,字段2,字段3 from  表名

除此之外,还可以使用group by:

select 字段1,字段2,字段3 from  表名 group by 字段1,字段2,字段3

如果不完全重复,则比较麻烦,比如如下数据:

李四  广东  23
张三  江苏  13
张三  江苏  29

我想找到每个不同地区的不同姓名,此时distinct和group by就不合适了,可以使用如下方式:

select 姓名,地区,年龄
from
(
    select
          字段1, 字段2, 字段3
         ,row_number()over(partition by 姓名,地区 order by 地区) as row
   from
         table1
)
where row=1

分页 + 去重

分页SQL和去重SQL如果要同时使用,则要写双重子查询:

select * from (
    select i.*,
           rownumber() over (order by 字段列表 ) as orowid
    from (
        select 字段列表
               rownumber() over (partition by 去重分组字段列表 order by 排序字段列表 ) as rowid
        from 表名
    ) as i where rowid = 1
) as o where o.orowid >= 1 and o.orowid <= 1000;

最后更新于