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

7x24小時(shí)咨詢熱線

400-660-3310

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

Oracle和MySQL之區(qū)別四

2021-09-18

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

那來具體看一下。

l分頁(yè)查

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

lMySQL

MySql中使用limit來進(jìn)行分頁(yè)查詢他的語法結(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 的時(shí)候就可以變成如下情況:

示例:SELECT * FROM 表名 limit 6;

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

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

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

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

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

lOracle

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

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

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

示例:

SELECT rownum,emp.* FROM emp;

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

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

示例:

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

這樣就查詢出來一條記錄,如果我要查詢二條?可能大家會(huì)想到直接ROWNUM=2不就完事了嗎?答案是否定的,這樣永遠(yuǎn)都查不到第二條。因?yàn)槟悴樵兂鰜淼慕Y(jié)果都會(huì)重新編號(hào),這樣永遠(yuǎn)都從1開始編號(hào),這樣第二條永遠(yuǎn)都取不到,當(dāng)然這個(gè)我們還是可以取小于范圍內(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的也是不行的,因?yàn)槊看尾樵兂鰜淼慕Y(jié)果都重新編號(hào),大于1的都不能取到,那我們?cè)趯?shí)際運(yùn)用呢?肯定不能不取中間的數(shù)據(jù),或者后面的數(shù)據(jù)了,這怎么辦呢?這我們就會(huì)才用雙層rownum的方法,有點(diǎn)像我們提出的外循環(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),這條語句有兩個(gè)rownum,我們?nèi)丝梢詤^(qū)分,機(jī)器可不行呀,所以我們需要給他取不同的名字,我們稍微加工,得到以下的示例,我們看看。

示例:

SELECT rownum,ename,empno

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

WHERE rnum>10;

SELECT rownum,ename,empno

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

我們還可以進(jìn)行只查詢篩選后再進(jìn)行主查詢篩選。

示例:

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

WHERE rownum<=4)

WHERE rnum>=2;

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

這就是在子查詢中選出前4條,再進(jìn)行主查詢篩選編號(hào)大于等于2的記錄。

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

收藏
分享到:

相關(guān)課程

相關(guān)資訊

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

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

認(rèn)證等級(jí)

信譽(yù)良好,可安心報(bào)讀

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

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

信譽(yù)值

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

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

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