Board logo

標題: 8-2-2 Where條件篩選 [打印本頁]

作者: 小誌    時間: 2011-4-20 10:22     標題: 8-2-2 Where條件篩選

8-2-2   Where條件篩選
Select-Form句型雖然可以依欄位名稱來選取我們需要的欄位資料,但是我們所得的資料是整個資料表中全部資料錄的欄位資料,聽的很模糊喔!筆者以實例來說好了:我只要取得國文分數大於60分的同學成績列表,簡單的一句話要如何轉化為SQL指令?

首先,先完成您所需的欄位資料SQL句子,如果想獲得的全部欄位資料,我們就這樣寫:
  1. Select *  From  transcript
複製代碼
這樣就會取出所有資料表欄位的資料,可是我只要國文分數大於60分的同學成績列表ㄚ,那我們就進階篩選,在「Select …Form…」後面再加上我們的條件「Where 國文>60」:
  1. Select *  From  transcript Where 國文>60
複製代碼
使用上列的SQL句子向資料庫下命令,即可獲得下圖的結果:(範例ex08_11.php)
[attach]5642[/attach]
圖8-14  國文成績大於60分的同學列表。
作者: 小誌    時間: 2011-4-20 10:23

8-2-2-1   And 並且
如果我要列表的是國文成績大於90而且英文成績大於90的同學,那我們就再加上邏輯運算子「And」來連接兩個(或多個)條件:
  1. Select * From  transcript Where 國文>90 And 英文>90
複製代碼
當我們加上邏輯運算子「And」時,則我們所獲得的資料必須是符合所有條件的資料錄才會被列表出來。
[attach]5643[/attach]
圖8-16  範例ex08_12.php。
作者: 小誌    時間: 2011-4-20 10:25

8-2-2-2   Or 或
使用邏輯運算子「And」,是符合所有條件的資料錄才會被列表出來,但是若下了很多的條件式,希望只要符合其中條件的資料就列表出來,那就必須使用邏輯運算子「Or」:
  1. Select *  From  transcript Where 國文>90 Or 英文>90
複製代碼
上式中國文成績大於90或者英文成績大於90的同學,都會被列表出來。


8-2-2-3   Between 介於
我要列表的是國文成績大於60而且國文成績小於90的同學,請問您該如何下句子?到目前所學的為止,您應該會這樣寫:
  1. Select * From transcript Where 國文>60 And國文<90
複製代碼
您這樣下指令是對的喔!但是對於相同欄位的資料篩選,這樣的做法比較麻煩,如果是相同欄位的篩選,我們可以用「Between」來完成,例如上例我們就可以改寫如下:(範例ex08_13.php)
  1. Select * From transcript Where 國文 Between 60 And 90
複製代碼
這樣做的好處是:篩選的執行速度較快!因為「國文>60 And國文<90」是使用了三個運算元來篩選,而「Between 60 And 90」只使用了一個運算元。SQL語言視「Between…And…」為一個運算元。
[attach]5644[/attach]
圖8-16  範例ex08_13.php。
作者: 小誌    時間: 2011-4-20 10:27

8-2-2-4   Like 近似篩選
我們剛剛所進行的都是「數值」篩選,如果篩選的內容是「文字」該怎麼辦?如果是要找「完全符合」的,同樣是使用「Where」與運算元「=」就行了,例如,我要列表「姓名」為「李明和」的資料:
  1. Select *  From  transcript Where 姓名 = ‘李明和’
複製代碼
請注意:「文字」的篩選條件值,必須前後以「’(單引號)」包括起來!上式中,我們所篩選列表的是「姓名」為欄位值完全符合「楊筆者」這個條件值的資料錄,如果我要的是「李XX」同學的資料列表該如何處理(即列出全部姓’李’的同學資料)?那就不可以用「=」了,而要改用「Like」關鍵字:
  1. Select *  From  transcript Where 姓名 Like ‘李﹪’
複製代碼
上式,您將會獲得「姓名」欄位資料開頭為「李」這個字的資料錄列表,如果說您要列表的是「姓名」欄位資料中含由「陶」這個字的資料錄,則您應該這樣寫:
  1. Select *  From  transcript  Where 姓名 Like ‘﹪陶﹪’
複製代碼
上式,您將會獲得「姓名」欄位資料中任意位置為「陶」這個字的資料錄列表。(範例ex08_14.php)
[attach]5645[/attach]
圖8-17  範例ex08_14.php。

提示!!
「﹪」百分比符號是一個萬用字元,可代替任意位置、任意長度的文字;除了「﹪」百分比符號外,還有一個「_(Under Line)」底線符號,它也是一個萬用字元,但是它只能代替一個長度的文字!
作者: 小誌    時間: 2011-4-20 10:28

8-2-2-5   In 多條件符合
我要列表的是「陳ㄚ扁」、「張雪友」、「彭佳會」這三位同學的資料,請問您該如何下句子?到目前所學的為止,您應該會這樣寫:
  1. Select * From  transcript  Where 姓名=’陳ㄚ扁’ Or姓名=’張雪友’ Or姓名=’彭佳會’
複製代碼
您這樣下指令也是對的喔!但是對於相同欄位的資料篩選,如果是數值資料,我們會用「Between」來完成,那如果是文字資料資則可以使用「In」來完成,例如上例我們就可以改寫如下:
  1. Select * From transcript Where 姓名 In (’陳ㄚ扁’,’張雪友’,’彭佳會’)
複製代碼
上式中「姓名」為「陳ㄚ扁」、「張雪友」或「彭佳會」的資料錄,都會被列表出來。(範例ex08_15.php)
[attach]5646[/attach]
圖8-18  範例ex08_15.php。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)