
# SELECT
SELECT通常用于查询一个或多个表中的数据。
#### 常用语法
```
SELECT
[ALL | DISTINCT | DISTINCTROW ]
select_expr
[, select_expr ...]
[FROM table_references [WHERE where_condition]
[GROUP BY {col_name | expr | position} [ASC | DESC], ...]
[HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
```
表1说明信息 
| 语法                    | 说明                                                                                  |
|:---|:---|
| select_expr           | 每个select_expr都指示一个您想要查询的列。                                                          |
| FROM table_references | 指您将从某一个或多个表中查询。                                                                     |
| WHERE                 | 关键词WHERE其后跟一个表达式，用于表示被选择的行所须满足的条件。                                                  |
| GROUP BY              | 语法中被使用的子句将按一定的顺序排列，GROUP BY表示语句间关系，支持列名。如一个HAVING子句必须位于GROUP BY子句之后，并在ORDER BY子句之前。 |
| ORDER BY              | 语法顺序排列的一种方式，表示语句间关系，支持列名和指定的排序方式（如ASC、 DESC）。                                       |
| LIMIT/OFFSET          | 对输出结果集的偏移量及大小给予约束，如：LIMIT接受一个或者两个数字参数。                                              |
   
#### 语法说明
- 暂不支持以空字符串作为别名。
- 语句中的where_condition不支持常量直接作为布尔条件。例如（where 1 或者 where 'a'）。
- 不支持select ... group by ... with rollup查询（当查询的表为分片表时，无法得到预期的结果）。
- 暂不支持STRAIGHT_JOIN和NATURAL JOIN。
- select for update仅支持简单查询，不支持join、group by、order by、limit。
- select后输出字段要和表字段顺序保持一致，如果JOIN查询，将所有参与JOIN的字段都添加到select后的查询字段列表中，这样能提升SELECT查询效率。
- 不支持binary运算符出现在条件语句中： 例如：
  SELECT id, username, 'Alice' AS search_term, BINARY username = BINARY 'Alice' AS exact_match FROM users8 WHERE BINARY username = BINARY 'Alice';
  
- 对于UNION中的每个SELECT, DDM 暂不支持使用多个同名的列。 例如：
  如下SQL的SELECT中存在重复的列名。
  ```
  SELECT id, id, name FROM t1 UNION SELECT pk, pk, name FROM t2;
  ```
  
 
