select [straight_join] [sql_small_result] [sql_big_result] [high_priority] [distinct|distinctrow|all] select_list [into {outfile|dumpfile} 'file_name' export_options] [from table_references [where where_definition] [group by col_name,...] [having where_definition] [order by {unsighed_integer|col_name|formura} [asc|desc],...] [limit [offset,] rows] [procedure procedure_name]]
从这个基本语法可以看出,最简单的select语句是select select_list,实际上利用这个最简单的select语句,你也可以完成许多你期待的功能,首先你能利用它进行mysql所支持的任何运算,例如:select 1 1,它将返回2;其次,你也能利用它给变量赋值,而在php中,运用select语句的这种功能,你就可以自由地运用mysql的函数为php程序进行各种运算,并赋值给变量。在很多的时候,你会发现mysql拥有许多比php更为功能强大的函数。
straight_join、sql_small_result、sql_big_result、high_priority是mysql对ansi sql92的扩展。如果优化器以非最佳次序联结表,使用straight_join可以加快查询。
sql_small_result和sql_big_result是一组相对的关键词。它们必须与group by、distinct或distinctrow一起使用。sql_small_result告知优化器结果会很小,要求mysql使用临时表存储最终的表而不是使用排序;反之,sql_big_result告知优化器结果会很小,要求mysql使用排序而不是做临时表。
high_priority将赋予select比一个更新表的语句更高的优先级,使之可以进行一次优先的快速的查询。
以上四个关键词的使用方法的确比较晦涩。幸运的是,在绝大多数情况下,在mysql中我们完全可以选择不使用这四个关键词。
distinct、distinctrow对查询返回的结果集提供了一个最基本但是很有用的过滤。那就是结果集中只含非重复行。在这里要注意的是,对关键词distinct、distinctrow来说,空值都是相等的,无论有多少null值,只选择一个。而all的用法就有画蛇添足之嫌了。它对结果集的产生没有任何影响。
into {outfile|dumpfile} 'file_name' export_options,将结果集写入一个文件。文件在服务器主机上被创建,并且不能是已经存在的。语句中的export_options部分的语法与用在load datainfile语句中的fields和lines子句中的相同,我们将在mysql进阶_load data篇中详细讨论它。而outfile与dumpfile的关键字的区别是:后前只写一行到文件,并没有任何列或行结束。
