亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL和nGQL區別有哪些

發布時間:2021-11-12 14:28:58 來源:億速云 閱讀:186 作者:iii 欄目:數據庫

這篇文章主要講解了“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。

SQL和nGQL區別有哪些

索引
對比項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)用于操作數據庫中的數據。

SQL和nGQL區別有哪些

數據查詢語言(DQL)

數據查詢語言(DQL)語句用于執行數據查詢。本節說明如何使用 SQL 語句和 nGQL 語句查詢數據。

SELECT
 [DISTINCT]
 select_expr [, select_expr] ...
 [FROM table_references]
 [WHERE where_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)包含諸如 GRANTREVOKE 之類的命令,這些命令主要用來處理數據庫系統的權限、其他控件。

對比項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 關系結構圖

SQL和nGQL區別有哪些

Nebula Graph 最小模型圖

SQL和nGQL區別有哪些

本文將使用 NBA 數據集。該數據集包含兩種類型的點,也就是兩個標簽,即 playerteam ;兩種類型的邊,分別是 servefollow

在關系型數據管理系統中(RDBMS)中,我們用表來表示點以及與點相關的邊(連接表)。因此,我們創建了以下表格:playerteamservefollow。在 Nebula Graph 中,基本數據單位是頂點和邊。兩者都可以擁有屬性,相當于 RDBMS 中的屬性。

Nebula Graph 中,點之間的關系由邊表示。每條邊都有一種類型,在 NBA 數據集中,我們使用邊類型 servefollow 來區分兩種類型的邊。

示例數據

在 RDBMS 插入數據

首先,讓我們看看如何在 RDBMS 中插入數據。我們先創建一些表,然后為這些表插入數據。

CREATE TABLE player (id INT, name VARCHAR(100), age INT);
CREATE TABLE team (id INT, name 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
   (100, 'Tim Duncan', 42),
   (101, 'Tony Parker', 36),
   (102, 'LaMarcus Aldridge', 33),
   (103, 'Rudy Gay',32),
   (104, 'Marco Belinelli', 32),
   (105, 'Danny Green', 31),
   (106, 'Kyle Anderson', 25),
   (107, 'Aron Baynes', 32),
   (108, 'Boris Diaw', 36),
   (109, 'Tiago Splitter', 34),
   (110, 'Cory Joseph', 27);
INSERT INTO team
VALUES
   (200, 'Warriors'),
   (201, 'Nuggets'),
   (202, 'Rockets'),
   (203, 'Trail'),
   (204, 'Spurs'),
   (205, 'Thunders'),
   (206, 'Jazz'),
   (207, 'Clippers'),
   (208, 'Kings');
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 Duncan', 42),
101: ('Tony Parker', 36),
102: ('LaMarcus Aldridge', 33),
103: ('Rudy Gay', 32),
104: ('Marco Belinelli', 32),
105: ('Danny Green', 31),
106: ('Kyle Anderson', 25),
107: ('Aron Baynes', 32),
108: ('Boris Diaw', 36),
109: ('Tiago Splitter', 34),
110: ('Cory Joseph', 27);

考慮到篇幅限制,此處我們將跳過插入球隊和邊的重復步驟。你可以點擊 此處下載示例數據親自嘗試。

SQL和nGQL區別有哪些

增刪改查(CRUD)

本節介紹如何使用 SQL 和 nGQL 語句創建(C)、讀取(R)、更新(U)和刪除(D)數據。

插入數據

mysql> INSERT INTO player VALUES (100, 'Tim Duncan', 42);
nebula> INSERT VERTEX player(name, age) VALUES 100: ('Tim Duncan', 42);

查詢數據

查找 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 歲的球員。

SELECT player.name
FROM player
WHERE player.age < 36;

使用 nGQL 查詢有些不同,因為您必須在過濾屬性之前創建索引。更多信息請參見 索引文檔。

CREATE TAG INDEX player_age ON player(age);
REBUILD TAG INDEX player_age OFFLINE;
LOOKUP ON player WHERE player.age < 36;

示例查詢

本節提供一些示例查詢供您參考。

示例 1

在表 player 中查詢 ID 為 100 的球員并返回其 name 屬性。

SELECT player.name
FROM 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 并返回他效力的所有球隊。

SELECT a.id, a.name, 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 語句完成相同操作:

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
FROM player a
JOIN 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區別有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭觉县| 博野县| 鄢陵县| 郴州市| 横山县| 曲阜市| 页游| 高清| 泾川县| 卫辉市| 思茅市| 鹤岗市| 商洛市| 阿拉善左旗| 万盛区| 井陉县| 安吉县| 青阳县| 望城县| 泌阳县| 余庆县| 中超| 科技| 曲松县| 张掖市| 乃东县| 河源市| 陆丰市| 梨树县| 大同县| 教育| 九龙县| 卢氏县| 平定县| 本溪| 霞浦县| 金昌市| 会同县| 江华| 乐安县| 仁化县|