sql cookbook實驗記錄(First)

2021-10-01 11:12:03 字數 3082 閱讀 5366

如下是sql cookbook的一些實驗記錄。返璞歸真,其實都是一些很簡單的東西,簡單的東西才有生命力,也不可能每天都有一些重大課題讓我們研究。廢話不說,言歸正傳。

環境介紹:

oracle database 19c enterprise edition release 19.0.0.0.0 - production

version 19.3.0.0.0

1 將查詢作為內聯檢視的話,就可以呼叫別名

select

*from

(select saddr,sid as session_id,

serial

# from v$session ) where session_id=2

session_id是這裡的別名。別名加連線

select ename ||

' work as a '

||job as job from emp

也可以這麼改

select concat(ename||

' work as a '

,job)

as job from emp;

不過concat的引數個人限制是2個條件判斷,

select ename,

sal,

case

when sal <

2000

then

'low'

when sal >

4000

then

'high'

else

'ok'

endas

status

from emp;

在這裡輸出乙個status列,判斷工資的高低。我在想公司會不會在後台分析這下。馬克思說,資本是無情的。也許他們也會這麼幹。

從表emp中取出隨機的5列。

select

*from

(select ename, job

from emp

order

by dbms_random.

value()

)where rownum <=

5;

不過取隨機數應該是很費效能的,因為這個思路必定是走全表。

還要注意一點,rownum是有遞增關係的。oracle先有第一行才有第二行。這不是乙個先有雞還是先有蛋的問題。

for example:

scott@orcl>select * from emp where rownum=5;

no rows selected

在執行計畫裡面看的就更明白了。

不過rowid就不同了,rowid是具體存在的實體地址

所以肯定是可以指定rowid進行選擇的,不過這裡的位址肯定是在記憶體裡面的。但是查詢了相關資料,rowid是對映實體地址而生成的。

scott@orcl

>

alter system flush buffer_cache;

system altered.

刷完了,當然要走物理讀了。

取出了幾個對照值,其實位址是不改變的。

可以根據rowid取出這一行記錄所在的物件,檔案號,block號

設定rownum在幾次查詢中也是不改變的。

附上sql:

select rowid,

dbms_rowid.rowid_object (rowid) obj_id#,

dbms_rowid.rowid_relative_fno (rowid) rfile#,

dbms_rowid.rowid_block_number (rowid) block#,

dbms_rowid.rowid_row_number (rowid)

row#

from emp

where rowid =

'aaaxhvaahaaaafbaaa'

or rowid=

'aaaxhvaahaaaafbaac'

其實這也反向證明了,rowid是根據什麼生產的。

好了,衍生話題扯遠了。

關於null值:

null和空值不是乙個概念

同樣的我們也可以用coalesce來實現這乙個功能。

select

coalesce

(comm,0)

,emp.

*from emp where comm is

null

;

很明顯,這案例用coalesce來做更簡潔,易懂。

SQLCookbook 學習筆記 1檢索記錄

特殊字元 表示 所有列 使用 和指定某個列 效能相同。使用where 指定 要保留哪些行 判斷某個字段 是非為空 用 is null 或者 is not null 如 mysql select from menpiao where logdate is null 在使用 and 和or 的時候,可以...

SQLCookbook 學習筆記

許多人以一種馬馬虎虎的態度在使用sql,根本沒有意識到自己掌握著多麼強大的 本書的目的是開啟讀者的視野,看看sql究竟能幹什麼。一鱗半爪 從資料庫中檢索資料看似是一件容易的事情,然而,在it世界裡,盡可能高效地檢索資料至關重要。讀完本書,你不應該覺得要將現在所有 重寫,而是要認識到,現在sql已經有...

sqlCookbook學習總結(一)

1 從表中檢索所有的行或列 使用 字元 代表所有資料 例如select from emp查詢表emp中所有資料 使用where 可以返回指定行 如select from emp where id 使用具體字段返回個別列 如 select empno,name,age,salary,job from ...