mysql reference manual for version 4.1.0-alpha.
6.4 数据操纵:select, insert,
update, delete
6.4.1 select 句法
select [straight_join]
[sql_small_result] [sql_big_result] [sql_buffer_result]
[sql_cache | sql_no_cache] [sql_calc_found_rows] [high_priority]
[distinct | distinctrow | all]
select_expression,...
[into {outfile | dumpfile} 'file_name' export_options]
[from table_references
[where where_definition]
[group by {unsigned_integer | col_name | formula} [asc | desc], ...]
[having where_definition]
[order by {unsigned_integer | col_name | formula} [asc | desc] ,...]
[limit [offset,] rows | rows offset offset]
[procedure procedure_name(argument_list)]
[for update | lock in share mode]]
select 用于检索从一个或多个表中选取出的行。select_expression 表示你希望检索的列。
select 也可以被用于检索没有引用任何表的计算列。例如:
mysql> select 1 + 1;
-> 2
所有使用的关键词必须严格以上面所显示的次序被给出。举例来说,一个 having 子句必须出现在 group by 子句后,在 order by 字句之前。
-
一个
select表达式可以使用as指定一个别名。别名可以当作表达式的列名,用于order by或having子句中。例如:mysql> select concat(last_name,', ',first_name) as full_name from mytable order by full_name; -
在一个
where子句中使用一个列别名是不允许的,因为,当where子句被执行时,列值可能还没有被计算确定。查看章节 a.5.4 使用alias的限制。 -
from table_references子句表示从哪个表中检索记录行。如果你命名超过超过一个表,并执行一个 join。对于 join 句法的信息,查看章节 6.4.1.1join句法。对于每个引用的表,你可以顺便指定一个别名。table_name [[as] alias] [[use index (key_list)] | [ignore index (key_list)] | force index (key_list)]]
到 mysql 3.23.12 时,当 mysql 在从一个表中检索信息时,你可以提示它选择了哪一个索引。如果explain显示 mysql 使用了可能的索引列表中错误的索引,这个特性将是很有用的。通过指定use index (key_list),你可以告诉 mysql 使用可能的索引中最合适的一个索引在表中查找记录行。可选的二选一句法ignore index (key_list)可被用于告诉 mysql 不使用特定的索引。 在 mysql 4.0.9 中,你也可以使用force index。这个有点像use index (key_list),但是有了这个附加物,一个表的扫描被采用时,将会有非常大的开销。换句法说,如果没有方法使用给定的索引在表中寻找记录行,这时表扫描才会被使用。use/ignore/force key分别是use/ignore/force index的同义词。 -
你可以以
tbl_name(在当前的数据库中) 引用一张表,或以dbname.tbl_name明确地指定其个数据。 你要以以col_name、tbl_name.col_name或db_name.tbl_name.col_name引用一个列。 你不需要在一个select语句中引用的列前指定tbl_name或db_name.tbl_name前缀,除非引用列存在二义性。查看章节 6.1.2 数据库、表、索引、列和别名,对于有歧义的列引用需要更加显式的列引用格式。