Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/clauses/use-graph/ Documentation version: v5.3.2 # USE `USE`子句用于声明查询的工作图。工作图是执行查询时使用的图或临时图。 如果一个查询涉及多个图或临时图,可多次使用`USE`子句声明不同的工作图。 如果一个查询主要涉及一个图或临时图,也可以使用 [SESSION SET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/) 语句将其设置为当前会话的图或临时图。此后,查询该图或临时图时无需在查询语句中将其声明为工作图。 `USE`子句指定的工作图仅在当前查询语句中生效,且会覆盖当前会话中设置的图或临时图。 将持久化图设置为工作图时,当前用户除了需要后续操作所要求的权限,还必须拥有父级 Schema 的`USAGE`。使用完整图路径不能绕过该检查。该要求不适用于临时图。更多信息,请参见 [Schema 访问控制](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/schema-access-control/)。 下面列举了可在`USE`子句后添加的语句和命令: - DDL 语句 - [CREATE NORMAL INDEX](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/index/create/) - [CREATE VECTOR INDEX](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/index/create-vector/) - [CREATE SPATIAL INDEX](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/index/create-geo/) - [CREATE FULLTEXT INDEX](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/index/create-fulltext/) - [DROP INDEX](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/index/drop/) - [CREATE TTL](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/ttl/create/) - [ALTER TTL](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/ttl/alter/) - [DROP TTL](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/ttl/drop/) - DML 语句 - [INSERT](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dml/insert/) - [SET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dml/set/) - [DELETE](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dml/delete/) - DQL 语句 - [MATCH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/match/) - SHOW 命令 - [SHOW (ALL) INDEXES](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-indexes/) - [SHOW TTLS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-ttls/) - [SHOW STATS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-stats/) ## 语法 语法图源码 use_clause ```` use_clause ::= 'USE' ((schema_reference '/')? graph_name | temp_graph_name) ```` ## 参数 ### `schema_reference` 所引用的 Schema 路径。此处即设置为工作图的图的 Schema 路径。 绝对路径或相对路径均可在语句中使用。若想将不在当前会话中的 Schema 中的图设置为工作图,则需指定对应 Schema 路径。关于为当前会话设置和查看 Schema 的更多信息,请参见 [SESSION SET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/) 语句和 [SHOW CURRENT_SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-current-schema/) 语句。 ### `graph_name` 设置为工作图的图的名称。 ### `temp_graph_name` 设置为工作图的临时图的名称。必须以井号(`#`)开头。 ## 示例 ### 在查询语句中将当前 Schema 中的图设置为工作图 ```` ''' USE movie MATCH (n:Person WHERE n.id = 107224) RETURN n.name ''' ```` 返回: ```` +-------------+ | n.name | +-------------+ | Olivia Hack | +-------------+ ```` ### 在查询语句中将指定 Schema 中的图设置为工作图 ```` ''' // 创建 Schema CREATE SCHEMA IF NOT EXISTS /my_schema ''' ''' // 为当前会话设置 Schema SESSION SET SCHEMA /my_schema ''' ```` ```` ''' // 指定工作图并执行查询 USE /default_schema/movie MATCH (n:Person WHERE n.id = 107224) RETURN n.name ''' ```` 返回: ```` +-------------+ | n.name | +-------------+ | Olivia Hack | +-------------+ ```` ### 在顺序查询中声明多个工作图 使用 [NEXT](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/let/) 顺序执行多条语句时,可以在每条语句中通过`USE`声明不同的工作图: ```` ''' USE movie MATCH (m:Movie) RETURN m.id AS movie_id, m.name AS movie_name NEXT USE movie_2 MATCH (m2:Movie) WHERE m2.id = movie_id RETURN movie_id, movie_name, m2.name AS name_in_movie_2 ''' ```` `NEXT`将前一条语句的输出表传递给下一条语句。跨图查询时,建议通过`RETURN`传递业务 ID、名称等属性值,并在下一张图中使用新的图元素变量。 ### 在复合查询语句中声明多个工作图 若存在多个图,可以声明不同的工作图来查询不同图中的数据。 ```` ''' USE movie MATCH (n:Movie WHERE n.id = 363) RETURN n.name AS movie_name UNION USE movie_2 MATCH (n:Movie WHERE n.id = 302) RETURN n.name AS movie_name ''' ```` 上述语句执行以下操作: 1. 将`movie`声明为工作图,然后查询 ID 为`363`的电影。 2. 将`movie_2`声明为工作图,然后查询 ID 为`302`的电影。 3. 使用`UNION`合并两个语句的结果。 返回: ```` +---------------+ | movie_name | +---------------+ | Head-On | | Swimming Pool | +---------------+ ```` `UNION`、`INTERSECT`或`EXCEPT`中的每条查询语句具有独立的变量作用域,因此可以在不同查询语句中复用变量名。更多信息,请参见[复合查询](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/composite-query/)。 ### 在嵌套查询语句中多次声明一个工作图 ```` ''' USE movie MATCH (n@`User` WHERE n.id = 599)-[]->(m:Movie) RETURN n.id AS audience, m.name AS movie, VALUE { USE movie MATCH (c:Movie)<-[e:Watch]-() WHERE c.name =m.name RETURN avg(e.rate) AS average_rate GROUP BY () } AS average_rate ORDER BY average_rate DESC LIMIT 10 ''' ```` 上述语句执行以下操作: 1. 将`movie`声明为工作图,然后查询 ID 为`599`的用户观看的电影。 2. 在子查询中,再次将`movie`声明为工作图,然后计算该用户看过的每部电影的平均评分。 3. 返回用户 ID、该用户观看的 10 部平均评分最高的电影名以及平均评分。 返回: ```` +----------+--------------------------------------+--------------------+ | audience | movie | average_rate | +----------+--------------------------------------+--------------------+ | 599 | Sunset Blvd. | 4.333333333333333 | | 599 | Shichinin no samurai | 4.1875 | | 599 | Sen To Chihiro No Kamikakushi | 4.155172413793103 | | 599 | Green Mile | 4.148648648648648 | | 599 | City of God | 4.1466666666666665 | | 599 | Lock, Stock & Two Smoking Barrels | 4.052238805970149 | | 599 | Wallace & Gromit: The Wrong Trousers | 4.035714285714286 | | 599 | Nausicaä of the Valley of the Wind | 4.0 | | 599 | Run Lola Run | 4.0 | | 599 | Princess Mononoke | 3.9583333333333335 | +----------+--------------------------------------+--------------------+ ```` ### 在子查询中声明不同的工作图 子查询可以通过`USE`声明与外层查询不同的工作图。下面的查询返回`movie`中也存在于`movie_2`的电影: ```` ''' USE movie MATCH (m:Movie) WHERE EXISTS { USE movie_2 MATCH (m2:Movie) WHERE m2.id = m.id RETURN m2 } RETURN m.id, m.name ''' ```` 如果子查询中省略`USE`,子查询会继续使用外层查询的工作图。跨图关联数据时,建议为不同图中的图元素使用不同变量,并通过业务 ID 等属性值进行比较。更多信息,请参见[子查询表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/subquery/)。 ### 在数据操作语句中声明工作图 ```` ''' USE movie INSERT (:Movie{id:10000,name:"movie"}), (IS Genre{id:11000,name:"genre"}) ''' ```` 上述语句声明`movie`为工作图,然后插入两个点,分别是电影和电影类别。