沒有的。

10年積累的成都網(wǎng)站建設、網(wǎng)站制作經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有崇義免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
MySQL 和 Oracle 中的 SQL SELECT TOP 是等價的。
Oracle 語法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM = number
例子
SELECT *
FROM Persons
WHERE ROWNUM = 5
擴展資料
SELECT TOP 子句用于規(guī)定要返回的記錄的數(shù)目。SELECT TOP 子句對于擁有數(shù)千條記錄的大型表來說,是非常有用的。
注釋:并非所有的數(shù)據(jù)庫系統(tǒng)都支持 SELECT TOP 子句。
select top與limit的區(qū)別:
這是來源于不同數(shù)據(jù)庫里面的使用方式:
1、在access/mssqlserver里面支持的sql用法selecttop;
2、2,在mysql/oracle里面支持的sql用法為select...limit;
就使用而言兩者沒有什么區(qū)別,只是應用平臺不一樣而已。
oracle 函數(shù)中沒有top命令。
Oracle8i可以將一個查詢到的數(shù)據(jù)集作為另外一個查詢的表名,于是可以解決Top N的一條SQL查詢,例如,從tab表中取出f字段值最大的10條記錄:
SELECT * FROM (SELECT * FROM tab ORDER BY f DESC) WHERE ROWNUM = 10。
oracle簡介:
甲骨文公司,全稱甲骨文股份有限公司(甲骨文軟件系統(tǒng)有限公司),是全球最大的企業(yè)級軟件公司,總部位于美國加利福尼亞州的紅木灘。1989年正式進入中國市場。2013年,甲骨文已超越 IBM ,成為繼 Microsoft 后全球第二大軟件公司。
rownum:對于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數(shù),且rownum不能以任何表的名稱作為前綴。 example: select rownum as 行號,first_name as 員工姓名 from hr.employees select rownum as 行號,first_name as 員工姓名 from hr.employees order by 員工姓名; 序號不會重新排的,(所以需要嵌套一層子查詢來抽取排序好的數(shù)據(jù))原因下面解釋。 例1:查詢各個部門的MANAGER(經(jīng)理)中誰的工資最低 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行的數(shù)據(jù)或者中間幾條數(shù)據(jù)該怎么辦?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 --取出前五行 )
1.在ORACLE中實現(xiàn)SELECT TOP N
由于ORACLE不支持SELECT TOP語句,所以在ORACLE中經(jīng)常是用ORDER BY跟ROWNUM的組合來實現(xiàn)SELECT TOP N的查詢。
簡單地說,實現(xiàn)方法如下所示:
SELECT 列名1...列名n FROM
(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)
WHERE ROWNUM = N(抽出記錄數(shù))
ORDER BY ROWNUM ASC
下面舉個例子簡單說明一下。
顧客表customer(id,name)有如下數(shù)據(jù):
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的數(shù)據(jù)之后,為了抽出這N條記錄中的第M條記錄,我們可以考慮從ROWNUM著手。我們知道,ROWNUM是記錄表中數(shù)據(jù)編號的一個隱藏子段,所以可以在得到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(抽出記錄數(shù))
ORDER BY ROWNUM ASC
)
WHERE RECNO = M(M = N)
同樣以上表的數(shù)據(jù)為基礎,那么得到以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的部分的數(shù)據(jù)是基本上不會用到的,我們僅僅是為了說明方便而采用。
如上所述,則SQL語句應為:
SELECT 列名1...列名n FROM
(
SELECT ROWNUM RECNO, 列名1...列名nFROM
(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)
WHERE ROWNUM = N(抽出記錄數(shù))
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)這個范圍內,當讓最經(jīng)濟的取值就是取等好的時候了的時候了。當然最后的抽取條件也不是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)
同樣以上面的數(shù)據(jù)為例,則抽取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
以此為基礎,再擴展的話,做成存儲過程,將開始記錄數(shù)以及抽取記錄數(shù)為參數(shù),就可以輕松實現(xiàn)分頁抽取數(shù)據(jù)。
當然了,上面所講的都是一些最基本的,實際應用中往往都沒有這么簡單,但是不管怎么說,不管復雜的應用總是由這些簡單的元素構成,掌握一些最基本的方法始終是重要的。
實際上網(wǎng)上這樣的文章比較多,我也只是稍微梳理了一下條理而寫的這篇文章。希望能給初學者一些幫助。
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.再一次查詢目前鎖定的對象,若發(fā)現(xiàn)以上方法不能解除鎖定的表,則用以下方法:
3.1 執(zhí)行下面的語句獲得進程(線程)號:
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怎么用正則表達式
網(wǎng)站網(wǎng)址:http://chinadenli.net/article11/dsedegd.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)頁設計公司、動態(tài)網(wǎng)站、面包屑導航、ChatGPT、Google
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)