位置:首頁 > 數據庫 > MySQL教學 > MySQL Where子句

MySQL Where子句

我們已經看到使用SQL SELECT命令從MySQL表中獲取數據。我們可以用 WHERE子句來篩選出結果的條件子句。使用WHERE子句,我們可以指定一個選擇標準,從表中選擇所需的記錄。

語法

下麵是SELECT命令使用WHERE子句來從MySQL表數據的通用SQL語法:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 可以使用逗號分隔一個或多個表,以及WHERE子句包括各種條件,但WHERE子句隻是SELECT命令的可選部分

  • 可以指定使用任何條件在WHERE子句中

  • 可以指定一個以上的條件在使用AND或OR運算符中

  • WHERE子句可以用DELETE 或 UPDATE的SQL命令一起,也可以指定一個條件使用。

WHERE子句就像是if一個條件在編程語言中, 此子句是用來比較給定值的字段值在MySQL表是否可用。如果從外部給定值等於在MySQL表可用字段值,那麼它返回該行。

這裡是運算符的列表,它可以在WHERE子句中使用。

假設字段A=10,字段B=20,則:

操作符 描述 示例
= 檢查兩個操作數的值是否相等,如果是,則條件變為真。 (A = B) 不為 true.
!= 檢查兩個操作數的值是否相等,如果值不相等,則條件變為真。 (A != B) 為 true.
> 檢查左操作數的值是否大於右操作數的值,如果是,則條件為真。 (A > B) 不為 true.
< 檢查左操作數的值是否小於右操作數的值,如果是,則條件為真。 (A < B) 為 true.
>= 檢查左操作數的值是否大於或等於右操作數的值,如果是,則條件為真。 (A >= B) 不為 true.
<= 檢查左操作數的值是否小於或等於右操作數的值,如果是,則條件變為真。 (A <= B) 為 true.

當想要從一個表中提取所選行,尤其是當使用MySQL聯接的WHERE子句是非常有用的。 聯接在另一章討論。

搜索使用主鍵進行快速搜索記錄是常見的做法。

如果給定的條件不匹配表任何記錄,那麼查詢將不會返回任何行。

1、從命令行提示符讀取數據

使用SQL SELECT命令以及WHERE子句,從MySQL表tutorials_tbl選擇獲取數據。

示例

下麵的例子將從tutorials_tbl表中作者的名字是yiibai所有記錄返回:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author='yiibai';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           3 | JAVA Tutorial  | yiibai          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

除非執行字符串LIKE比較,比較是不區分大小寫。可以使用BINARY關鍵字使搜索區分大小寫如下:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> SELECT * from tutorials_tbl \
          WHERE BINARY tutorial_author='yiibai';
Empty set (0.02 sec)

mysql>

使用PHP腳本提取數據

可以使用相同的SQL SELECT命令及WHERE子句在PHP的mysql_query()函數。此函數用於執行SQL命令,之後另一個PHP的 mysql_fetch_array()函數可用於獲取所有選定的數據。這個函數返回一行作為關聯數組,數字數組,或兩者兼而有。如果冇有更多的行這個函數返回FALSE。

示例

下麵的例子將從tutorials_tbl表中作者的名字是yiibai所有記錄返回:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$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="yiibai"';

mysql_select_db('test');
$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);
?>