天天看點

教務系統--資料庫查詢

在教務系統中,由于我負責的是基礎資訊子產品,要為其他子產品提供很多資訊.這樣就需要寫很多DAL層的方法.我們都是用存儲過程實作的.其中裡面添加,修改,删除方法沒有什麼好說的.重要的就是一些查詢方法,用到了一些進階的查詢.這裡總結一些資料庫查詢方法.

一:特殊關鍵字的查詢

    1:in (not in)

關鍵字in的作用是要查詢的資料隻要在一組資料中出現,結果就為真.

Not In 隻要不再一組資料中出現,結果就為真

例子:查詢職稱是教授或者副教授的老師

Select * from teacherInfo where teacherType in ('教授','副教授')

   2:distinct

它的作用是顯示關鍵字值相等的多條記錄中的一條

例子:查詢所有學年

<span style="font-size:18px;">Select distinct years from yearSemester</span>

二:進階查詢方法

With as

WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供資料的部分。

特别對于UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,是以可以使用WITH AS短語,則隻要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動将WITH AS短語所擷取的資料放入一個TEMP表裡,如果隻是被調用一次,則不會。而提示materialize則是強制将WITH AS短語裡的資料放入一個全局臨時表裡。很多查詢通過這種方法都可以提高速度。

With as 相比較其他查詢來說,效率高,推薦使用.其中牛腩在新聞系統中也使用過.

例子:根據編号查詢懲罰資訊,studentInfo為學生表,publishHistory為懲罰曆史表

<span style="font-size:18px;">with s as (select studentInfo .stuNo ,studentInfo .trueName ,studentInfo .sex from studentInfo )

select p.stuNo,s.sex ,s.trueName ,p.publishReasonID ,p.publishDate ,p .publishResultID ,p .publishDepartment from publishHistory p,s where

p.stuNo = (s.stuNo ) and ID =@ID and isEffective ='是'

</span>