這篇文章主要講解了“SQL和nGQL區(qū)別有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“SQL和nGQL區(qū)別有哪些”吧!
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、鷹潭網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為鷹潭等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
SQL (Structured Query Language) 是具有數(shù)據(jù)操縱和數(shù)據(jù)定義等多種功能的數(shù)據(jù)庫(kù)語(yǔ)言,這種語(yǔ)言是一種 特定目的編程語(yǔ)言,用于管理 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),或在 關(guān)系流數(shù)據(jù)管理系統(tǒng)(RDSMS)中進(jìn)行流處理。
nGQL 是一種類(lèi) SQL 的聲明型的文本查詢(xún)語(yǔ)言,相比于 SQL, nGQL 為可擴(kuò)展、支持圖遍歷、模式匹配、分布式事務(wù)(開(kāi)發(fā)中)的圖數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。
對(duì)比項(xiàng) | SQL | nGQL |
---|---|---|
點(diǎn) | \ | 點(diǎn) |
邊 | \ | 邊 |
點(diǎn)類(lèi)型 | \ | tag |
邊類(lèi)型 | \ | edge type |
點(diǎn) ID | 主鍵 | vid |
邊 ID | 復(fù)合主鍵 | 起點(diǎn)、終點(diǎn)、rank |
列 | 列 | 點(diǎn)或邊的屬性 |
行 | 行 | 點(diǎn)或邊 |
數(shù)據(jù)定義語(yǔ)言(DDL)用于創(chuàng)建或修改數(shù)據(jù)庫(kù)的結(jié)構(gòu),也就是 schema。
對(duì)比項(xiàng) | SQL | nGQL |
---|---|---|
創(chuàng)建索引 | CREATE INDEX | CREATE {TAG | EDGE} INDEX |
刪除索引 | DROP INDEX | DROP {TAG | EDGE} INDEX |
列出索引 | SHOW INDEX FROM | SHOW {TAG | EDGE} INDEXES |
重構(gòu)索引 | ANALYZE TABLE | REBUILD {TAG | EDGE} INDEX
<index_name> [OFFLINE] |
數(shù)據(jù)操作語(yǔ)言(DML)用于操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
數(shù)據(jù)查詢(xún)語(yǔ)言(DQL)語(yǔ)句用于執(zhí)行數(shù)據(jù)查詢(xún)。本節(jié)說(shuō)明如何使用 SQL 語(yǔ)句和 nGQL 語(yǔ)句查詢(xún)數(shù)據(jù)。
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>] ...]
數(shù)據(jù)控制語(yǔ)言(DCL)包含諸如
GRANT
和
REVOKE
之類(lèi)的命令,這些命令主要用來(lái)處理數(shù)據(jù)庫(kù)系統(tǒng)的權(quán)限、其他控件。
對(duì)比項(xiàng) | SQL | nGQL |
---|---|---|
創(chuàng)建用戶(hù) | CREATE USER | CREATE USER |
刪除用戶(hù) | DROP USER | DROP USER |
更改密碼 | SET PASSWORD | CHANGE PASSWORD |
授予權(quán)限 | GRANT
<priv_type> ON [object_type] TO
<user> | GRANT ROLE
<role_type> ON
<space> TO
<user> |
刪除權(quán)限 | REVOKE
<priv_type> ON [object_type] TO
<user> | REVOKE ROLE
<role_type> ON
<space> FROM
<user> |
查詢(xún)語(yǔ)句基于以下數(shù)據(jù)模型:
本文將使用 NBA 數(shù)據(jù)集。該數(shù)據(jù)集包含兩種類(lèi)型的點(diǎn),也就是兩個(gè)標(biāo)簽,即
player
和
team
;兩種類(lèi)型的邊,分別是
serve
和
follow
。
在關(guān)系型數(shù)據(jù)管理系統(tǒng)中(RDBMS)中,我們用表來(lái)表示點(diǎn)以及與點(diǎn)相關(guān)的邊(連接表)。因此,我們創(chuàng)建了以下表格:player
、team
、serve
和
follow
。在
Nebula Graph中,基本數(shù)據(jù)單位是頂點(diǎn)和邊。兩者都可以擁有屬性,相當(dāng)于 RDBMS 中的屬性。
在
Nebula Graph中,點(diǎn)之間的關(guān)系由邊表示。每條邊都有一種類(lèi)型,在 NBA 數(shù)據(jù)集中,我們使用邊類(lèi)型
serve
和
follow
來(lái)區(qū)分兩種類(lèi)型的邊。
首先,讓我們看看如何在 RDBMS 中插入數(shù)據(jù)。我們先創(chuàng)建一些表,然后為這些表插入數(shù)據(jù)。
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);
然后插入數(shù)據(jù)。
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中插入數(shù)據(jù)與上述類(lèi)似。首先,我們需要定義好數(shù)據(jù)結(jié)構(gòu),也就是創(chuàng)建好 schema。然后可以選擇手動(dòng)或使用 Nebula Graph Studio (Nebula Graph 的可視化工具)導(dǎo)入數(shù)據(jù)。這里我們手動(dòng)添加數(shù)據(jù)。
在下方的
INSERT
插入語(yǔ)句中,我們向圖空間 NBA 插入了球員數(shù)據(jù)(這和在 MySQL 中插入數(shù)據(jù)類(lèi)似)。
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);
考慮到篇幅限制,此處我們將跳過(guò)插入球隊(duì)和邊的重復(fù)步驟。你可以點(diǎn)擊 此處下載示例數(shù)據(jù)親自嘗試。
本節(jié)介紹如何使用 SQL 和 nGQL 語(yǔ)句創(chuàng)建(C)、讀取(R)、更新(U)和刪除(D)數(shù)據(jù)。
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;
返回年齡超過(guò) 36 歲的球員。
SELECT player.name FROM player WHERE player.age < 36;
使用 nGQL 查詢(xún)有些不同,因?yàn)槟仨氃谶^(guò)濾屬性之前創(chuàng)建索引。更多信息請(qǐng)參見(jiàn) 索引文檔。
CREATE TAG INDEX player_age ON player(age); REBUILD TAG INDEX player_age OFFLINE; LOOKUP ON player WHERE player.age < 36;
本節(jié)提供一些示例查詢(xún)供您參考。
在表
player
中查詢(xún) ID 為 100 的球員并返回其
name
屬性。
SELECT player.name FROM player WHERE player.id = 100;
接下來(lái)使用
Nebula Graph查找 ID 為 100 的球員并返回其
name
屬性。
FETCH PROP ON player 100 YIELD player.name;
Nebula Graph使用
FETCH
關(guān)鍵字獲取特定點(diǎn)或邊的屬性。本例中,屬性即為點(diǎn) 100 的名稱(chēng)。nGQL 中的
YIELD
關(guān)鍵字相當(dāng)于 SQL 中的
SELECT
。
查找球員 Tim Duncan 并返回他效力的所有球隊(duì)。
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 語(yǔ)句完成相同操作:
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 語(yǔ)言風(fēng)格的
==
,而不是SQL風(fēng)格的
=
。
以下查詢(xún)略復(fù)雜,現(xiàn)在我們來(lái)查詢(xún)球員 Tim Duncan 的隊(duì)友。
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 則使用管道將前一個(gè)子句的結(jié)果作為下一個(gè)子句的輸入。
GO FROM 100 OVER serve YIELD serve._dst AS Team | GO FROM $-.Team OVER serve REVERSELY YIELD $$.player.name;
感謝各位的閱讀,以上就是“SQL和nGQL區(qū)別有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)SQL和nGQL區(qū)別有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享標(biāo)題:SQL和nGQL區(qū)別有哪些
新聞來(lái)源:http://jinyejixie.com/article30/igoepo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)