OCP 複習筆記之PL/SQL (2)

space6212發表於2019-07-04

最近打算把9i 的OCP教程看一遍,作一些簡單的筆記,作為備忘。

PL/SQL看似簡單,但實際使用起來還是有很多技巧和誤區的。以下記錄的是複習過程中想到的、和容易出現錯誤的地方。

這些東西在教程大部分是沒有記載的。

第二章:查詢特定資料及排序


2.1 WHERE子句

1) WHERE子句的組成

WHERE子句由三部分組成:列名、比較符、列名或常量或其他值。

【注意】在WHERE子句中不能用欄位別名

2) WHERE中的字串

字串是由單引號括起來的,它是大小寫敏感的。

3) 日期

4) 操作比較符

Ø !=^=<>含義一樣,都表示不等於。

Ø Between...and...相當於a>= and a<=,在oracle內部,在實際執行時會轉換為:a>= and a<=

Ø In可用於任意資料型別。在oracle內部,in操作會被轉換為a= or a= or ...。用in操作效能不一定高。

5) LIKE比較符

Ø %

匹配任意個字元。

Ø _

匹配單個字元

Ø LIKE只能用於字元型別的比較,但很多數字型別和日期型別也可能用,是因為oracle在執行時進行了資料型別的隱式轉換。

6) LIKE的轉義

當用LIKE進行查詢時,如果查詢條件包含有%_,可以用ESCAPE轉義:

Select * from t where c1 like ‘%a_%’escape ‘’;

也可以把’’換成其他字元,如’y’,只需要把ESCAPE子句的相應跳脫字元也換成’y’

Select * from t where c1 like ‘%ay_%’ escape ‘y’;

【注意】ESCAPE後連線的轉義符必須是長度為一的字元。

7) 運算子的優先順序

數學運算子->連線運算子(||)->比較運算子(=、>->is nulllikein->[not] between...and...->not 邏輯條件->and 邏輯符->or 邏輯符

2.2 ORDER BY子句

1) 升序和降序

ASC:升序,是預設的排序方式。排序方式是:數值型別的話是從小到大、日期是從早期到晚期、字元型別是從AZ升序排序NULL會排在最後。(可以認為null為無窮大)

DESC:降序。排序方式剛好與ASC相反;降序排序NULL值會排在最前面

2) ORDER BY子句的位置

ORDER BY 子句只能放在SQL語句的尾部,且子查詢裡不能出現ORDER BY子句(作為資料來源時可以出現order by,否則不能在子查詢中出現order by)。

SQL> select * from (select * from dual order by 1);--作為資料來源,可以用order by

SQL> select * from dual where dummy in (select dummy from dual order by 1);--作為子查詢,不可以用order by,否則出錯.

3) ORDER BY子句後接的可以是列名、別名、數字

4) 如果sql用到distinct時使用order by,則排序的列必須包含在select列表中 ,否則就會出現ORA-01791: 不是 SELECTed 表示式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63769/,如需轉載,請註明出處,否則將追究法律責任。

相關文章