SQL中rownum的使用

合集下载

sql 行数限制写法 -回复

sql 行数限制写法 -回复

sql 行数限制写法-回复SQL行数限制写法在SQL中,经常会遇到需要限制返回结果的行数的情况,这可能是由于性能方面的考虑,或者仅仅是为了方便查看数据。

无论出于何种原因,限制返回结果的行数是一个常见的需求。

本文将一步一步回答关于SQL行数限制写法的问题。

1. SQL中如何限制返回结果的行数?在SQL中,我们可以使用LIMIT子句来实现结果行数的限制。

LIMIT子句的一般语法为:SELECT column1, column2, ...FROM table_nameLIMIT number;这里的number参数指定了要限制返回的行数。

2. 如何使用LIMIT子句限制返回结果的行数?LIMIT子句可以与SELECT语句一起使用,例如:SELECT *FROM employeesLIMIT 10;这个例子中,我们使用LIMIT子句限制了返回的结果行数为10行。

这意味着返回结果将仅包含10行,而不是表中的所有行。

3. 是否可以指定从第几行开始返回结果?是的,LIMIT子句也提供了指定开始行数的选项。

例如,我们可以使用以下语法来指定从第11行开始返回结果:SELECT *FROM employeesLIMIT 10, 10;在这个例子中,我们指定了LIMIT子句的两个参数。

第一个参数10表示要跳过的行数,第二个参数10表示要返回的行数。

这意味着我们将从第11行开始,返回10行结果。

4. 如何将返回结果的行数限制为一部分?有时候,我们可能希望只返回结果的一小部分,而不是从数据表的开头开始。

为了实现这个目标,我们可以使用OFFSET子句。

OFFSET子句通常与LIMIT子句一起使用。

下面是一个例子:SELECT *FROM employeesLIMIT 5 OFFSET 10;在这个例子中,我们使用LIMIT子句将返回结果的行数限制为5行,并使用OFFSET子句从第11行开始返回结果。

这意味着我们将跳过前10行,返回从第11行开始的5行结果。

oracle 分页sql写法

oracle 分页sql写法

一、概述在进行数据库查询时,经常会遇到需要分页展示数据的情况。

而在Oracle数据库中,需要用到分页查询的SQL语句。

本文将就Oracle 中的分页SQL写法进行详细介绍。

二、基本分页SQL语句在Oracle数据库中,可以使用ROWNUM来实现分页查询。

以下是基本的分页SQL语句示例:```sqlSELECT * FROM (SELECT t.*, ROWNUM rnFROM (SELECT * FROM your_table ORDER BY order_column) t WHERE ROWNUM <= pageSize * pageNum)WHERE rn > pageSize * (pageNum - 1)```其中,your_table是要查询的表名,order_column是用来排序的字段,pageSize是每页展示的数据条数,pageNum是要查询的页数。

三、分页SQL写法解析1. 内部查询和外部查询分页SQL语句中,有一个内部查询和一个外部查询。

内部查询用来获取排序后的数据和每行数据对应的行号,外部查询用来根据行号来筛选需要的数据并展示。

2. 内部查询内部查询中使用了ROWNUM来标记行号,并通过ORDER BY语句来对数据进行排序。

内部查询的结果会被外部查询筛选。

3. 外部查询外部查询使用了WHERE语句来筛选出需要展示的数据,并且通过pageSize和pageNum来计算需要查询的数据范围。

四、使用样例假设有一个名为employee的表,包含字段id、name、age,现需要从该表中查询第2页的数据,每页展示10条数据,并按id字段进行排序。

则对应的分页SQL语句为:```sqlSELECT * FROM (SELECT t.*, ROWNUM rnFROM (SELECT id, name, age FROM employee ORDER BY id) t WHERE ROWNUM <= 10 * 2)WHERE rn > 10 * (2 - 1)```这条SQL语句将返回employee表中第11-20条数据,并按id字段排序。

Sql四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

Sql四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

Sql四⼤排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介排名函数是Sql Server2005新增的功能,下⾯简单介绍⼀下他们各⾃的⽤法和区别。

我们新建⼀张Order表并添加⼀些初始数据⽅便我们查看效果。

CREATE TABLE [dbo].[Order]([ID] [int] IDENTITY(1,1) NOT NULL,[UserId] [int] NOT NULL,[TotalPrice] [int] NOT NULL,[SubTime] [datetime] NOT NULL,CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]GOSET IDENTITY_INSERT [dbo].[Order] ONGOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (1, 1, 100, CAST(0x0000A419011D32AF AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (2, 2, 500, CAST(0x0000A419011D40BA AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (3, 3, 300, CAST(0x0000A419011D4641 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (4, 2, 1000, CAST(0x0000A419011D4B72 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (5, 1, 520, CAST(0x0000A419011D50F3 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (6, 2, 2000, CAST(0x0000A419011E50C9 AS DateTime))GOSET IDENTITY_INSERT [dbo].[Order] OFFGOALTER TABLE [dbo].[Order] ADD CONSTRAINT [DF_Order_SubTime] DEFAULT (getdate()) FOR [SubTime]GO 附上表结构和初始数据图:⼀、ROW_NUMBER row_number的⽤途的⾮常⼴泛,排序最好⽤他,⼀般可以⽤来实现web程序的分页,他会为查询出来的每⼀⾏记录⽣成⼀个序号,依次排序且不会重复,注意使⽤row_number函数时必须要⽤over⼦句选择对某⼀列进⾏排序才能⽣成序号。

plsql分页查询语句

plsql分页查询语句

plsql分页查询语句PL/SQL是Oracle数据库的编程语言,可以用于编写存储过程、触发器和函数等数据库对象。

在PL/SQL中,可以使用分页查询语句来实现对大量数据的分页显示,提高查询效率和用户体验。

下面列举了10个符合题目要求的PL/SQL分页查询语句。

1. 使用ROWNUM和BETWEEN关键字实现分页查询:```plsqlDECLAREv_start NUMBER := 1;v_end NUMBER := 10;BEGINSELECT *FROM (SELECT t.*, ROWNUM rFROM (SELECT * FROM table_name ORDER BY column_name) tWHERE ROWNUM <= v_end)WHERE r >= v_start;END;```2. 使用游标和FOR循环实现分页查询:```plsqlDECLARECURSOR c IS SELECT * FROM table_name ORDER BY column_name;v_start NUMBER := 1;v_end NUMBER := 10;BEGINFOR i IN v_start..v_end LOOPFETCH c INTO var1, var2, ...;EXIT WHEN c%NOTFOUND;-- 处理每一行数据END LOOP;CLOSE c;END;```3. 使用LIMIT和OFFSET子句实现分页查询:```plsqlSELECT *FROM table_nameORDER BY column_nameLIMIT 10 OFFSET 0;```4. 使用ROW_NUMBER()函数和子查询实现分页查询:```plsqlSELECT *FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY column_name) rnFROM table_name t)WHERE rn BETWEEN 1 AND 10;```5. 使用FETCH FIRST和OFFSET子句实现分页查询:```plsqlSELECT *FROM table_nameORDER BY column_nameOFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY;```6. 使用嵌套子查询和ROWNUM实现分页查询:```plsqlSELECT *FROM (SELECT t.*, ROWNUM rFROM (SELECT * FROM table_name ORDER BY column_name) tWHERE ROWNUM <= 10)WHERE r >= 1;```7. 使用游标和FETCH子句实现分页查询:```plsqlDECLARECURSOR c IS SELECT * FROM table_name ORDER BY column_name;v_start NUMBER := 1;v_end NUMBER := 10;BEGINOPEN c;FETCH c BULK COLLECT INTO var1, var2, ... LIMIT v_end;CLOSE c;FOR i IN v_start..v_end LOOP-- 处理每一行数据END LOOP;END;```8. 使用ROW_NUMBER()函数和嵌套查询实现分页查询:```plsqlSELECT *FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY column_name) rnFROM (SELECT * FROM table_name WHERE rownum <= 10) t)WHERE rn >= 1;```9. 使用游标和WHILE循环实现分页查询:```plsqlDECLARECURSOR c IS SELECT * FROM table_name ORDER BY column_name;v_start NUMBER := 1;v_end NUMBER := 10;v_count NUMBER := 0;BEGINOPEN c;LOOPFETCH c INTO var1, var2, ...;EXIT WHEN c%NOTFOUND OR v_count >= v_end;IF v_count >= v_start THEN-- 处理每一行数据END IF;v_count := v_count + 1;END LOOP;CLOSE c;END;```10. 使用游标和LIMIT子句实现分页查询:```plsqlDECLARECURSOR c IS SELECT * FROM table_name ORDER BY column_name LIMIT 10;BEGINOPEN c;FOR i IN c LOOP-- 处理每一行数据END LOOP;CLOSE c;END;```以上是10个符合题目要求的PL/SQL分页查询语句,可以根据实际需求选择合适的方式来实现分页查询功能。

rownum函数

rownum函数

rownum函数rownum函数是Oracle数据库中的一种序列函数,它的功能是将分配给查询行的唯一的序列号存储在rownum列中,rownum列的值是一个不可以被更新的数字序列,从1开始,依次递增,只能由rownum 函数生成,用户不可以自己设定这个值。

rownum 使用方法rownum函数可以用于分页查询,使用rownum函数可以快速查询到指定范围的数据,比如可以查询第11至20条数据:SELECT * FROM (SELECTROWNUM AS RN,ID,NAMEFROM TABLE1ORDER BY ID) WHERE RN BETWEEN 11 AND 20 ;另外可以使用rownum函数查询TOP N的记录,比如查询前5条记录:SELECT *FROM (SELECT ROWNUM AS RN, ID, NAMEFROM TABLE1ORDER BY ID)WHERE RN <= 5 ;rownum函数的优缺点rownum函数非常方便,可以快速查询指定范围的数据,而且返回数据不依赖于表中的数据,即使表中没有数据,rownum函数也可以正常运行并返回空结果集。

但是rownum函数也有一些缺点,比如在Oracle 8i之前,ROWNUM函数不支持子查询,意思是ROWNUM函数只能应用在外层查询中,在子查询中使用显示不出正确的结果;另外,Oracle尽量避免使用ROWNUM函数,在某些情况下,使用ROWNUM函数会让性能变得很差,SQL执行变慢,所以在使用时应当谨慎,不要使用查询的性能变得很差。

rownum函数的注意事项尽管ROWNUM函数的使用方便,但也需要注意一些事项,比如rownum函数不能用在UPDATE和DELETE语句中,因为rownum函数一般用来对查询结果进行定位,而不是对表记录进行定位;另外,在where子句中不能直接使用rownum函数,比如:SELECT *FROM TABLE1WHERE ROWNUM <= 5 ;这个语句是不正确的,应该用:SELECT *FROM (SELECT ROWNUM AS RN, ID, NAMEFROM TABLE1ORDER BY ID)WHERE RN <= 5 ;总结rownum函数是Oracle数据库中一种序列函数,它的功能是将分配给查询行的一个不可以被更新的数字序列,从1开始,依次递增的数字存储在rownum列中。

sql语句rownum用法

sql语句rownum用法

sql语句rownum用法在SQL中,`ROWNUM`是Oracle数据库的一个伪列,用于按顺序给每一行赋予一个唯一的数字数值。

`ROWNUM`通常用于查询结果的限制和分页查询。

`ROWNUM`的使用方法如下:1. 基本语法:`SELECT * FROM table_name WHERE ROWNUM <= n;`- 上述语句用于查询表中的前n条记录。

2. 多重条件:`SELECT * FROM table_name WHEREcolumn_name = value AND ROWNUM <= n;`- 可以将`ROWNUM`与其他条件结合使用,来筛选满足特定条件的前n行。

3. 嵌套查询:`SELECT * FROM (SELECT * FROM table_name WHERE ROWNUM <= n) WHERE ROWNUM <= m;`- 使用子查询的方式来限制结果集中行的数量,先查询前n 行,再在结果集上查询前m行。

4. 指定排序:`SELECT * FROM (SELECT * FROM table_name ORDER BY column_name) WHERE ROWNUM <= n;`- 可以在内部查询中使用`ORDER BY`子句来指定排序方式,然后再使用`ROWNUM`限制行数。

5. 分页查询:`SELECT * FROM (SELECT ROWNUM rn, column_name FROM table_name WHERE ROWNUM <=end_row) WHERE rn >= start_row;`- 使用`ROWNUM`可以实现分页查询,其中`start_row`和`end_row`表示分页的起始行和结束行。

需要注意的是,`ROWNUM`是在查询结果返回之后才会分配的,所以在使用`ROWNUM`进行查询时,应该先查询满足条件的结果集,再应用`ROWNUM`进行限制。

SQL ROW_NUMBER() OVER函数的基本用法

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。

示例:xlh row_num1700 11500 21085 3710 4row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)实例:初始化数据create table employee (empid int ,deptid int ,salary decimal(10,2))insert into employee values(1,10,5500.00)insert into employee values(2,10,4500.00)insert into employee values(3,20,1900.00)insert into employee values(4,20,4800.00)insert into employee values(5,40,6500.00)insert into employee values(6,40,14500.00)insert into employee values(7,40,44500.00)insert into employee values(8,50,6500.00)insert into employee values(9,50,7500.00)数据显示为empid deptid salary----------- ----------- ---------------------------------------1 10 5500.002 10 4500.003 20 1900.004 20 4800.005 40 6500.006 40 14500.007 40 44500.008 50 6500.009 50 7500.00需求:根据部门分组,显示每个部门的工资等级预期结果:empid deptid salary rank----------- ----------- --------------------------------------- --------------------1 10 5500.00 12 10 4500.00 24 20 4800.00 13 20 1900.00 27 40 44500.00 16 40 14500.00 25 40 6500.00 39 50 7500.00 18 50 6500.00 2SQL脚本:SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。

mysql的rownum用法

mysql的rownum用法MySQL是一个广泛使用的关系型数据库管理系统,常常用于网站开发、数据分析以及其他应用程序中。

在MySQL中,有许多常用的功能和语法,其中之一就是rownum。

本文将详细介绍MySQL中rownum 的用法。

一、什么是rownum?在MySQL中,rownum是一个用于返回结果集中行号的函数。

rownum函数返回的是查询结果集中每一行的唯一标识符,这个标识符是一个整数,从1开始递增,直到结果集中的最后一行。

二、rownum的用法1.基本用法使用rownum函数的基本语法如下:SELECT rownum, column1, column2, …FROM table_nameWHERE condition;其中,rownum表示结果集中的行号,column1、column2、…表示要查询的列名,table_name表示要查询的表名,condition表示查询条件。

例如,假设有一个名为“students”的表,其中包含学生的姓名、年龄、性别等信息,我们可以使用以下语句查询该表的所有记录,并返回每条记录的行号:SELECT rownum, name, age, genderFROM students;执行以上语句后,MySQL将返回以下结果:rownum | name | age | gender------ | ---- | --- | ------1 | Tom | 18 | Male2 | Lily | 20 | Female3 | Jack | 19 | Male4 | Lucy | 21 | Female从上面的结果可以看出,rownum函数返回的是一个从1开始递增的整数,它表示查询结果集中每一行的唯一标识符。

2.限制结果集在MySQL中,我们可以使用LIMIT语句限制查询结果集的数量。

例如,以下语句将返回students表中前3条记录:SELECT rownum, name, age, genderFROM studentsLIMIT 3;执行以上语句后,MySQL将返回以下结果:rownum | name | age | gender------ | ---- | --- | ------1 | Tom | 18 | Male2 | Lily | 20 | Female3 | Jack | 19 | Male从上面的结果可以看出,LIMIT语句限制了查询结果集的数量,只返回了前3条记录。

oracle 数据库查询前十条语句

一、引言在进行数据库查询时,查询前十条数据是一个常见的需求。

无论是在开发中调试程序,还是在生产环境下排查问题,查询前十条数据都是非常有用的。

本文将介绍如何使用Oracle数据库进行查询前十条数据的方法。

二、使用ROWNUM进行查询在Oracle数据库中,可以使用ROWNUM来实现查询前十条数据的功能。

ROWNUM是Oracle中的一个伪列,它表示返回的结果集中行的行号。

可以通过ROWNUM来筛选出前十条数据。

1. 查询语句示例```sqlSELECT * FROM table_name WHERE ROWNUM <= 10;```2. 示例解释上面的查询语句中,通过使用ROWNUM来筛选出行号小于等于10的数据,即返回前十条数据。

3. 注意事项在使用ROWNUM进行查询时,需要注意以下几点:- ROWNUM是在结果集返回之后才分配的行号,因此必须在WHERE 子句中使用它进行筛选,否则会得到不符合预期的结果。

- 当查询语句中包含ORDER BY子句时,需要先对数据进行排序,然后再使用ROWNUM进行筛选。

三、使用子查询进行查询除了使用ROWNUM进行查询外,还可以通过子查询的方式来实现查询前十条数据的功能。

1. 查询语句示例```sqlSELECT * FROM (SELECT * FROM table_name ORDER BY column_name) WHERE ROWNUM <= 10;```2. 示例解释上面的查询语句中,首先对数据进行排序,然后再使用ROWNUM进行筛选,返回排在前十位的数据。

3. 注意事项使用子查询进行查询前十条数据时,需要注意以下几点:- 子查询的结果集是一个临时表,因此可以在外层查询中对其进行进一步的筛选和排序。

- 在子查询中可以通过ORDER BY进行排序,然后在外层查询中使用ROWNUM进行筛选。

四、使用FETCH FIRST进行查询在Oracle 12c及以上的版本中,可以使用FETCH FIRST来实现查询前十条数据的功能。

SQLServer排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)

SQLServer排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)排名函数是Sql Server2005新增的功能,下⾯简单介绍⼀下他们各⾃的⽤法和区别。

我们新建⼀张Order表并添加⼀些初始数据⽅便我们查看效果。

CREATE TABLE[dbo].[Order]([ID][int]IDENTITY(1,1) NOT NULL,[UserId][int]NOT NULL,[TotalPrice][int]NOT NULL,[SubTime][datetime]NOT NULL,CONSTRAINT[PK_Order]PRIMARY KEY CLUSTERED([ID]ASC)WITH (PAD_INDEX =OFF, STATISTICS_NORECOMPUTE =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS =ON) ON[PRIMARY]) ON[PRIMARY]GOSET IDENTITY_INSERT[dbo].[Order]ONGOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (1, 1, 100, CAST(0x0000A419011D32AF AS DateTime))GOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (2, 2, 500, CAST(0x0000A419011D40BA AS DateTime))GOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (3, 3, 300, CAST(0x0000A419011D4641AS DateTime))GOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (4, 2, 1000, CAST(0x0000A419011D4B72AS DateTime))GOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (5, 1, 520, CAST(0x0000A419011D50F3AS DateTime))GOINSERT[dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (6, 2, 2000, CAST(0x0000A419011E50C9AS DateTime))GOSET IDENTITY_INSERT[dbo].[Order]OFFGOALTER TABLE[dbo].[Order]ADD CONSTRAINT[DF_Order_SubTime]DEFAULT (getdate()) FOR[SubTime]GO 附上表结构和初始数据图:⼀、ROW_NUMBER row_number的⽤途的⾮常⼴泛,排序最好⽤他,⼀般可以⽤来实现web程序的分页,他会为查询出来的每⼀⾏记录⽣成⼀个序号,依次排序且不会重复,注意使⽤row_number函数时必须要⽤over⼦句选择对某⼀列进⾏排序才能⽣成序号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ROWNUM:按特定条件查询前N条记录,它总是从1开始查询的。

只能使用=1 , <n , <=n , !=n符号(不能用>)。

--建表
create table student (ID char(6), name V ARCHAR2(10));
--添加测试记录
insert into student values('200001','张一');
insert into student values('200002','王二');
insert into student values('200003','李三');
insert into student values('200004','赵四');
第一:rownum :等于某值的查询条件
1:使用rownum=1可以查询。

:
2:rownum = n(n>1)查不到数据。

因为rownum都是从1开始
第二:rownum:大于某值的查询条件
使用rownum>2查不出记录,可使用子查询。

子查询中的rownum必须要有别名
select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
3 200003 李三
4 200004 赵四
select * from(select rownum,id,name from student)where rownum>2; 未选定行(无法查询)第三:rownum:小于某值的查询条件:例如:rownum<3是能得到两条记录的。

综上几种情况,可能有时候需要查询rownum在某区间的数据,必须使用子查询。

例如要查询rownum 在第二行到第三行之间的数据,包括第二行和第三行数据,那么我们可以写以下语句,先让它返回小于等于3的记录行,然后在主查询中判断新的rownum的别名列大于等于2的记录行。

select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
2 200002 王二
3200003 李三
第四:rownum和排序
select rownum ,id,name from student order by name;
ROWNUM ID NAME
3 200003 李三
2 200002 王二
1 200001 张一
4 200004 赵四
rownum不是按照name来生成序号。

是按照记录插入时的顺序排号,为了解决这个问题,必须使用子查询
select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
1 200003 李三
2 200002 王二
3 200001 张一
4 200004 赵四。

相关文档
最新文档