SQL和nGQL区别有哪些

网友投稿 392 2023-12-29

SQL和nGQL区别有哪些

这篇文章主要讲解了“SQL和nGQL区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL和nGQL区别有哪些”吧!

SQL和nGQL区别有哪些

SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言是一种 特定目的编程语言,用于管理 关系数据库管理系统(RDBMS),或在 关系流数据管理系统(RDSMS)中进行流处理。

nGQL 是一种类 SQL 的声明型的文本查询语言,相比于 SQL, nGQL 为可扩展、支持图遍历、模式匹配、分布式事务(开发中)的图数据库查询语言。

概念对比

对比项SQLnGQL点\点边\边点类型\tag边类型\edge type点 ID主键vid边 ID复合主键起点、终点、rank列列点或边的属性行行点或边

语法对比

数据定义语言 (DDL)

数据定义语言(DDL)用于创建或修改数据库的结构,也就是 schema。

索引对比项SQLnGQL创建索引CREATE INDEXCREATE {TAG | EDGE} INDEX删除索引DROP INDEXDROP {TAG | EDGE} INDEX列出索引SHOW INDEX FROMSHOW {TAG | EDGE} INDEXES重构索引ANALYZE TABLEREBUILD {TAG | EDGE} INDEX <index_name> [OFFLINE]数据操作语言(DML)

数据操作语言(DML)用于操作数据库中的数据。

数据查询语言(DQL)

数据查询语言(DQL)语句用于执行数据查询。本节说明如何使用 SQL 语句和 nGQL 语句查询数据。

SELECT  [DISTINCT]  select_expr [, select_expr] ...  [FROM table_references]  [WHEREwhere_condition]  [GROUP BY {col_name | expr | position}]  [HAVING  where_condition]  [ORDER BY{col_name | expr |position} [ASC | DESC]]GO [[<M> TO] <N> STEPS ] FROM <node_list>  OVER <edge_type_list>[REVERSELY] [BIDIRECT]  [WHERE where_condition]  [YIELD [DISTINCT]<return_list>]  [| ORDER BY<expression> [ASC | DESC]]  [| LIMIT [<offset_value>,] <number_rows>]  [| GROUP BY {col_name | expr | position} YIELD<col_name>] <node_list>    | <vid> [, <vid> ...]    | $-.id <edge_type_list>    edge_type [, edge_type ...] <return_list>     <col_name> [AS <col_alias>] [, <col_name> [AS <col_alias>] ...]数据控制语言(DCL)

数据控制语言(DCL)包含诸如 GRANT 和 REVOKE 之类的命令,这些命令主要用来处理数据库系统的权限、其他控件。

对比项SQLnGQL创建用户CREATE USERCREATE USER删除用户DROP USERDROP USER更改密码SET PASSWORDCHANGE PASSWORD授予权限GRANT <priv_type> ON [object_type] TO <user>GRANT ROLE <role_type> ON <space> TO <user>删除权限REVOKE <priv_type> ON [object_type] TO <user>REVOKE ROLE <role_type> ON <space> FROM <user>

数据模型

查询语句基于以下数据模型:

RDBMS 关系结构图Nebula Graph 最小模型图

本文将使用 NBA 数据集。该数据集包含两种类型的点,也就是两个标签,即 player 和 team ;两种类型的边,分别是 serve 和 follow。

在关系型数据管理系统中(RDBMS)中,我们用表来表示点以及与点相关的边(连接表)。因此,我们创建了以下表格:player、team、serve 和 follow。在Nebula Graph 中,基本数据单位是顶点和边。两者都可以拥有属性,相当于 RDBMS 中的属性。

Nebula Graph中,点之间的关系由边表示。每条边都有一种类型,在 NBA 数据集中,我们使用边类型 serve 和 follow 来区分两种类型的边。

示例数据

在 RDBMS 插入数据

首先,让我们看看如何在 RDBMS 中插入数据。我们先创建一些表,然后为这些表插入数据。

CREATE TABLE player (id INTname VARCHAR(100), age INT); CREATE TABLEteam (id INTname VARCHAR(100)); CREATE TABLE serve (player_id INT, team_id INT, start_year INT, end_year INT);CREATE TABLE follow (player_id1 INT, player_id2 INT, degree INT);

然后插入数据。

INSERT INTO player VALUES    (100Tim Duncan42),    (101Tony Parker36),    (102LaMarcus Aldridge33),    (103Rudy Gay,32),    (104Marco Belinelli32),    (105Danny Green31),    (106Kyle Anderson25),    (107Aron Baynes32),    (108Boris Diaw36),    (109Tiago Splitter34),    (110Cory Joseph27); INSERT INTO team VALUES    (200Warriors),    (201Nuggets),    (202Rockets),    (203Trail),    (204Spurs),    (205Thunders),    (206Jazz),    (207Clippers),    (208Kings); INSERT INTO serve VALUES    (100,200,1997,2016),    (101,200,1999,2010),    (102,200,2001,2005),    (106,200,2000,2011),    (107,200,2001,2009),    (103,201,1999,2018),    (104,201,2006,2015),    (107,201,2007,2010),    (108,201,2010,2016),    (109,201,2011,2015),    (105,202,2015,2019),    (109,202,2017,2019),    (110,202,2007,2009); INSERT INTO follow VALUES    (100,101,95),    (100,102,91),    (100,106,90),    (101,100,95),    (101,102,91),    (102,101,75),    (103,102,70),    (104,103,50),    (104,105,60),    (105,104,83),    (105,110,87),    (106,100,88),    (106,107,81),    (107,106,92),    (107,108,97),    (108,109,95),    (109,110,78),    (110,109,72),    (110,105,85);在 Nebula Graph 插入数据

Nebula Graph中插入数据与上述类似。首先,我们需要定义好数据结构,也就是创建好 schema。然后可以选择手动或使用 Nebula Graph Studio (Nebula Graph 的可视化工具)导入数据。这里我们手动添加数据。

在下方的 INSERT 插入语句中,我们向图空间 NBA 插入了球员数据(这和在 MySQL 中插入数据类似)。

INSERT VERTEX player(name, age) VALUES 100: (Tim Duncan42), 101: (Tony Parker36), 102: (LaMarcus Aldridge33), 103: (Rudy Gay32), 104: (Marco Belinelli32), 105: (Danny Green31), 106: (Kyle Anderson25), 107: (Aron Baynes32), 108: (Boris Diaw36), 109: (Tiago Splitter34), 110: (Cory Joseph,27);

考虑到篇幅限制,此处我们将跳过插入球队和边的重复步骤。你可以点击 此处-示例数据亲自尝试。

增删改查(CRUD)

本节介绍如何使用 SQL 和 nGQL 语句创建(C)、读取(R)、更新(U)和删除(D)数据。

插入数据mysqlINSERT INTO player VALUES (100Tim Duncan42); nebulaINSERT VERTEX player(name, age)VALUES 100: (Tim Duncan42);查询数据

查找 ID 为 100 的球员并返回其 name 属性:

mysql> SELECT player.name FROM player WHERE player.id = 100; nebula> FETCH PROP ON player 100 YIELD player.name;更新数据mysql>UPDATE player SET name =Tim; nebula> UPDATE VERTEX 100 SET player.name = "Tim";删除数据mysql>DELETE FROM player WHERE name =Tim; nebula> DELETE VERTEX 121; nebula> DELETE EDGE follow 100 -> 200;

建立索引

返回年龄超过 36 岁的球员。

SELECTplayer.nameFROM player WHERE player.age < 36;

使用 nGQL 查询有些不同,因为您必须在过滤属性之前创建索引。更多信息请参见 索引文档。

CREATETAG INDEX player_age ON player(age);REBUILD TAG INDEX player_age OFFLINE; LOOKUPON player WHERE player.age <36;

示例查询

本节提供一些示例查询供您参考。

示例 1

在表 player 中查询 ID 为 100 的球员并返回其 name 属性。

SELECTplayer.nameFROM player WHERE player.id = 100;

接下来使用 Nebula Graph 查找 ID 为 100 的球员并返回其 name 属性。

FETCH PROP ON player 100 YIELD player.name;

Nebula Graph使用 FETCH 关键字获取特定点或边的属性。本例中,属性即为点 100 的名称。nGQL 中的 YIELD 关键字相当于 SQL 中的 SELECT。

示例 2

查找球员 Tim Duncan 并返回他效力的所有球队。

SELECTa.id, a.name, c.nameFROM player a JOIN serve b ON a.id=b.player_id JOIN team c ON c.id=b.team_id WHERE a.name = Tim Duncan

使用如下 nGQL 语句完成相同操作:

CREATE TAG INDEX player_name ON player(name); REBUILD TAG INDEX player_name OFFLINE; LOOKUP ON player WHERE player.name == Tim Duncan YIELD player.name AS name | GO FROM $-.VertexID OVER serve YIELD $-.name, $$.team.name;

这里需要注意一下,在 nGQL 中的等于操作采用的是 C 语言风格的 ==,而不是SQL风格的 =。

示例 3

以下查询略复杂,现在我们来查询球员 Tim Duncan 的队友。

SELECT a.id, a.name, c.name FROMplayer aJOIN serve b ON a.id=b.player_id JOIN team c ON c.id=b.team_id WHERE c.name IN (SELECT c.name FROM player a JOIN serve b ON a.id=b.player_id JOIN team c ON c.id=b.team_id WHERE a.name = Tim Duncan)

nGQL 则使用管道将前一个子句的结果作为下一个子句的输入

GO FROM 100 OVER serve YIELD serve._dst AS Team | GO FROM $-.Team OVER serve REVERSELY YIELD$$.player.name;

感谢各位的阅读,以上就是“SQL和nGQL区别有哪些”的内容了,经过本文的学习后,相信大家对SQL和nGQL区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:常用的MySQL客户端工具有哪些
下一篇:怎么使用HotDB SQL语法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~