MySQL基础教程
01、MySQLMariaDB 基础教程
02、MySQL 简介
03、MySQL MariaDB 安装
04、MySQL 管理
05、MySQL 日常管理
06、MySQL PHP 语法
07、MySQL 创建连接
08、MySQL 获取数据库列表
09、MySQL 创建数据库
10、MySQL 删除数据库
11、MySQL 选择数据库
12、MySQL 数据类型
13、MySQL 列出数据表
14、MySQL 创建数据表
15、MySQL 删除表
16、MySQL 插入数据
17、MySQL 获取插入数据的 ID
18、MySQL SELECT FROM 查询数据
19、MySQL WHERE 子句有条件的查询数据
20、MySQL UPDATE 更新数据
21、MySQL DELETE FROM 语句删除数据
22、MySQL 返回删改查受影响的行数
23、MySQL LIKE 子句模糊查询数据
24、MySQL UNION 操作符查询多张表
25、MySQL ORDER BY 排序
26、MySQL GROUP BY 分组查询数据
27、MySQL JOIN 进行多表查询
28、MySQL NULL 值处理
29、MySQL REGEXP 子句正则表达式查询
30、MySQL 数据库事务
31、MySQL ALTER 命令
32、MySQL 索引
33、CREATE TEMPORARY TABLE 创建临时表
34、MySQL DROP TABLE 删除临时表
35、MySQL INSERT INTO SELECT 复制表
36、MySQL 获取服务器元数据
37、MySQL 自增序列 AUTO_INCREMENT
38、MySQL 处理重复数据
39、MySQL 安全及防止 SQL 注入攻击
40、MySQL 导出数据
41、MySQL 导入数据
本文档使用 MrDoc 发布
-
+
首页
19、MySQL WHERE 子句有条件的查询数据
可以在 `SELECT FROM` 语句中添加 `WHERE` 子句有条件地从表中选取数据 WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据 如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据 ### **WHERE 子句语法** ------------ SQL `SELECT` 语句使用 WHERE 子句从数据表中读取数据的通用语法如下 ```php 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' 的数据 ```php MariaDB [souyunku]> SELECT * FROM tbl_language WHERE name='Python'; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec) ``` 使用WHERE id >= 2 查询表 tbl_language 中所有 id 大于等于 2 的数据 ```php MariaDB [souyunku]> SELECT * FROM tbl_language WHERE id >= 2; +----+------+----------------------------+------------+ | id | name | url | founded_at | +----+------+----------------------------+------------+ | 2 | PHP | http://www.php.net | 1994-01-01 | | 3 | Ruby | https://www.ruby-lang.org/ | 1996-12-25 | +----+------+----------------------------+------------+ 2 rows in set (0.00 sec) ``` ### **BINARY 关键字** ------------ MySQL 的 WHERE 子句的字符串比较是不区分大小写的 ```php MariaDB [souyunku]> SELECT * FROM tbl_language WHERE name='Python'; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec) MariaDB [souyunku]> SELECT * FROM tbl_language WHERE name='python'; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec) ``` 如果要区分大小写,可以添加 `BINARY` 关键字来设定 WHERE 子句的字符串比较是区分大小写的 `BINARY name='python'` 没有数据 ```php MariaDB [souyunku]> SELECT * FROM tbl_language WHERE BINARY name='python'; Empty set (0.01 sec) ``` `BINARY name='Python'` 有数据 ```php MariaDB [souyunku]> SELECT * FROM tbl_language WHERE BINARY name='Python'; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec) ``` 在 PHP 脚本使用 WHERE 读取数据 PHP可以使用 `PDO::query()` 函数来查询某个表中的数据 PDO::query() 函数原型 PDO::query() 有四个函数重载 ```php 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 <?php $sql= "SELECT * FROM tbl_language WHERE name='Python';"; try { $dbh = new PDO('mysql:host=127.0.0.1;dbname=souyunku', 'root', ''); $stmt = $dbh->query($sql); foreach($stmt as $row) { var_dump($row); } catch (PDOException $e) { echo "错误!: " , $e->getMessage() , "\n"; ``` 输出结果如下 ```php $ php main.php array(8) { ["id"]=> string(1) "1" [0]=> string(1) "1" ["name"]=> string(6) "Python" [1]=> string(6) "Python" ["url"]=> string(19) "https://baidu.com" [2]=> string(19) "https://baidu.com" ["founded_at"]=> string(10) "1991-02-20" [3]=> string(10) "1991-02-20" ``` 可以看到数据只有一条,就是 name 为 Python 的
李智
2025年3月17日 13:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码