9-1 認識DML指令(9-1-1 Select指令)
- 帖子
- 1195
- 主題
- 395
- 精華
- 113
- 積分
- 1747
- 點名
- 0
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2025-5-11
      
|
9-1 認識DML指令(9-1-1 Select指令)
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 1195
- 主題
- 395
- 精華
- 113
- 積分
- 1747
- 點名
- 0
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2025-5-11
      
|
2#
發表於 2011-4-21 18:50
| 只看該作者
當我們將這「進階查詢指令」應用於程式中將可得到圖9-3的結果,被條列出來的員工都是休假天數超過三天者。
ex09_01.php- <?
- $conn = mysql_connect("localhost", "root", "12345a");
- if(@mysql_select_db("LEAVE", $conn))
- {
- //指定提取資料的校對字元表
- mysql_query("set character set big5");
- //資料庫存在,建立SQL命令字串
- $SQL="Select * From Factoryman where 姓名 In" .
- "(Select 姓名 From laik Where 天數>3)"; //將回傳結果存放於變數中
- $datalist=mysql_query($SQL);
- //取得欄位數量
- $fieldnum=mysql_num_fields($datalist);
- ?>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=big5">
- <title>範例ex09_01</title>
- </head>
- <center><table border=1 width=100%>
- <?
- /**************列出欄位抬頭***************/
- echo "<tr>";
- for ($x=0 ;$x<$fieldnum;$x++)
- {
- echo "<td>" . mysql_field_name($datalist,$x) . "</td>";
- }
- echo "</tr>";
- /**************列出欄位資料***************/
- //將資料錄轉換為欄位陣列集合
- while ($fielddatas=mysql_fetch_array($datalist))
- {
- //輸出欄位資料
- echo "<tr>";
- for ($x=0;$x<$fieldnum;$x++)
- {
- echo "<td>" . $fielddatas[$x] . "</td>";
- }
- echo "</tr>";
- }
- ?>
- <table></body>
- </html>
- <?
- }
- else
- {
- echo "資料庫不存在";
- }
- ?>
複製代碼
圖9-3 範例ex09_01.php。 |
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 1195
- 主題
- 395
- 精華
- 113
- 積分
- 1747
- 點名
- 0
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2025-5-11
      
|
5#
發表於 2011-4-21 18:54
| 只看該作者
分組篩選
Group By指令了可以用來排序外,也可以同時加上排序指令來進行資料排序,例如:我們以「假別」為分組依據,利用Order By指令針對休假天數來排序:- Select 假別,Sum(天數) AS 休假總天數 From laik Group By假別 Order By休假總天數
複製代碼 除了排序之外,我們還可加上Where指令先進行資料篩選後再進行分組與排序:- Select 假別,Sum(天數) AS 休假總天數 From laik Where
- 年=86 Group By假別 Order By休假總天數
複製代碼 上兩式的敘述執行結果如圖9-8,要特別注意到一點:使用Where指令進行篩選,只能夠在原始資料的情況下進行篩選的動作,也就是說,篩選資料的動作必須發生於分組動作之前,不能在分組動作完成之後才使用Where指令進行分組結果的篩選!
圖9-8 圖左為分組與排序;圖右為資料篩選後再進行分組與排序。 |
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 1195
- 主題
- 395
- 精華
- 113
- 積分
- 1747
- 點名
- 0
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2025-5-11
      
|
7#
發表於 2011-4-21 18:56
| 只看該作者
那我可不可以更改篩選的條件值?可以,您不但可以使用「虛擬」欄位為篩選的根據,如下例:- Select 年,姓名,假別,sum(天數) AS 年休假數 From 休假記錄
- Group By 年,姓名,假別 Having 年休假數>2
複製代碼 上式中的「年休假數」雖然是「Sum(天數)」的計算結果,它也是一個「虛擬」欄位,不是資料庫中的真實欄位,但是卻能用來做為篩選的根據。
如果您要使用「計算」欄位做為篩選根據,也可以撰寫成下式:(範例ex09_05.php)- SQL="Select 年,姓名,假別,sum(天數) AS 年休假數 From 休假記錄 " &_
- "Group By 年,姓名,假別 Having sum(天數)>2"
- CMD.CommandText=SQL
複製代碼 執行結果如下圖:
圖9-11 範例ex09_05.php。 |
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|