|
7-4
巢狀查詢:in
連結
內容:
7-4-1 In
連結語法
當子查詢的結果超過一個的時候,則需用
in 連結,基本語法如下:
Select
欄位_1,
欄位_2,
.. //
父查詢敘述
From
資料表_1
Where
欄位
in (select item //
子查詢敘述
From
資料表_2
Where
條件敘述); |
譬如,子查詢的結果有
3 個(A、B、C),則一個(A)接一個(B)進入父查詢執行,總共執行
3 次。
7-4-2
範例研討:查詢班級開課
(A)
系統需求:Ex7_7
教務處希望製作一個可提供查詢班級開課課程網頁,期望查詢網頁如下:
查詢結果的網頁如下:
(B) SQL
製作技巧
全校所有開課課程登錄於
open_course 表內,由
class_ID 表示開在哪一班,course_ID
為課程代碼。首先須由
classes 表查出哪一班級的班級代碼
(class_ID),又利用
course_ID 由
all_course
表查出課程資料,但每班課程會超過一門,因此用『in』連結,SQL語法如下:
(假設查詢『進四資管二丙』。
select course_ID, course_name, required, credit
from all_course
where course_ID in
(select course_ID
from open_course
where class_ID = $class_ID); |
(C)
網頁設計技巧
此題目需要三個查詢命令連結,吾人可將第一個命令
(查詢
class_ID) 由『選單網頁』完成,它再將
class_ID
傳遞給『執行網頁』,再執行兩個查詢命令,如下圖:
(D)
表單網頁程式:Ex7_7-form.php
我們開啟
classes 表查詢
class_ID 與
class_name,將它製作成下拉式選單,使用者點選後,傳遞
class_ID 給處理網頁。範例如下:
(與
Ex7_6-form.php 雷同)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
<?php
$select_db = mysqli_connect("localhost",
"root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢所有班級名稱與班級代碼
$sql_query = "select
class_ID, class_name
from
classes";
$result = mysqli_query($select_db, $sql_query);
echo "<p><font size='3'>
查詢班級名冊
</font></p>";
echo "<form name='表單'
method='post' action='Ex7_7-action.php'>";
echo "選擇班級:";
echo "<select name='class_ID'>";
while($row=mysqli_fetch_row($result)) {
echo "<option value='$row[0]'>
$row[1]($row[0])</option><BR>";
}
echo "</select>";
echo "<BR><BR>";
echo "<input type='submit' value='送出'>";
echo "</form>";
mysql_close($db_link);
?> |
(E)
執行網頁的程式:Ex7_7-action.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
<?php
$class_ID = $_POST["class_ID"];
$select_db = mysqli_connect("localhost",
"root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢班級名冊
$sql_query = "select
course_ID, course_name, required, credit
from
all_course
where
course_ID in (select course_ID
from open_course
where class_ID = $class_ID)";
$result = mysqli_query($select_db, $sql_query);
//
列印班級名冊
$items = array("課程代碼","課程名稱","必選修","學分數");
echo "<table border = '2'><tr
align='center'>";
for($i=0; $i<4; $i++) {
echo "<td>".$items[$i]."</td>";
}
echo "</tr>";
while($row=mysqli_fetch_row($result)) {
echo "<tr>";
for($j=0; $j<mysqli_num_fields($result);
$j++) {
echo "<td>$row[$j]</td>";
}
echo "</tr>";
}
mysql_close($db_link);
?> |
7-4-3範例研討:查詢課程教師
備註:『執行網頁』使用
foreach 迴圈。
(A)
程式功能:Ex7-8
請製作一個用『課程名稱』查詢這學期有那些老師開這門課,期望『表單網頁』如下:課程有哪幾位老師的姓名,結果如下:
查詢結果的『執行網頁』查詢結果如下:
(B) SQL
製作技巧
全校這學期所開的課程都登錄於
open_course 資表內,但裡面僅記錄課程編碼
course_ID,因此需利用課程名稱由
all_course 表查出其
course_ID。另一方面,由
course_ID
查出開課教師編碼,該課程可能有多位老師開,因此需用『in』連結
teachers 表查出教師名稱,SQL語法如下:
(假設查詢『資料庫管理系統』。
select teacher_ID, name
from teachers
where teacher_ID in
(select teacher_ID
from open_course
where course_ID = (select course_ID
from all_course
where course_name = "資料庫管理系統"); |
(C)
網頁設計技巧
此題目需要三個查詢命令連結,吾人可將第一個命令
(查詢
course_ID) 由『選單網頁』完成,它再將
course_ID
傳遞給『執行網頁』,再執行兩個查詢命令,如下圖:
(D)
表單網頁程式:Ex7_8-form.php
我們開啟
all_course 表查詢
course_ID 與
course_name,將它製作成下拉式選單,使用者點選後,傳遞
course_ID 給處理網頁。範例如下:
(與
Ex7_7-form.php 雷同)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
<?php
$select_db = mysqli_connect("localhost",
"root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢所有班級名稱與班級代碼
$sql_query = "select course_ID, course_name
from all_course";
$result = mysqli_query($select_db, $sql_query);
echo "<p><font size='3'>
查詢開課課程教師
</font></p>";
echo "<form name='表單'
method='post' action='Ex7_8-action.php'>";
echo "選擇課程名稱:";
echo "<select name='course_ID'>";
while($row=mysqli_fetch_row($result)) {
echo "<option value='$row[0]'>
$row[1]($row[0])</option><BR>";
}
echo "</select>";
echo "<BR><BR>";
echo "<input type='submit' value='送出'>";
echo "</form>";
mysql_close($db_link);
?> |
(E)
執行網頁的程式:Ex7_8-action.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 |
<?php
$course_ID = $_POST["course_ID"];
$select_db = mysqli_connect("localhost",
"root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢開課課程教師
$sql_query = "select teacher_ID, name
from teachers
where teacher_ID in (select
teacher_ID
from open_course
where course_ID =
'$course_ID')";
$result = mysqli_query($select_db, $sql_query);
$items = array("教師編碼","教師姓名");
echo "<table border = '2'><tr
align='center'>";
//
利用
foreach 迴圈印出陣列
foreach ($items as $value) {
echo "<td> $value </td>";
}
echo "</tr>";
while($row=mysqli_fetch_row($result)) {
echo "<tr>";
for($j=0; $j<mysqli_num_fields($result);
$j++) {
echo "<td>$row[$j]</td>";
}
echo "</tr>";
}
echo "</table>";
mysql_close($db_link);
?> |
7-4-4
範例研討:查詢系所開課
備註:兩只
in 連結。
(A)
系統需求:Ex7_9
請製作一個可以查詢某一系這學期開了哪些課程(列出課程名稱,與相關資料)。期望查詢網頁如下:
查詢結果的網頁如下:
(B) SQL
製作技巧
SQL
查詢技巧如下圖所示:使用者輸入『系別名稱』(dep_name)
由
department 表查詢出
Dep_ID,再利用
Dep_ID 由
teachers 表內查詢出該系所所有教師的
teacher_ID,應該多位教師,因此用
in 連結到
open_course 表查詢該系所開課程的
course_ID,也應該有多門課,用
in 連結
all_course 表查詢課程資料。
SQL 程式如下:
Select *
Form all_course
Where course_ID in
(Select course_ID
from open_course as A
Where teacher_ID in
(Select teacher_ID
From teachers
Where Dep_ID = ‘$dep_ID’)); |
(C)
網頁製作技巧
『表單網頁』製作下拉式選單由
department 表查詢出
Dep_ID,傳送給『執行網頁』,由它利用兩個
in 連結由
teachers、open_course、all_course
查詢出結果,如下圖所示:
(D)
表單網頁:Ex7_9-form.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
<?php
$select_db = mysqli_connect("localhost", "root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢系所編碼
$sql_query = "select Dep_ID, dep_name
from department";
$result = mysqli_query($select_db, $sql_query);
echo
"<p><font size='3'>
查詢系所開課課程資料
</font></p>";
echo
"<form name='表單'
method='post' action='Ex7_9-action.php'>";
echo "選擇系別名稱:";
echo "<select name='Dep_ID'>";
while($row=mysqli_fetch_row($result)) {
echo "<option value='$row[0]'>
$row[1]($row[0])</option><BR>";
}
echo "</select>";
echo "<BR><BR>";
echo "<input type='submit' value='送出'>";
echo "</form>";
mysql_close($db_link);
?> |
(E)
接收與處理網頁:Ex7_9-action.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 |
<?php
$Dep_ID = $_POST["Dep_ID"];
$select_db = mysqli_connect("localhost", "root", "12345678", "course_db")
or die("MySQL
伺服器連結失敗
<br>");
//
查詢系所開課課程
$sql_query
= "select course_ID, course_name,
required, credit
from all_course
where course_ID in (select course_ID
from open_course
where teacher_ID in (select teacher_ID
from teachers
where Dep_ID = '$Dep_ID'))";
$result = mysqli_query($select_db, $sql_query);
$items = array("課程編碼","課程名稱",
"必選修",
"學分數");
echo "<table border = '2'><tr align='center'>";
//
利用
foreach
迴圈印出陣列
foreach ($items as $value) {
echo "<td> $value </td>";
}
echo "</tr>";
while($row=mysqli_fetch_row($result)) {
echo "<tr>";
for($j=0; $j<mysqli_num_fields($result); $j++) {
echo "<td>$row[$j]</td>";
}
echo "</tr>";
}
echo "</table>";
mysql_close($db_link);
?> |
|
翻轉工作室:粘添壽
course_db 關聯圖
資料庫程式設計:
翻轉電子書系列:
|