SCPPO 專案中SQL語句的一些應用總結

2022-04-07 15:38:54 字數 3159 閱讀 9056

縱觀專案的開發,當專案框架搭建起來之後,更多的功能是無非是根據業務來操控sql語句,針對每個開發來說sql語句是個基本功,是避不開的。

小編最近在做的是乙個維護型別的專案,基本框架已經成型,主要工作是業務變化後來修改相應功能的sql語句來滿足新提出的需求,資料庫是用的sqlserver;

(一)使用者登入後顯示上次登入資訊

1、場景再現:

(1)系統使用者登入後會在系統主頁上顯示上次登入的相關資訊,如下圖:

(2)but在我們系統驗收的時候出現乙個bug用演示的賬號登入進去一直顯示的是2023年10月1號09:14這個時間,難道系統也在玩超越?追蹤下去最後定位到問題出在sql語句上!

(3)登入相關的實現:使用者登入後將記錄記錄到資料庫的登入相關表中,當跳轉到主介面後會去檢視(登入表和其他一些表構成)中根據當前登入的使用者查詢上次登入的資訊;

2、實現sql語句:

(1)先根據使用者檢視下檢視中的內容:

select *

from permissiondb.dbo.v_up_logininfo

where userid = 'liupu'

order by logintime desc

執行後的效果圖:

(2)檢視功能實現的sql語句:

select *

from v_up_logininfo v

where v.logintime in (

select top 1000

max(logintime) as logintime

from v_up_logininfo

where logintime not in ( select top 1000

max(logintime) as logintime

from v_up_logininfo

group by userid

order by max(logintime) desc )

group by userid

order by max(logintime) desc )

and v.userid = 'liupu'

order by logintime desc

執行後的結果:

3、分析:通過上面查詢不難看出實現的是從登入的檢視中找到次最新時間(最新時間為本次登入),可是現在還不到10月1號那?後來經過確認是有人做測試;那麼如何改進那?思路:在查詢的時候加上限制條件,時間不能大於當前時間。

4、最終改正後的sql語句:

select *

from v_up_logininfo v

where v.logintime in (

select top 1000

max(logintime) as logintime

from v_up_logininfo

where logintime not in ( select top 1000

max(logintime) as logintime

from v_up_logininfo

where logintime < getdate()

group by userid

order by max(logintime) desc )

and logintime < getdate()

group by userid

order by max(logintime) desc )

and v.userid = 'liupu'

執行後的結果:

5、最終的效果圖:

(二) 資料庫表太多,請問如何查詢乙個欄位在哪張表中那?

1、場景再現:由於是半路接手專案,主要是維護專案,對專案中很多表不是太熟悉,而且由於專案比較大,資料庫表的個數比較多,有時候做乙個功能或修改乙個功能時需要根據表的某個欄位去關聯其他表來滿足需求,這時候痛苦就來了,乙個乙個點表會崩潰的;淘到乙個十分不錯的sql語句。

2、sql語句:

select b.name '表名稱'

from syscolumns a

inner join sysobjects b on a.id = b.id

and b.xtype = 'u'

and a.name = '欄位名稱'

3、實際應用:

(1)首先在sqlservermanager中定位好你需要查詢的庫:

(2)執行該sql語句:

select b.name '表名稱'

from syscolumns a

inner join sysobjects b on a.id = b.id

and b.xtype = 'u'

and a.name = 'companycode'

4、最終的效果圖:

(三)order by按正序排序時,如何把null值排到後面去?

1、場景再現:在修改乙個功能的時候按照其中的乙個字段從小到大排序,但是該字段中有null值;需求是null值放最後;具體專案功能在此不便透漏在此自己模擬乙個表。

2、實現sql語句:

(1)查詢模擬表中的所有內容:

select *

from [test].[dbo].[test_order]

執行效果圖:

(2)利用order by對欄位score從小到大排序:

select *

from [test].[dbo].[test_order]

order by score

執行效果圖:

3、最終改正後的sql語句:

select *

from [test].[dbo].[test_order]

order by case when score is null then 2

else 1

end ,

score

4、最終的效果圖:

1、在專案整體框架定下後,接下來主要的工作是靈活運用sql語句來實現功能,sql語句能充分調動大腦去達到目的;

2、興趣是靠後天的努力與激勵獲得的,剛開始學的時候對sql語句接觸比較少,用的也比較少,所謂的不感興趣佔主導,隨著接觸專案越來越多,應用的越來越多,用它實現的功能越來越複雜越精妙時,便有了興趣;其實不僅僅是sql語句,基本上所有的事物都是這樣;大概十萬小時定律也是基於這麼個理念。

sql 專案中的常用語句

一,保留表中部分資料 表如下 1.刪 除表中前100條資料 delete from update record limit 100 2.保留表中最新十條資料 delete ur from update record ur,select update time from update record o...

SQL ALTER TABLE 語句在專案中的使用

1.在實際的專案開發過程中,之前已經建立好的實體類可能需要增加 刪除字段,亦或是更改已有欄位的屬性,比如主鍵的增長策略從自增型改為uuid型,那麼就會涉及到 sql 中 alter table 語句的使用。alter table table name add column name datatype...

OA專案中學習到的SQL

1.將普通帖,精華帖和置頂帖當做常量,如下。普通帖 public static final int type normal 0 精華帖 public static final int type best 1 置頂帖 public static final int type top 2 在發帖的過程中...