《SQL必知必會》學習筆記(一)


      這兩天看了《SQL必知必會》第四版這本書,並照着書上做了不少實驗,也對以前的概念有得新的認識,也發現以前自己有得地方理解錯了。我采用的數據庫是SQL Server2012.數據庫中有一張比賽成績表,表里有四個字段。下面變列出我新學到的知識。

      這個是數據庫的全部記錄

1.order by  

語句:   select * from Scores order by name , Score desc

  執行結果:

①order by在執行排序功能時,會先對排序字段按abcd這樣的順序進行,漢字的話是按拼音的首字母,默認是正序。

②例子中先按name字段進行正序排序,當name相同時,又按score倒敘排,例如拜仁兩條數據,勝的開頭字母是s,負的是f,因為是倒敘,所以勝的那條數據排在前面。

2.通配符 _ 和 %

  通配符 _表示的是匹配單個字符,而%則是匹配多個字符。具體寫法兩者無差別。

 select * from Scores where name like '拜_'
 select * from Scores where name like '拜%'

注意:①通配符%看起來像是可以匹配任何東西, 但有個例外, 這就是NULL。 子句where name like '%' 不會匹配產品名稱為NULL的行。
        ②不要過度使用通配符。 如果其他操作符能達到相同的目的,應該使用其他操作符。
在確實需要使用通配符時, 也盡量不要把它們用在搜索模式的開始處。 把通配符置於開始處, 搜索起來是最慢的。

3.拼接字段 +

語句: select  name+ '('+ Score +')' as ac from Scores 

執行結果:

拼接字段就算把兩個字段合成一個字段的查詢出來。

4.文本處理函數

①SQL中有很多內置函數,這個表是常用的文本處理函數

語句:  select upper(name) from Scores 
      select len(name) from Scores 
      select left(name,1) from Scores 

執行結果:

          

②其中對於SOUNDEX()解釋一下,SOUNDEX是一個將任何文本串 轉換為描述其語音表示的字母數字模式的算法。

  select soundex(date) from Scores

 

 

 

select * from Scores where  soundex(name) =soundex('張三')

 

 

5.日期和時間處理函數

  日期和時間采用相應的數據類型存儲在表中,每種DBMS都有自己的特殊形式。 日期和時間值以特殊的格式存儲,以便能快速和有效地排序或過濾,並且節省物理存儲空間。

語句:  select date,name from Scores where DATEPART(DD,Date)=10 --查詢10號的數據

執行結果:

6.聚合函數

  聚合函數是對某些行進行函數運算,並返回一個值,下圖是常用的聚合函數。

說明:①五個函數都忽略列值為NULL的行。

   ②使用COUNT(*)對表中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值,都會計算到總數中。

   ③使用COUNT(column) 對特定列中具有值的行進行計數, 忽略NULL值。

 

7.分組函數Group By和having

 ① 當需要統計球隊的勝場次數時,這個時候就需要用到分組函數Group By,用到Group By之后,過濾條件就不能用where了,而要用到having。

語句:  select name,COUNT(*) as 場次 from Scores group by name    --查詢球隊名和比賽場次信息

結果:

語句:select name,COUNT(*)  as 場次 from Scores group by name having COUNT(*)>1   --查詢球隊名和比賽場次大於1場的信息

結果:

注意:分組查詢中,slect的內容必須是group by的字段或聚合函數,不能是其他。例如將date字段放在select中,便出現錯誤。

②where和having 差別是:where過濾行, 而having過濾分組。

     這里有另一種理解方法, WHERE在數據分組前進行過濾, HAVING在數據分組后進行過濾。 這是一個重要的區別, WHERE排除的行不包括在分組
中。 這可能會改變計算值, 從而影響HAVING子句中基於這些值過濾掉的分組。

 

語句: select name,COUNT(*)  as 場次 from Scores where id<4 group by name having COUNT(*)>1 --在id小於4的數據中查詢出球隊名和比賽場次大於1場的信息
 
        

結果:

 

8.SELECT子句順序

SQL 語句的執行順序跟其語句的語法順序並不一致,上圖是SQL語句的語法順序。而執行順序確是:From----->Where----->Group By---->Having----->Select----->Order By

 ①From 才是 SQL 語句執行的第一步,並非 Select 。數據庫在執行 SQL 語句的第一步是將數據從硬盤加載到數據緩沖區中,以便對這些數據進行操作。

② Select 是在大部分語句執行了之后才執行的,嚴格的說是在 From 和 Group By 之后執行的。理解這一點是非常重要的,這就是你不能在 Where中使用在 Select 中設定別名的字段作為判斷條件的原因。

 

 

就先寫到這里吧,后邊的慢慢在寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM