資料庫高階查詢設計

2021-04-17 12:00:47 字數 4452 閱讀 6505

/*  --

前提描述,一張

flidtab表有5

個字段。

fid是主鍵,

int型別、主動增長(

identity

)。cid

、pid

、tid

是外來鍵,

int型別、主動增長(

identity

)。fidno

由cid

、pid

、tid

組合而成,前提

cid、

pid、

tid不足

5位的新增成

5位長度。用

sql批量實現。 */

--建立表

create

table flidtab (

fid int

primary

keyidentity

(1,1),

fidno varchar

(21)

notnull,

cid int

notnull,

pid int

notnull,

tid int

notnull)go

--插入資料

insert flidtab 

select

'123123'

,1,1,1

union

allselect

'qwe'

,2,3,3

union

allselect

'asd'

,3,3,1

union

allselect

'zxc'

,2,3,1 go

select

*from flidtab go

--建造用於填充位數的id

--判斷

cid長度

create

proc buildcid

@inputid int

,@outputid varchar

(5)outputas

select @outputid = cid from flidtab where fid = @inputid --

判斷長度 if

(len

(@outputid)=2)

begin

set@outputid =

'000'

+@outputid

endelseif(

len(@outputid)=3)

begin

set@outputid =

'00'

+@outputid

endelseif(

len(@outputid)=4)

begin

set@outputid =

'0'+@outputid

endelseif(

len(@outputid)=1)

begin

set@outputid =

'0000'

+@outputid

endelse

begin

set@outputid =

''end go

--判斷pid長度

create

proc buildpid

@inputid int

,@outputid varchar

(5)outputas

select @outputid = pid from flidtab where fid = @inputid --

判斷長度 if

(len

(@outputid)=2)

begin

set@outputid =

'000'

+@outputid

endelseif(

len(@outputid)=3)

begin

set@outputid =

'00'

+@outputid

endelseif(

len(@outputid)=4)

begin

set@outputid =

'0'+@outputid

endelseif(

len(@outputid)=1)

begin

set@outputid =

'0000'

+@outputid

endelse

begin

set@outputid =

''end go

--判斷tid長度

create

proc buildtid

@inputid int

,@outputid varchar

(5)outputas

select @outputid = tid from flidtab where fid = @inputid --

判斷長度 if

(len

(@outputid)=2)

begin

set@outputid =

'000'

+@outputid

endelseif(

len(@outputid)=3)

begin

set@outputid =

'00'

+@outputid

endelseif(

len(@outputid)=4)

begin

set@outputid =

'0'+@outputid

endelseif(

len(@outputid)=1)

begin

set@outputid =

'0000'

+@outputid

endelse

begin

set@outputid =

''end go

--測試

declare

@out varchar

(5)exec

buildpid 1, @out output

print

'---------'

+@out go

-- 建立修改儲存過程

create

proc prc_updatefidno

@id intas

declare

@cid varchar

(5),

@pid varchar

(5),

@tid varchar

(5),

@fidno varchar

(30)

exec buildcid @id, @cid output

exec buildpid @id, @pid output

exec buildtid @id, @tid output

select

@fidno =

(select fidno from flidtab where fid = f.fid)

from flidtab as f

select

@fidno =@fidno +

'_'+@cid+

'_'+@pid+

'_'+@tid from flidtab as f where f.fid=1

print

'---------*****===='

+@fidno --

修改資料

update

flidtab set fidno = @fidno

where fid = @id go

--測試

exec

prc_updatefidno 1 go

select

*from flidtab go

--宣告唯讀游標

declare

findfidno cursor

forselect fid from flidtab

forread only --

開啟游標

open

findfidno --

執行 declare

@fid int

fetch

next from findfidno into @fid

while

(@@fetch_status=0)

begin

exec prc_updatefidno @fid --

執行修改

fetch next from findfidno into @fid

end go

--關閉游標

close

findfidno

deallocate

findfidno go

--檢視測試結果

select

*from flidtab go

資料庫 高階查詢

巢狀查詢也叫子查詢,是把內層的查詢結果作為外層的查詢條件 語法格式 select 欄位名列表 from 表名 where 欄位名 運算子 select 欄位名 from 表名 where 條件 注意 外層的where的條件必須和內層的select查詢的欄位名一樣,個數也一樣 如 把攻擊值小於平均攻擊...

資料庫高階查詢語句

巢狀子查詢 子查詢的優勢和特點 使用靈活,可以成為sql語句的多個部分 子查詢作為查詢條件使用 子查詢作為臨時表使用 降低sql語句的複雜度,提高sql語句的可讀性 作為臨時表使用 例 select stuname subject,score from select from stuinfo whe...

MySQL資料庫高階查詢

mysql查詢 子查詢 exists和not exists子查詢 exists子查詢 在執行create 或drop語句前,可以使用exists判斷該資料庫物件是否存在,返回值是true或false。drop table if exists temp exists也可以作為where語句的子查詢 s...