国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle巧取指定記錄以及巧用外關聯(lián)查詢

2024-08-29 13:51:41
字體:
來源:轉載
供稿:網(wǎng)友
本文中利用例子的形式來解決Oracle巧取指定記錄與巧用外關聯(lián)查詢問題。 如何取得表中第6到第10條記錄的值 第一種方法,使用minus語句: 假設ddl語句如下:
CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)
那么第一種方法就是取出前5條,再取出前10條,然后采用集合運算的方法把前10條減去前5條就OK了,SQL語句如下:
SELECT * FROM T WHERE ROWNUM <= 10MINUSSELECT * FROM T WHERE ROWNUM <= 5;
另外一種方法,采用子查詢: 子查詢的這種方法相對比較復雜一點,不過性能要比剛才的集合相減要好一些。這種方法首先在子查詢中得到前10條數(shù)據(jù),順路也取得前10條數(shù)據(jù)的rownum,然后再一次查詢的時候取得剛才查詢的rownum大于5的那些數(shù)據(jù)。SQL語句如下:
SELECT ID, VALUE FROM (SELECT ID, VALUE, ROWNUM R FROM T WHERE R <= 10)WHERER > 5;
通過上面的語句,就得到了6到第10條數(shù)據(jù)了。 利用外連接替代not in語句 in語句還有not in語句的效率是非常的差的,因為數(shù)據(jù)庫在碰到這兩種語句的時候是要把數(shù)據(jù)進行一條一條的比對,假如in或者not in兩側的數(shù)據(jù)量在上萬條的時候,進行比對的次數(shù)就是上億次,很可能一個簡單的sql語句就要執(zhí)行半個小時以上。這種效率客戶是肯定不能夠接受的。那我們可以考慮兩種方法進行替代,第一種就是采用exist語句和not exist語句,這種大家應該比較熟悉了。另外一種就是巧用外關聯(lián)語句,這種方法可能大家不是很熟悉,我來稍微說一下。假設數(shù)據(jù)表的建表DDL語句為
CREATE TABLE T1(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)
而in或者not in的表的建表DDL語句為:
CREATE TABLE T2(VALUE INT)
Oracle中外關聯(lián)采用的是(+)符號表示外關聯(lián),也就是說標識了(+)符號的部分在找不到對應的值的時候為NULL。下面是替代in語句的時候的SQL語句
SELECT T1.ID, T1.VALUE FROM T1, T2 WHERE T1.VALUE = T2.VALUE(+) AND T2.VALUE IS NOT NULL;
而類似的。替代not in語句的時候的SQL語句則為:
SELECT T1.ID, T1.VALUE FROM T1, T2 WHERE T1.VALUE = T2.VALUE(+) AND T2.VALUE IS NULL;
大家可以試驗一下,在數(shù)據(jù)量多的時候,采用外關聯(lián)比用in或者not in的執(zhí)行效率要高很多很多。


上一篇:技巧總結 Oracle 9i如何設置時間間隔型數(shù)據(jù)?

下一篇:Oracle中用GROUPING SETS分組自定義匯總

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關注

主站蜘蛛池模板: 凤庆县| 芒康县| 图木舒克市| 阳谷县| 九龙城区| 聊城市| 罗定市| 六安市| 蒲江县| 陇川县| 普兰店市| 延吉市| 兴义市| 勃利县| 仙桃市| 大冶市| 贵港市| 牙克石市| 衡山县| 莆田市| 苍山县| 固镇县| 洛南县| 光山县| 元江| 东城区| 嫩江县| 泗洪县| 墨玉县| 山西省| 高州市| 通渭县| 龙南县| 青神县| 伽师县| 公安县| 绥宁县| 仲巴县| 乐安县| 马龙县| 北京市|