在文章的最後看一下ORDER BY STOPKEY和ORDER BY在翻頁查詢的最後幾頁的效能差異:SQL> CREATE TABLE T AS SELECT A.* FROM DBA_OBJECTS A, DBA_USERS B, TAB;表已建立。SQL> SELECT COUNT(*) FROM T;COUNT(*)----------458064SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T')PL/SQL
Regex是很多程式設計語言中都有的。可惜oracle8i、oracle9i中一直遲遲不肯加入,好在oracle10g中終於增加了期盼已久的Regex功能。你可以在oracle10g中使用Regex肆意地匹配你想匹配的任何字串了。所謂Regex是對於字串進行匹配的一種模式。舉個例子來說字串’^198[0-9]$’可以匹配‘1980-1989’,也即80後出生的年份。如果希望統計出公司那些員工是80後的,就可以使用如下的SQL語句:select * from emp where
和其他的關係型資料庫一樣,oracle中也能進行一些隱式的資料轉換,這對我們寫SQL語句有非常用,我們可以不必麻煩地手動轉化很多類型的字元。雖然前面我們介紹了一些使用例如to_char,to_date的函數進行強制轉換的方法,但是隱式轉換也還是不錯的。Oracle可以隱式地進行一些變數類別之間轉化,例如從字串轉換到數值,看下面的例子。SQL> select ename,sal from emp where sal = ‘1100′; ENAME SAL——————– ———-SMITH 1
前面我們在介紹oracle的彙總函式時提到如果在給定的值中存在空值的話,oracle將會忽略掉這些空值。這個處理的方式在大多數時候是符合我們要求的,但是在有些時候可能會有問題。例如,現在到了年關,公司會對部分員工進行獎勵,而當然會有一部分人沒有得到獎勵。比如現在有一張表中存的是員工的獎金額,那個將會有一部分人對應的獎金額是空值,因為他們根本就沒有得到獎勵,現在老闆讓你統計全公司的得獎平均額。如果你直接使用Select avg(bonus) from
繼續看查詢的第二種情況,包含表串連的情況:SQL> CREATE TABLE T AS SELECT * FROM DBA_USERS;表已建立。SQL> CREATE TABLE T1 AS SELECT * FROM DBA_SOURCE;表已建立。SQL> ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (USERNAME);表已更改。SQL> ALTER TABLE T1 ADD CONSTRAINT
Oracle的分頁查詢語句基本上可以按照本文給出的格式來進行套用。 分頁查詢格式:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21其中最內層的查詢SELECT * FROM TABLE_NAME表示不進行翻頁的原始查詢語句。ROWNUM <= 40和RN >=
這篇文章通過例子說明分頁查詢使用的NESTED LOOP操作,在分頁查詢翻到最後幾頁時的效能問題:SQL> CREATE TABLE T AS SELECT * FROM DBA_USERS;表已建立。SQL> CREATE TABLE T1 AS SELECT * FROM DBA_SOURCE;表已建立。SQL> ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (USERNAME);表已更改。SQL> ALTER
這篇文章用幾個例子來說明分頁查詢的效率。首先構造一個比較大的表作為測試表:SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS, DBA_SEQUENCES;表已建立。SQL> SELECT COUNT(*) FROM T;COUNT(*)----------457992首先比較兩種分頁方法的區別:SQL> SET AUTOT ONSQL> COL OBJECT_NAME FORMAT A30SQL> EXEC DBMS_
最後的例子說明內部迴圈包含排序的情況:SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;表已建立。SQL> CREATE INDEX IND_T_OBJECT_NAME ON T (OBJECT_NAME);索引已建立。SQL> ALTER TABLE T MODIFY OBJECT_NAME NOT NULL;表已更改。SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,