
# SELECT
#### SELECT
- **语法格式**
  ```
  SELECT [ ALL | DISTINCT ]
    { * | projectItem [, projectItem ]* }
    FROM tableExpression
    [ WHERE booleanExpression ]
    [ GROUP BY { groupItem [, groupItem ]* } ]
    [ HAVING booleanExpression ]
  ```
  
- **语法说明**
  SELECT语句用于从表中选取数据。
  ALL表示返回所有结果。
  DISTINCT表示返回不重复结果。
  
- **注意事项**
  - 所查询的表必须是已经存在的表，否则会出错。
  
  - WHERE关键字指定查询的过滤条件，过滤条件中支持算术运算符，关系运算符，逻辑运算符。
  
  - GROUP BY指定分组的字段，可以单字段分组，也可以多字段分组。
   
- **示例**
  找出数量超过3的订单。
  ```
  SELECT  * FROM Orders WHERE units > 3;
  ```
  查询一组常量数据。
  ```
  SELECT 'Lily', 'male', 'student', 17;
  ```
  
 
#### DISTINCT语句
- **功能描述**
  在表中，一个列可能会包含多个重复值，有时您也许希望仅仅列出不同（distinct）的值。DISTINCT关键词用于返回唯一不同的值。
  
- **语法格式**
  ```
  SELECT [ ALL | DISTINCT ]
    { * | projectItem [, projectItem ]* }
    FROM tableExpression
    [ WHERE booleanExpression ]
    [ GROUP BY { groupItem [, groupItem ]* } ]
    [ HAVING booleanExpression ]
  ```
  

- **示例**
  查询所有资产类型security_resource，根据type去重：
  ```
  SELECT DISTINCT type FROM security_resource;
  ```
  表1查询结果示例 
  | **type**     |
  |:---|
  | vpcs         |
  | publicips    |
  | cloudservers |
     
  
 
#### WHERE过滤子句
- **语法格式**
  ```
  SELECT   { * | projectItem [, projectItem ]* }
    FROM tableExpression
    [ WHERE booleanExpression ]
  ```
  
- **语法说明**
  利用WHERE子句过滤查询结果。
  
- **注意事项**
  - 所查询的表必须是已经存在的，否则会出错。
  
  - WHERE条件过滤，将不满足条件的记录过滤掉，返回满足要求的记录。
   
- 运算符
  
  | 操作符                       | 说明                                        |
  |:---|:---|
  | =                         | 查询某字段值等于某数值的日志。                           |
  | \<\>                      | 查询某字段值不等于某数值的日志。                          |
  | \>                        | 查询某字段值大于某数值的日志。                           |
  | \<                        | 查询某字段值小于某数值的日志。                           |
  | \>=                       | 查询某字段值大于或等于某数值的日志。                        |
  | \<=                       | 查询某字段值小于或等于某数值的日志。                        |
  | IN ('value1','value2')    | 查询某字段值是value1或value2的日志。                  |
  | BETWEEN value1 and value2 | 查询某字段值处于value1和value2范围内的日志。              |
  | LIKE                      | 模糊查询某字段值的关键字，如like '%one%'，%是统配符可以代替任意字符。 |
  | IS NULL                   | 查询某字段值为NULL的日志。                           |
  | IS NOT NULL               | 查询某字段值为NOT NULL的日志。                       |
     
  
- **示例**
  找出数量超过3并且小于10的订单。
  ```
  SELECT  * FROM Orders
    WHERE units > 3 and units < 10;
  ```
  
 
#### IN运算符
- **语法格式**
  ```
  SELECT [ ALL | DISTINCT ]   { * | projectItem [, projectItem ]* }
    FROM tableExpression
    WHERE column_name IN (value (, value)* ) | query
  ```
  
- **语法说明**
  IN操作符允许在where子句中规定多个值。若表达式在给定的表子查询中存在，则返回 true 。
  
- **注意事项**
  子查询表必须由单个列构成，且该列的数据类型需与表达式保持一致。
  
- **示例**
  输出Orders中NewProducts中product的user和amount信息。
  ```
  SELECT user, amount
  FROM Orders
  WHERE product IN (
      SELECT product FROM NewProducts
  );
  ```
  
 
