前面介紹了利用 SELECT 命令從表中獲取數(shù)據(jù)。利用一種叫做 WHERE 子句的條件子句可以過濾結(jié)果。使用 WHERE 子句可以制定選擇規(guī)則,從表中選擇我們所需的記錄。
利用 SELECT 命令與 WHERE 子句從表中獲取數(shù)據(jù)的一般語法格式如下所示:
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
WHERE 子句的運作方式就像編程語言中的 if 條件語句一樣。它會將給定值與MySQL表中的字段值進行對比,如果兩值相等,則返回MySQL表中字段值的所在的行。
下面這張表列出了 WHERE 子句中使用的一些運算符。
假設(shè)字段 A 保存 10 這個值,字段 B 保存著 20,那么:
運算符 | 說明 | 范例 |
---|---|---|
= |
檢查兩個操作數(shù)是否相等。如果相等,則條件為真。 | (A = B) 非真 |
!= |
檢查兩個操作數(shù)是否相等。如果不相等,則條件為真。 | (A != B) 為真 |
> |
檢查左側(cè)操作數(shù)是否大于右邊的操作數(shù)。如果大于,則條件為真。 | (A > B) 非真 |
< |
檢查左側(cè)操作數(shù)是否小于右側(cè)操作數(shù)。如果小于,則條件為真。 | (A < B) 為真 |
>= |
檢查左側(cè)操作數(shù)是否大于或等于右側(cè)操作數(shù)。如果是,則條件為真。 | (A >= B) 非真 |
<= |
檢查左側(cè)操作數(shù)是否小于或等于右側(cè)操作數(shù)。如果是,則條件為真 | (A <= B) 為真 |
WHERE 子句可以非常方便地獲取表中選定的行,尤其與 MySQL 的 Join 一起使用時。Join 稍后將擇章另述。
另外,為了加快搜索,往往使用主鍵搜索記錄。
如果表中記錄并不匹配給定條件,查詢不會返回任何數(shù)據(jù)。
使用 SQL 的 SELECT 命令與 WHERE 子句獲取 表 tutorials_tbl 中的選定數(shù)據(jù)。
以下范例將返回表 tutorials_tbl 中作者名稱(author name)為 Sanjay 的所有記錄。
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author='Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)
mysql>
除非對字符串采用 LIKE 比對,否則默認比對是不區(qū)分大小寫的。要想讓搜索對大小寫敏感,可以如下例一般,使用 BINARY 關(guān)鍵字。
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
WHERE BINARY tutorial_author='sanjay';
Empty set (0.02 sec)
mysql>
要想獲取表中數(shù)據(jù),也可以使用 PHP 函數(shù) mysql_query(),同時配合使用 SQL 的 SELECT 命令與 WHERE 子句。先用 mysql_query()
執(zhí)行 SQL 命令,再用另一 PHP 函數(shù) mysql_fetch_array() 來獲取所有選定數(shù)據(jù)。mysql_fetch_array()
會將行以關(guān)聯(lián)數(shù)組、數(shù)值數(shù)組,或者兩種兼有》》的形式返回。如果未選定任何數(shù)據(jù),則該函數(shù)返回 FALSE。
以下范例將返回表 tutorials_tbl 中作者名為 Sanjay 的所有記錄。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author="Sanjay"';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>