第8周學習筆記
一、查詢知識點思維導圖
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
數據庫查詢語句的組成 ORDER BY子句
HAVING子句
子查詢
集運算符
二、查詢知識要點
1、 在查詢之前需要導入之前已經建立好的數據庫文件。
第一步:打開SQL,進行連接後右擊數據庫出現如圖一式界面;
第二步:點擊附加,出現如圖二式界面,點擊添加,查找需要的文件,如圖三所示。
第三步:添加完數據庫文件,再進行查詢操作。
2、 篩選列
(1) 查詢某表所有信息
SELECT
*
FROM
tb_Drug;
2、在病人視圖中,查詢全體病人的姓名、出生年份、年齡
SELECT
S.Name AS 姓名
,YEAR(S.BirthDate) AS 出生年份 ,YEAR(GETDATE())—YEAR(S.BirthDate) AS 年齡
FROM
vw_Patient AS S;
盡管上一條列表達式能夠算出出生年份,且已定義別名,但不允許在其它任一列表達式中調用該別名;
因為SQL Server對表的查詢具有同時操作特性,所有表達式同時執行,故期間無法得知其它表達式定義的別名.
3、 篩選行
(1)在病人視圖中,查詢所有病人號碼 SELECT
SS. PatientNo
FROM
vw_ Patient AS SS;
--消除重復:
SELECT DISTINCT
SS. PatientNo
FROM
vw_ Patient AS SS;
(2)在病人視圖中,查詢年齡在19~22歲之間的病人姓名、年齡
SELECT
S.*
FROM
(SELECT
S.Name
,DATEDIFF(YEAR,S.BirthDate,GETDATE()) AS Age
FROM
vw_Patient AS S) AS S
WHERE
S.Age BETWEEN 19 AND 22;
--或:
WITH cte_Age AS
(SELECT
S.Name
,DATEDIFF(YEAR,S.BirthDate,GETDATE()) AS Age
FROM
vw_Patient AS S)
SELECT
S.*
FROM
cte_Age AS S
WHERE
S.Age BETWEEN 19 AND 22;
3、字符
在查詢字符中會使用到許多函數,而函數的使用則就是需要特別註意。
(1)通配符%代替任意個未知字符
(2)通配符_代替1個未知字符
(3)為避免查詢內容中的_與通配符沖突,使用[ ]作為轉義符,將查詢內容中的_轉成普通文本
(4)使用ESCAPE自定義轉義符
(5)以行為單位的字符串拼接,例如‘+’
(6)SUBSTRING(列名,長度)字符串函數
(7)RIGHT(列名,長度)取右值函數,在某列中取從右邊開始的多少長度。
(8)LEFT(列名,長度)取右值函數,在某列中取從左邊開始的多少長度。
(9)STUFF(列名,位置 ,長度,替換內容) 替換字符串函數
(10)CHARINDEX(查找特定字符,列名) 查找指定字符串在原字符串中的起始位置,從某列中查找某個特定的字符的位置。
4、排序
(1)排序過程中很經常使用到降序或者升序,其中降序使用DESC,升序使用ASC.
(2)
在病人視圖中,查詢所有病人名單,並按姓名筆畫排序 |
||||||||||
SELECT |
||||||||||
S.* |
||||||||||
FROM |
||||||||||
vw_Fatient AS S |
||||||||||
ORDER BY |
||||||||||
S.Name COLLATE CHINESE_PRC_STROKE_CS_AS_KS_WS; |
指定排序規則 簡體中文 筆畫 區分大小寫、區分重音、區分假名、區分全半角。
(3)查詢某排列順序前三名,使用SELECT TOP 3 WITH TIES語句,其中WITH TIES可以排除包含並列的情況。
(4)查詢某排列順序前3%的人,使用
SELECT TOP 3 PERCENT來查詢。
(5)在查詢過程中涉及查詢的列別名,使用ORDER BY語句實現此功能,因為ORDER BY語句最後執行,故能識別列別名。
三、查詢誤點
1、使用查詢之前必須先使用數據庫“USE Eduse”語句,不然是無法實現查詢功能的。如下面第一圖與第二圖
2、在使用函數STUFF(列名,位置 ,長度,替換內容) 替換字符串函數時需要查找指定位置使用到CHARINDEX(查找特定字符,列名)函數需要給此時查找到的位置再加一才是真正需要替換的位置,例如:在病人表中,查詢所有病人的電話,其中固定電話前的區號均不顯示;
SELECT
S.Phone
,SUBSTRING(S.Phone ,CHARINDEX(‘-‘,S.Phone),100)
FROM
tb_Fatient AS S; (下面第一張圖)
與下面這個代碼的區別
SELECT
S.Phone
,SUBSTRING(S.Phone ,CHARINDEX(‘-‘,S.Phone)+1,100)
FROM
tb_Fatient AS S; (下面第二張圖)
見下面兩張運行結果圖
第8周學習筆記