本文针对MySQL数据库中的SELECT语句快速精细掌握
MySQL中SELECT语句的基本语法是
WordWRAP: breakword bgColor=#fff>以下是引用片段
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 +它将返回;其次你也能利用它给变量赋值而在PHP中运用SELECT语句的这种功能你就可以自由地运用MySQL的函数为PHP程序进行各种运算并赋值给变量在很多的时候你会发现MySQL拥有许多比PHP更为功能强大的函数
STRAIGHT_JOINSQL_SMALL_RESULTSQL_BIG_RESULTHIGH_PRIORITY是MySQL对ANSI SQL的扩展如果优化器以非最佳次序联结表使用STRAIGHT_JOIN可以加快查询
SQL_SMALL_RESULT和SQL_BIG_RESULT是一组相对的关键词它们必须与GROUP BYDISTINCT或DISTINCTROW一起使用SQL_SMALL_RESULT告知优化器结果会很小要求MySQL使用临时表存储最终的表而不是使用排序;反之SQL_BIG_RESULT告知优化器结果会很小要求MySQL使用排序而不是做临时表
HIGH_PRIORITY将赋予SELECT比一个更新表的语句更高的优先级使之可以进行一次优先的快速的查询
以上四个关键词的使用方法的确比较晦涩幸运的是在绝大多数情况下在MySQL中我们完全可以选择不使用这四个关键词
DISTINCTDISTINCTROW对查询返回的结果集提供了一个最基本但是很有用的过滤那就是结果集中只含非重复行在这里要注意的是对关键词DISTINCTDISTINCTROW来说空值都是相等的无论有多少NULL值只选择一个而ALL的用法就有画蛇添足之嫌了它对结果集的产生没有任何影响
INTO {OUTFILE|DUMPFILE} file_name export_options将结果集写入一个文件文件在服务器主机上被创建并且不能是已经存在的语句中的export_options部分的语法与用在LOAD DATAINFILE语句中的FIELDS和LINES子句中的相同我们将在MySQL进阶_LOAD DATA篇中详细讨论它而OUTFILE与DUMPFILE的关键字的区别是后前只写一行到文件并没有任何列或行结束
select list其中可以包含一项或多项下列内容
*表示按照create table的顺序排列的所有列
按照用户所需顺序排列的列名的清单
可以使用别名取代列名形式如下column name as column_heading
表达式(列名常量函数或以算术或逐位运算符连接的列名常量和函数的任何组合)
内部函数或集合函数
上述各项的任何一种组合
FROM决定SELECT命令中使用哪些表一般都要求有此项除非select_list中不含列名(例如只有常量算术表达式等)如果表项中有多个表用逗号将之分开在关键词FROM后面的表的顺序不影响结果
表名可以给出相关别名以便使表达清晰这里的语法是tbl_name [AS] alias_name例如
select tnametsalary from employee as tinfo as t where tname=tname与select tnametsalary from employee tinfo t where tname=tname是完全等价的
所有对该表的其他引用例如在where子句和having子句中都要用别名别名不能以数字开头
[] []