南京正厚軟件技術(shù)培訓(xùn)學(xué)校

7x24小時咨詢熱線

400-660-3310

當(dāng)前位置 : 好學(xué)校 南京正厚軟件技術(shù)培訓(xùn)學(xué)校 學(xué)習(xí)資訊 資訊詳情

Oracle和MySQL之區(qū)別四

2021-09-18

上一次我們分享了Oracle和MySQL中對于索引和針對空字符串的處理來分析了它們的不同,本次我們來他們在分頁查詢中有什么不同,區(qū)別還是比較明顯的。

那來具體看一下。

l分頁查

我們?yōu)槭裁匆褂梅猪摬樵兡??因為?dāng)數(shù)據(jù)量過大時,在一頁中查看數(shù)據(jù)是一件非常麻煩的事情。

lMySQL

MySql中使用limit來進行分頁查詢他的語法結(jié)構(gòu)為:

SELECT * FROM 表名 limit m,n;

其中m代表從m+1條記錄行開始檢索,n代表取出n條數(shù)據(jù)。注意:(m可設(shè)為0)

示例:SELECT * FROM 表名 limit 6,5;

這表示從第7條記錄行開始算,取出5條數(shù)據(jù)

當(dāng)然我們把m設(shè)置為0 的時候就可以變成如下情況:

示例:SELECT * FROM 表名 limit 6;

這表示取出前6條記錄行。

當(dāng)然分頁查詢固然好用,但它有個缺點,就是越往后分頁,LIMIT語句速度也會明顯變慢,所以我們一般會用子查詢來分頁。

示例:select * from (select Password from user limit 3)as zh;

這就是user表中查詢出Password的前三條記錄,再查詢出他的全部信息。

需要注意的是:select * from user where Password in (select Password from user limit 3);這樣的寫法是錯誤的。

lOracle

那Oracle只中的分頁查詢又是怎么樣的呢?我們一起來看看。在Oracle中我們使用rownum來進行分頁查詢。

那什么是rownum呢?它是針對查詢結(jié)果進行編號的虛擬列,也叫偽列,查詢結(jié)果返回的一行分配的是1,返回的第二行分配的是2,這個為字段可以用于限制返回查詢的總行數(shù),且rownum不可以以任何表的名稱作為前綴。

那我們先來舉個例看它是何方神圣。

示例:

SELECT rownum,emp.* FROM emp;

SELECT rownum,emp.* FROM emp;
SELECT rownum,emp.* FROM emp;二

我們對照原始表可以看到,添加了一列rownum,對查詢結(jié)果進行了編號。那我們想查詢一條應(yīng)該怎么做呢?

示例:

SELECT rownum,emp.* FROM emp WHERE ROWNUM=1;

這樣就查詢出來一條記錄,如果我要查詢二條?可能大家會想到直接ROWNUM=2不就完事了嗎?答案是否定的,這樣永遠(yuǎn)都查不到第二條。因為你查詢出來的結(jié)果都會重新編號,這樣永遠(yuǎn)都從1開始編號,這樣第二條永遠(yuǎn)都取不到,當(dāng)然這個我們還是可以取小于范圍內(nèi)的,比如

示例:

SELECT rownum,emp.* FROM emp WHERE ROWNUM<5;< span="">

SELECT rownum,emp.* FROM emp WHERE ROWNUM&lt;5;&lt; span=&quot;&quot;&gt;

這樣就可以去到小于5 的記錄了。根據(jù)上面的說法,我們要取大于5的也是不行的,因為每次查詢出來的結(jié)果都重新編號,大于1的都不能取到,那我們在實際運用呢?肯定不能不取中間的數(shù)據(jù),或者后面的數(shù)據(jù)了,這怎么辦呢?這我們就會才用雙層rownum的方法,有點像我們提出的外循環(huán)和內(nèi)循環(huán)的概念,這樣外面的變,里面的不變就可以取到了,說了那么多,我們例子說話。

示例

SELECT rownum,ename,empno

FROM(SELECT rownum,emp.* FROM emp)

WHERE rownum >10;

結(jié)果發(fā)現(xiàn)執(zhí)行出來沒有結(jié)果,這又是咋回事呢?哈哈!仔細(xì)的人已經(jīng)發(fā)現(xiàn),這條語句有兩個rownum,我們?nèi)丝梢詤^(qū)分,機器可不行呀,所以我們需要給他取不同的名字,我們稍微加工,得到以下的示例,我們看看。

示例:

SELECT rownum,ename,empno

FROM(select rownum rnum,ename,empno FROM emp)

WHERE rnum>10;

SELECT rownum,ename,empno

這樣就可以查到10行以后的記錄了。

我們還可以進行只查詢篩選后再進行主查詢篩選。

示例:

SELECT * FROM (SELECT rownum rnum,emp.* FROM emp

WHERE rownum<=4)

WHERE rnum>=2;

SELECT * FROM (SELECT rownum rnum,emp.* FROM emp

這就是在子查詢中選出前4條,再進行主查詢篩選編號大于等于2的記錄。

通過往期的文章,Oracle和MySQL的基本區(qū)別就分享到此,下次我們接著分享其他的內(nèi)容謝謝!

收藏
分享到:

相關(guān)課程

相關(guān)資訊

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

認(rèn)證等級

信譽良好,可安心報讀

南京正厚軟件技術(shù)培訓(xùn)學(xué)校

已獲好學(xué)校V2信譽等級認(rèn)證

信譽值

  • (60-80)基礎(chǔ)信譽積累,可放心報讀
  • (81-90)良好信譽積累,可持續(xù)信賴
  • (91-100)充分信譽積累,推薦報讀

與好學(xué)校簽訂讀書保障協(xié)議:

  • 100%
  • 65
  • 12363
在線咨詢
;