1. 程式人生 > >數據庫的查詢筆記

數據庫的查詢筆記

技術 丟失 str span 代碼例子 min 出現 問題 cape

數據庫的查詢筆記

1、 在字符查詢語句中:WHERE 語句中的篩選條件應該用LIKE,NOT LIKE 來表達是否匹配。如下所示;

SELECT

S.*

FROM

tb_Major AS S

WHERE

S.ShortName LIKE ‘公共事業管理% ‘;

一定不能表示成

SELECT

S.*

FROM

tb_Major AS S

WHERE

S.ShortName = ‘公共事業管理% ‘;

2、 用戶查詢的字符串本身就含有通配符%或者-時,需要使用ESCAPE’<換碼字符>’短語對通配符進行轉義。

如下代碼例子所示:

SELECT

Cno,Ccredit

FROM

Course

WHERE Cname LIKE ‘DB\_Design’ ESCAPE’\’;

3、為了進一步方便用戶,SQL 語言提供了許多的聚集函數,主要有COUNT(*)、SUM、AVG、MAX、MIN 。在使用這些聚集函數時經常會出現以下情況

技術分享

正確表達如下:

  SELECT

  S.*

  ,MIN(S.BirthDate)

  FROM

  vw_Student AS S

  GROUP BY

  S.BirthDate

4、在SQL 語言中WHERE子句是不能用聚集函數作為條件表達式的,聚集函數只能作用於SELECT子句和GROUP BY 的HAVING 語句。

例:錯誤表達方式

技術分享

正確表達如下

技術分享

5、ISNULL 函數,判斷是否為空值

例:

技術分享

語句執行後,若先修課程為空值,則輸出結果‘無‘的數據類型與PreCourseNo 數據類型一致。

故因此可能會出現輸出結果數據被截斷或者出現空格情況,因此該函數在使用時常常連同著轉變函數CONVERT 函數一起使用來轉變輸出結果的數據類型。

6、字符串拼接時若拼接的某一部分的取值為NULL,則拼接後的輸出結果只會是NULL

拼接的前部分將被覆蓋丟失。

例、C.No+C.Name+C.PrecourseNo

當C.PrecourseNo 取NULL時,拼接的最後輸出結果為NULL。

修改後:C.No+C.Name+ RTRIM (ISNULL(C.PrecourseNo ,’’) 則避免了上述問題

7、SQL語言中IF不能用於語句內部,因為它控制的是整個流程,即該段語句是否執行。不能用來表達對語句中某一列的各種取值情況問題。

錯誤語句段:

SELECT

S.Name

,S.No

,IF….

正確語句段

SELECT

S.Name

,S.No

,CASE

8、查詢數據庫中所有表的各有多少條記錄的代碼片段如下所示:(以查詢數據庫EduBase中所有表各有多少條記錄為例)

技術分享

執行結果如下:

技術分享

數據庫的查詢筆記