
# WITH...AS
#### 功能描述
通过用WITH...AS定义公共表达式（CTE）来简化查询，提高可阅读性和易维护性。
#### 语法格式
```
WITH cte_name AS (select_statement) sql_containing_cte_name;
```
#### 关键字
- cte_name：公共表达式的名字，不允许重名。
- select_statement：完整的SELECT语句。
- sql_containing_cte_name：包含了刚刚定义的公共表达式的SQL语句
 
#### 注意事项
- 定义了一个CTE后必须马上使用，否则这个CTE定义将失效。
- 可以通过一次WITH定义多个CTE，中间用逗号连接，后定义的CTE可以引用已经定义的CTE。
 
#### 示例
将"SELECT courseId FROM course_info WHERE courseName = 'Biology'"定义为公共表达式nv，然后在后续的查询中直接利用nv代替该SELECT语句。
```
WITH nv AS (SELECT courseId FROM course_info WHERE courseName = 'Biology') SELECT DISTINCT courseId FROM nv;
```
