麻辣家族討論版版's Archiver

小誌 發表於 2011-4-20 10:22

8-2-2 Where條件篩選

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

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

小誌 發表於 2011-4-20 10:23

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

小誌 發表於 2011-4-20 10:25

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


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

小誌 發表於 2011-4-20 10:27

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

[color=Red]提示!![/color]
「﹪」百分比符號是一個萬用字元,可代替任意位置、任意長度的文字;除了「﹪」百分比符號外,還有一個「_(Under Line)」底線符號,它也是一個萬用字元,但是它只能代替一個長度的文字!

小誌 發表於 2011-4-20 10:28

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

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供