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.1 JOIN 句法。對於每個引用的表,你可以順便指定一個別名。
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 的同義詞。