English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL WHERE子句

Sabemos que se lee datos de una tabla de MySQL utilizando la sentencia SELECT de SQL.

Para seleccionar datos de una tabla con condiciones, puedes agregar la cláusula WHERE a la sentencia SELECT.

Sintaxis

La siguiente es la sintaxis general de la cláusula WHERE en la sentencia SELECT de SQL para leer datos de una tabla.

SELECT campo1, campo2,...campoN FROM nombre_de_tabla1, nombre_de_tabla2...
[WHERE condición1 [AND [OR]] condición2.....
  • En una consulta, puedes usar una o más tablas, separadas por comas, y establecer condiciones de búsqueda con la cláusula WHERE.

  • Puedes especificar cualquier condición en la cláusula WHERE.

  • Puedes especificar una o más condiciones utilizando AND o OR.

  • La cláusula WHERE también se puede aplicar a comandos DELETE o UPDATE de SQL.

  • La cláusula WHERE es similar a una condición if en un lenguaje de programación, que lee datos específicos según los valores de los campos de una tabla de MySQL.

以下为操作符列表,可用于 WHERE 子句中。

下表中示例假定 A 为 10, B 为 20

操作符描述示例
=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false。
, !=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true。
>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A > B) 返回false。
<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A < B) 返回 true。
>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A >= B) 返回false。
<=小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A <= B) 返回 true。

如果我们想在 MySQL 数据表中读取指定的数据,WHERE 子句是非常有用的。

使用主键来作为 WHERE 子句的条件查询是非常快速的。

如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。

从命令提示符中读取数据

我们将在SQL SELECT语句使用WHERE子句来读取MySQL数据表 w3codebox_tbl 中的数据:

示例

以下示例将读取 w3codebox_tbl 表中 w3codebox_author 字段值为 Sanjay 的所有记录:

SELECT * from w3codebox_tbl WHERE w3codebox_author='基础教程网';

输出结果:

MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY palabra clave 来设定 WHERE 子句的字符串比较是区分大小写的。

以下示例:

BINARY palabra clave

mysql> SELECT * from w3codebox_tbl WHERE BINARY w3codebox_author='oldtoolbag.com';
Empty set (0.01 sec)
 
mysql> SELECT * from w3codebox_tbl WHERE BINARY w3codebox_author='oldtoolbag.com';
+----------+-------------+--------------+-----------------+
| w3codebox_id | w3codebox_title | w3codebox_author | submission_date |
+----------+-------------+--------------+-----------------+
|        1 | 学习 PHP         | oldtoolbag.com       | 2018-04-14      |
|        2 | 学习 MySQL       | oldtoolbag.com       | 2018-04-14      |
|        3 | JAVA 教程       | oldtoolbag.com       | 2018-04-14      |
+----------+-------------+--------------+-----------------+
3 rows in set (0.00 sec)

示例中使用了 BINARY 关键字,是区分大小写的,所以 w3codebox_author='oldtoolbag.com' 的查询条件是没有数据的。

使用PHP脚本读取数据

你可以使用 PHP 函数的 mysqli_query() 及相同的 SQL SELECT 带上 WHERE 子句的命令来获取数据。

该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来输出所有查询的数据。

在线示例

以下示例将从 w3codebox_tbl 表中返回使用 w3codebox_author 字段值为 oldtoolbag.com 的记录:

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn)
{
    die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn, "set names utf8);
 
// 读取 w3codebox_author 为 oldtoolbag.com 的数据
$sql = 'SELECT w3codebox_id, w3codebox_title, 
        w3codebox_author, submission_date
        FROM w3codebox_tbl
        WHERE w3codebox_author="oldtoolbag.com"';
 
mysqli_select_db($conn, 'w3codebox');
$retval = mysqli_query($conn, $sql);
if(! $retval)
{
    die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>基础教程网 MySQL WHERE子句测试<h2>
echo '<table border="1><tr><td>教程ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
    echo "<tr><td> {$row['w3codebox_id']}</td> ".
         "<td>{$row['w3codebox_title']} </td> ".
         "<td>{$row['w3codebox_author']} </td> ".
         "<td>{$row['submission_date']} </td> ".
         "</tr>";
}
echo '</table>';
// 释放内存
mysqli_free_result($retval);
mysqli_close($conn);
?>

输出结果如下所示: