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); ?>