oracle怎么用top,oracle怎么用正则表达式

在oracle中是否有类似“select top n”的选择指定件数的方法?

没有的。

10年积累的成都网站建设、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有崇义免费网站建设让你可以放心的选择与我们合作。

MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的。

Oracle 语法

SELECT column_name(s)

FROM table_name

WHERE ROWNUM = number

例子

SELECT *

FROM Persons

WHERE ROWNUM = 5

扩展资料

SELECT TOP 子句用于规定要返回的记录的数目。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

注释:并非所有的数据库系统都支持 SELECT TOP 子句。

select top与limit的区别:

这是来源于不同数据库里面的使用方式:

1、在access/mssqlserver里面支持的sql用法selecttop;

2、2,在mysql/oracle里面支持的sql用法为select...limit;

就使用而言两者没有什么区别,只是应用平台不一样而已。

oracle 函数中有top命令吗

oracle 函数中没有top命令。

Oracle8i可以将一个查询到的数据集作为另外一个查询的表名,于是可以解决Top N的一条SQL查询,例如,从tab表中取出f字段值最大的10条记录:

SELECT * FROM (SELECT * FROM tab ORDER BY f DESC) WHERE ROWNUM = 10。

oracle简介:

甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。

如何在Oracle中实现SELECT TOP N,选取前几条记录

rownum:对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。 example: select rownum as 行号,first_name as 员工姓名 from hr.employees select rownum as 行号,first_name as 员工姓名 from hr.employees order by 员工姓名; 序号不会重新排的,(所以需要嵌套一层子查询来抽取排序好的数据)原因下面解释。 例1:查询各个部门的MANAGER(经理)中谁的工资最低 hrselect * from(select t1.manager_id as 员工编号,t2.first_name as 员工姓名,t2.salary as 工资 from hr.departments t1 join hr.employees t2 on t1.manager_id=t2.employee_id order by t2.salary) where rownum=1; *******************************************************************************where rownum=1;表示取第一行, rownum=1也是但 rownum=2、2、=2什么的是不行的只能用=、、=1,而且排序好后得用一个子查询原因:1.因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。查到就加上了,所以排序就是原先的rownum值了。2.rownum j就是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。3.他是不存在的,只有在每次select后才会重新分配,所以加个子查询重新分配rownum*******************************************************************************例2:查询工资最高的5个人的信息,按工资降序排列:hrselect * from(select t2.department_name as 部门名称,t1.first_name as 员工姓名,t1.salary as 工资from employees t1left outer join departments t2 on t2.department_id=t1.department_idorder by t1.salary desc)where rownum=5******************************************************************************* 但是如果想要提取出第m行的数据或者中间几条数据该怎么办?rownum=m是不行的这里可以再用嵌套的子查询例3:查询工资从高到低排名第2-5个人的信息 hr. select 部门名称,员工姓名,工资 from --第一层 ( select rownum as no,部门名称,员工姓名,工资 from --第二层,这里的rownum得有别名,不然外层和其本身的重名(select t2.department_name as 部门名称, -- 第三层 t1.first_name as 员工姓名,t1.salary as 工资 from employees t1 left outer join departments t2 on t2.department_id=t1.department_id order by t1.salary desc)where rownum=5 --取出前五行 )

Oracle实现 SELECT TOP N哪种方法最好用?

1.在ORACLE中实现SELECT TOP N

由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。

简单地说,实现方法如下所示:

SELECT 列名1...列名n FROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM = N(抽出记录数)

ORDER BY ROWNUM ASC

下面举个例子简单说明一下。

顾客表customer(id,name)有如下数据:

ID NAME

01 first

02 Second

03 third

04 forth

05 fifth

06 sixth

07 seventh

08 eighth

09 ninth

10 tenth

11 last

则按NAME的字母顺抽出前三个顾客的SQL语句如下所示:

SELECT * FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM = 3

ORDER BY ROWNUM ASC

输出结果为:

ID NAME

08 eighth

05 fifth

01 first

2.在TOP N纪录中抽出第M(M = N)条记录

在得到了TOP N的数据之后,为了抽出这N条记录中的第M条记录,我们可以考虑从ROWNUM着手。我们知道,ROWNUM是记录表中数据编号的一个隐藏子段,所以可以在得到TOP N条记录的时候同时抽出记录的ROWNUM,然后再从这N条记录中抽取记录编号为M的记录,即使我们希望得到的结果。

从上面的分析可以很容易得到下面的SQL语句。

SELECT 列名1...列名n FROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM = N(抽出记录数)

ORDER BY ROWNUM ASC

)

WHERE RECNO = M(M = N)

同样以上表的数据为基础,那么得到以NAME的字母顺排序的第二个顾客的信息的SQL语句应该这样写:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM = 3

ORDER BY ROWNUM ASC )

WHERE RECNO = 2

结果则为:

ID NAME

05 fifth

3.抽出按某种方式排序的记录集中的第N条记录

在2的说明中,当M = N的时候,即为我们的标题讲的结果。实际上,2的做法在里面NM的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。

如上所述,则SQL语句应为:

SELECT 列名1...列名n FROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM = N(抽出记录数)

ORDER BY ROWNUM ASC

)

WHERE RECNO = N

那么,2中的例子的SQL语句则为:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM = 2

ORDER BY ROWNUM ASC

)

WHERE RECNO = 2

结果为:

ID NAME

05 fifth

4.抽出按某种方式排序的记录集中的第M条记录开始的X条记录

3里所讲得仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在2中的N的取值应该是在N = (M + X - 1)这个范围内,当让最经济的取值就是取等好的时候了的时候了。当然最后的抽取条件也不是RECNO = N了,应该是RECNO BETWEEN M AND (M + X - 1)了,所以随之而来的SQL语句则为:

SELECT 列名1...列名n FROM

(

SELECT ROWNUM RECNO, 列名1...列名nFROM

(

SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM = N (N = (M + X - 1))

ORDER BY ROWNUM ASC

)

WHERE RECNO BETWEEN M AND (M + X - 1)

同样以上面的数据为例,则抽取NAME的字母顺的第2条记录开始的3条记录的SQL语句为:

SELECT ID, NAME FROM

(

SELECT ROWNUM RECNO, ID, NAME FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM = (2 + 3 - 1)

ORDER BY ROWNUM ASC

)

WHERE RECNO BETWEEN 2 AND (2 + 3 - 1)

结果如下:

ID NAME

05 fifth

01 first

04 forth

以此为基础,再扩展的话,做成存储过程,将开始记录数以及抽取记录数为参数,就可以轻松实现分页抽取数据。

当然了,上面所讲的都是一些最基本的,实际应用中往往都没有这么简单,但是不管怎么说,不管复杂的应用总是由这些简单的元素构成,掌握一些最基本的方法始终是重要的。

实际上网上这样的文章比较多,我也只是稍微梳理了一下条理而写的这篇文章。希望能给初学者一些帮助。

oracle查询资源占用,锁表解锁

1. 先通过top命令查看产用资源较多的spid号

2.查询当前耗时的会话ID,用户名,sqlID等:

select sid,serial#,machine,username,program,sql_hash_value,sql_id,

  to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session

where paddr in (select addr from v$process where spid in ('5648612','256523'));

3. 如果上一步sql_id或者 hash_value不为空,则可用v$sqlarea查出当前正在使用的sql

select sql_text

from v$sqltext_with_newlines

where hash_value = hash_value

order by piece;

也可直接使用:

select a.*,b.SQL_TEXT from (

select sid,serial#,machine,username,program,sql_hash_value,sql_id,

  to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session

where paddr in (select addr from v$process where spid in ('23226'))

) a,v$sql b

where a.sql_id  = b.SQL_ID(+)

4.kill占用大资源的session

Alter system kill session 'SID,SERIAL#'

解锁:

1.查询哪些对象被锁:

select object_name,machine,s.sid,s.serial#

from v$locked_object l,dba_objects o ,v$session s

where l.object_id = o.object_id and l.session_id=s.sid;

2.下面的语句用来杀死一个进程:

alter system kill session '524,1095'; (其中24,111分别是上面查询出的sid,serial#)

3.再一次查询目前锁定的对象,若发现以上方法不能解除锁定的表,则用以下方法:

3.1 执行下面的语句获得进程(线程)号:

select spid, osuser, s.program

from v$session s,v$process p

where s.paddr=p.addr and s.sid=524 (524是上面的sid)


当前文章:oracle怎么用top,oracle怎么用正则表达式
网站地址:http://csdahua.cn/article/dsedegd.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流