SELECT

语法描述

SELECT 语句用于从表中检索数据。

语法结构

  1. SELECT
  2. [ALL | DISTINCT ]
  3. select_expr [, select_expr] [[AS] alias] ...
  4. [INTO variable [, ...]]
  5. [FROM table_references
  6. [WHERE where_condition]
  7. [GROUP BY {col_name | expr | position}
  8. [ASC | DESC]]
  9. [HAVING where_condition]
  10. [ORDER BY {col_name | expr | position}
  11. [ASC | DESC]] [ NULLS { FIRST | LAST } ]
  12. [LIMIT {[offset,] row_count | row_count OFFSET offset}]

语法解释

SELECT 语句中最常用的子句或条件释义如下:

select_expr

每个 select_expr 表达式表示你需要查询的列,并且必须至少有一个 select_expr

select_expr 列表包含指示要查询所选列表的哪些列。select_expr 指定列,也可以使用 * 指定全部查询列:

  1. SELECT * FROM t1
  • tbl_name.* 可用作以从表中选择所有列:
  1. SELECT t1.*, t2.* FROM t1
  • select_expr 可以使用 AS 为表指定别名。

table_references

  • 你可以将默认数据库中的表称为 tbl_namedb_name.tbl_name,主要用于明确指定数据库。您可以将列称为 col_nametbl_name.col_namedb_name.tbl_name.col_name。你不需要为列指定 tbl_namedb_name.tbl_name,如果需要明确指定,可以添加 tbl_namedb_name.tbl_name

  • 可以使用 tbl_name AS alias_nametbl_name alias_name 为表起别名。

WHERE

WHERE 子句(如果给定)指示要选择行必须满足的一个或多个条件。where_condition 表达式,对于要选择的每一行计算结果为真。如果没有 WHERE 子句,该语句将选择所有行。

GROUP BY

可以使用列名、列别名或列位置在 ORDER BYGROUP BY 子句中引用选择的列。

HAVING

HAVING 子句与 WHERE 子句一样,指定选择条件。

ORDER BY

ORDER BY 默认为升序;可以使用 ASC 关键字明确指定。要以相反的顺序排序,请将(降序)关键字添加到你作为排序依据 DESC 的子句中的列的名称。

LIMIT

LIMIT 子句可用于限制 SELECT 语句返回的行数。

示例

  1. create table t1 (spID int,userID int,score smallint);
  2. insert into t1 values (1,1,1);
  3. insert into t1 values (2,2,2);
  4. insert into t1 values (2,1,4);
  5. insert into t1 values (3,3,3);
  6. insert into t1 values (1,1,5);
  7. insert into t1 values (4,6,10);
  8. insert into t1 values (5,11,99);
  9. insert into t1 values (null,0,99);
  10. mysql> SELECT * FROM t1 WHERE spID>2 AND userID <2 || userID >=2 OR userID < 2 LIMIT 3;
  11. +------+--------+-------+
  12. | spid | userid | score |
  13. +------+--------+-------+
  14. | NULL | 0 | 99 |
  15. | 1 | 1 | 1 |
  16. | 2 | 2 | 2 |
  17. +------+--------+-------+
  18. mysql> SELECT userID,MAX(score) max_score FROM t1 WHERE userID <2 || userID > 3 GROUP BY userID ORDER BY max_score;
  19. +--------+-----------+
  20. | userid | max_score |
  21. +--------+-----------+
  22. | 1 | 5 |
  23. | 6 | 10 |
  24. | 0 | 99 |
  25. | 11 | 99 |
  26. +--------+-----------+
  27. mysql> select userID,count(score) from t1 group by userID having count(score)>1 order by userID;
  28. +--------+--------------+
  29. | userid | count(score) |
  30. +--------+--------------+
  31. | 1 | 3 |
  32. +--------+--------------+
  33. mysql> select userID,count(score) from t1 where userID>2 group by userID having count(score)>1 order by userID;
  34. Empty set (0.01 sec)s
  35. mysql> select * from t1 order by spID asc nulls last;
  36. +------+--------+-------+
  37. | spid | userid | score |
  38. +------+--------+-------+
  39. | 1 | 1 | 1 |
  40. | 1 | 1 | 5 |
  41. | 2 | 2 | 2 |
  42. | 2 | 1 | 4 |
  43. | 3 | 3 | 3 |
  44. | 4 | 6 | 10 |
  45. | 5 | 11 | 99 |
  46. | NULL | 0 | 99 |
  47. +------+--------+-------+

限制

  • GROUP BY 中暂不支持表别名。
  • 暂不支持 SELECT...FOR UPDATE
  • 部分支持 INTO OUTFILE