高階查詢與兩套分頁總結

2022-09-16 19:00:20 字數 1822 閱讀 9666

一、高階查詢:

sql-server子查詢可以分為 相關子查詢 和 巢狀子查詢 

前提,假設books表如下:

巢狀子查詢的執行不依賴與外部的查詢。執行過程:

(1)執行子查詢,其結果不被顯示,而是傳遞給外部查詢,作為外部查詢的條件使用。

(2)執行外部查詢,並顯示整個結果。

巢狀子查詢一般可以分為:返回 單值的子查詢 和 返回乙個列表的子查詢 ,下面舉例說明:

1.返回單值:

--查詢所有**高於平均**的圖書名,作者,出版社和**。 

use

tempdb

goselect

圖書名,作者,出版社,**

from

books

where ** >

(

select

**g(**)

from

books

) go

2.返回值列表

--查詢所有借閱圖書的讀者資訊

select

*from

readers

where 讀者編號 in

(

select

讀者編號

from

[borrow history])

go

(1)從外層查詢中取出乙個元組,將元組相關列的值傳給內層查詢。

(2)執行內層查詢,得到子查詢操作的值。

(3)外查詢根據子查詢返回的結果或結果集得到滿足條件的行。

(4)然後外層查詢取出下乙個元組重複做步驟1-3,直到外層的元組全部處理完畢。

與前面介紹過的子查詢不同,相關子查詢無法獨立於外部查詢而得到解決。該子查詢需要乙個「類編號」的值。而這個值是個變數,隨sqlsever檢索books表中的不同行而改變。

以下是解決方案:

二、分頁

方法一:(核心思想)  跳過幾條取幾條。(雙top 雙order by )

select

top3

*from

student

where studentno notin(

select

top3 studentno from

student

order

bystudentno

)order

by studentno

方法二:(侷限性)(sql server2005之後的版本支援該寫法,因為要用到row_number() over()函式,在之前是沒有該函式)

select

*from

student

2select

*from(3

select

*,row_number()over(order

by studentno) as

myid

4from

student

5 ) as

temp

6where myid between

4and

6

邏輯 物理(增量) 兩套MySQL備份指令碼

資料備份其重要性無需多言,再細想一步,我們至少需要兩種備份 一種邏輯備份 mysqldump生成sql檔案 一種物理備份 xtrabackup可很好完成 邏輯備份在出問題時能提供更細粒度的恢復和對比 物理備份在整庫範圍的資料恢復或者增加從庫方面有著更高的效率。首先看下邏輯備份指令碼,比較簡單 bin...

Oracle比較相似結構的兩套表

出於某些原因,需要建立幾十張表,使用del 開頭,用於資料清理時記錄所清理的資料。比如表table1就對應del table1,但不幸的是,pdm檔案與正式庫表存在不一致,造成insert into del table1 select from table1未能正確插入,因此,有必要比較del 開頭...

ubuntu下管理網路的兩套方案

linux系統裡面有兩套管理網路連線的方案 1 etc network inte ces etc init.d networking 2 etc networkmanager 這兩套方案是衝突的,不能同時共存 第一套方案適應於沒有x的環境,如 伺服器,或者那些完全不需要改動連線的場合。第二套方案使用...