十九、MySQL WHERE 子句有条件的查询数据



十九、MySQL WHERE 子句有条件的查询数据

可以在 SELECT FROM 语句中添加 WHERE 字句有条件地从表中选取数据

WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据

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

WHERE 字句语法

SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法如下

SELECT field1, field2,...fieldN FROM table1, table2...
[WHERE condition1 [AND [OR]] condition2.....
  • SELECT 语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用 WHERE 语句来设定查询条件
  • 可以在 WHERE 子句中指定任何条件
  • 可以使用 AND 或者 OR 指定一个或多个条件
  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令

WHERE 字句支持的操作符

下表列出了 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> 命令提示窗口中执行 SELECT FROM WHERE SQL 语句有条件的查询某个表中的数据

下面的代码使用 SELECT FROM WHERE SQL 语句查询表 tbl_language 中所有 name='Python' 的数据

MariaDB [test2]> SELECT * FROM tbl_language WHERE name='Python';
+----+--------+---------------------+------------+
| id | name   | url                 | founded_at |
+----+--------+---------------------+------------+
|  1 | Python | python | 1991-02-20 |
+----+--------+---------------------+------------+
1 row in set (0.00 sec)

使用 WHERE id >= 2 查询表 tbl_language 中所有 id 大于等于 2 的数据

MariaDB [test2]> SELECT * FROM tbl_language WHERE id >= 2;
+----+------+----------------------------+------------+
| id | name | url                        | founded_at |
+----+------+----------------------------+------------+
|  2 | PHP  | php   				    | 1994-01-01 |
|  3 | Ruby | ruby 						| 1996-12-25 |
+----+------+----------------------------+------------+
2 rows in set (0.00 sec)

BINARY 关键字

MySQL 的 WHERE 子句的字符串比较是不区分大小写的

MariaDB [test2]> SELECT * FROM tbl_language WHERE name='Python';
+----+--------+---------------------+------------+
| id | name   | url                 | founded_at |
+----+--------+---------------------+------------+
|  1 | Python | python				| 1991-02-20 |
+----+--------+---------------------+------------+
1 row in set (0.00 sec)

MariaDB [test2]> SELECT * FROM tbl_language WHERE name='python';
+----+--------+---------------------+------------+
| id | name   | url                 | founded_at |
+----+--------+---------------------+------------+
|  1 | Python | python				 | 1991-02-20 |
+----+--------+---------------------+------------+
1 row in set (0.00 sec)

如果要区分大小写,可以添加 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的

BINARY name='python' 没有数据

MariaDB [test2]> SELECT * FROM tbl_language WHERE BINARY  name='python';
Empty set (0.01 sec)

BINARY name='Python' 有数据

MariaDB [test2]> SELECT * FROM tbl_language WHERE BINARY  name='Python';
+----+--------+---------------------+------------+
| id | name   | url                 | founded_at |
+----+--------+---------------------+------------+
|  1 | Python | python				 | 1991-02-20 |
+----+--------+---------------------+------------+
1 row in set (0.00 sec)

在 PHP 脚本使用 WHERE 读取数据

PHP 可以使用 PDO::query() 函数来查询某个表中的数据

PDO::query() 函数原型

PDO::query() 有四个函数重载

PDOStatement PDO::query ( string $statement )

PDOStatement PDO::query ( string $statement , int $PDO::FETCH_COLUMN , int $colno )

PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs )

PDOStatement PDO::query ( string $statement , int $PDO::FETCH_INTO , object $object )

如果成功,PDO::query() 返回 PDOStatement 对象,如果失败返回 FALSE

参数

参数 说明
statement 要被预处理和执行的 SQL 语句,查询中的数据应该被妥善地转义

第二个参数有以下几个可选值,默认为 PDO::FETCH_BOTH

说明
PDO::FETCH_ASSOC 返回一个索引为结果集列名的数组
PDO::FETCH_BOTH 默认,返回一个索引为结果集列名和以0开始的列号的数组
PDO::FETCH_BOUND 返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量
PDO::FETCH_CLASS 返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS |PDO::FETCH_CLASSTYPE),则类名由第一列的值决定
PDO::FETCH_INTO 更新一个被请求类已存在的实例,映射结果集中的列到类中命名的属性
PDO::FETCH_LAZY 结合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,创建供用来访问的对象变量名
PDO::FETCH_NUM 返回一个索引为以0开始的结果集列号的数组
PDO::FETCH_OBJ 返回一个属性名对应结果集列名的匿名对象

我们使用默认的 PDO::FETCH_BOTH 获取 name 字段为 Python 的数据

<?php 
$sql= "SELECT * FROM tbl_language WHERE name='Python';";

try {


    $dbh = new PDO('mysql:host=127.0.0.1;dbname=test2', 'root', '');    

    $stmt = $dbh->query($sql);

    foreach($stmt as $row)
    {
        var_dump($row);
    }
}
catch (PDOException $e) 
{    
    echo "错误!: " , $e->getMessage() , "\n";  
}

输出结果如下

array(8) {
  ["id"]=>
  string(1) "1"
  [0]=>
  string(1) "1"
  ["name"]=>
  string(6) "Python"
  [1]=>
  string(6) "Python"
  ["url"]=>
  string(19) "python"
  [2]=>
  string(19) "python"
  ["founded_at"]=>
  string(10) "1991-02-20"
  [3]=>
  string(10) "1991-02-20"
}

可以看到数据只有一条,就是 namePython

------本页内容已结束,喜欢请分享-456源码网------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容