首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》10.3 从数据库中获取数据

关灯直达底部

在SQL中,经常使用的是SELECT语句。它通过选择匹配表中指定规则的行从数据库中获取数据。在许多情况下,可以通过不同的方法和选项来使用SELECT语句。

一个SELECT语句的基本格式如下所示:

SELECT[options]items

[INTO file_details]

FROM tables

[WHERE conditions]

[GROUP BY group_type]

[HAVING where_definition]

[ORDER BY order_type]

[LIMIT limit_criteria]

[PROCEDURE proc_name(arguments)]

[lock_options]

;

在接下来的内容中,我们将介绍该语句的每个子句。首先,查看没有任何可选子句的查询,该子句从特定的表中选择一些元素。通常,这些元素是表中的列。(它们也可以是任何MySQL表达式的结果。在本节后续内容中,我们将详细介绍一些有用的MySQL表达式。)该查询列出了customers表中的name列和city列的内容:

select name,city

from customers;

假设我们已经输入了程序清单10-1给出的样本数据,以及本章前面所给出的两个示例INSERT语句,该查询的执行结果如下所示:

+-----------------+--------------------+

|name|city|

+-----------------+--------------------+

|Julie Smith|Airport West|

|Alan Wong|Box Hill|

|Michelle Arthur|Yarraville|

|Melissa Jones|Nar Nar Goon North|

|Michael Archer|Leeton|

+-----------------+--------------------+

可以看到,我们已经从指定的表customers中得到了包含选中的元素——name和city。该数据显示的是customers表中各行数据。

通过在select关键字后给出列名称,可以指定任何数量的列。也可以指定一些其他元素。其中一个有用的是通配符“*”,它可以匹配指定的一个或多个表中所有列。例如,要获得order_items表中所有的列和行,可以使用如下所示的命令:

select*

from order_items;

以上命令的输出结果如下所示:

+---------+---------------+----------+

|orderid|isbn|quantity|

+---------+---------------+----------+

|1|0-672-31697-8|2|

|2|0-672-31769-9|1|

|3|0-672-31769-9|1|

|3|0-672-31509-2|1|

|4|0-672-31745-1|3|

+---------+---------------+----------+

10.3.1 获取满足特定条件的数据

要访问一个表中行的子集,需要指定一些选择条件。可以使用子句WHERE来实现。例如:

select*

from orders

where customerid=3;

将选择orders表中的所有列,但是只有customerid为5的行将被选中。如下所示的是以上代码的输出:

+---------+------------+--------+------------+

|orderid|customerid|amount|date|

+---------+------------+--------+------------+

|1|5|69.98|2007-04-02|

|4|5|24.99|2007-05-01|

+---------+------------+--------+------------+

WHERE子句指定了用于选择特定行的条件。在这个例子中,选择了customerid为5的行。

等于符号可以用来测试两者是否相等。请注意,这与PHP不同,当它们在一起使用的时候,容易造成混淆。

除了相等,MySQL还支持所有比较操作符和正则表达式。表10-1给出了在WHERE子句最经常用到的比较操作符。请注意,该表并不没有给出所有——如果需要使用本表中未列出的操作符,请查阅相关MySQL手册。

在上表的最后3行提到了LIKE与REGEXP。两者都是模式匹配形式。

LIKE使用简单的SQL模式匹配。模式可以由常规文本加上匹配任何数量字符的“%”(百分号),和只匹配一个字符的“_”(下画线)组成。

REGEXP关键词用于正则表达式的匹配。MySQL使用POSIX正则表达式。除了REGEXP之外,也可以使用RLIKE,它是REGEXP的别名。POSIX正则表达式也可以在PHP中使用。

请参阅第4章,了解关于正则表达式的详细介绍。

也可以使用简单的操作符和模式匹配语法以及适用AND和OR组合成更加复杂的条件,例如:

select*

from orders

where customerid=3 or customerid=4;