在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;