{"id":139960,"date":"2020-07-15T16:52:05","date_gmt":"2020-07-15T08:52:05","guid":{"rendered":"http:\/\/4563.org\/?p=139960"},"modified":"2020-07-15T16:52:05","modified_gmt":"2020-07-15T08:52:05","slug":"%e5%85%b3%e7%b3%bb%e5%9e%8b%e6%95%b0%e6%8d%ae%e5%ba%93%e6%9f%a5%e8%af%a2%e8%af%ad%e8%a8%80-sql-%e5%92%8c%e5%9b%be%e6%95%b0%e6%8d%ae%e5%ba%93%e6%9f%a5%e8%af%a2%e8%af%ad%e8%a8%80-ngql-%e5%af%b9%e6%af%94","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=139960","title":{"rendered":"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  \u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : NebulaGraph <\/span>  <span><i><\/i> 11<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<p>\u6458\u8981\uff1a\u8fd9\u7bc7\u6587\u7ae0\u5c06\u4ecb\u7ecd\u56fe\u6570\u636e\u5e93 Nebula Graph \u7684\u67e5\u8be2\u8bed\u8a00 nGQL \u548c SQL \u7684\u533a\u522b\u3002<\/p>\n<blockquote>\n<p>\u672c\u6587\u9996\u53d1\u4e8e Nebula Graph \u5b98\u65b9\u535a\u5ba2\uff1a https:\/\/nebula-graph.com.cn\/posts\/sql-vs-ngql-comparison\/<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff91aa42d4.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<p>\u867d\u7136\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd nGQL \u548c SQL \u7684\u533a\u522b\uff0c\u4f46\u662f\u6211\u4eec\u4e0d\u4f1a\u6df1\u5165\u63a2\u8ba8\u8fd9\u4e24\u79cd\u8bed\u8a00\uff0c\u800c\u662f\u5c06\u8fd9\u4e24\u79cd\u8bed\u8a00\u505a\u5bf9\u6bd4\uff0c\u4ee5\u5e2e\u52a9\u4f60\u4ece SQL \u8fc7\u6e21\u5230 nGQL \u3002<\/p>\n<p>SQL (Structured Query Language) \u662f\u5177\u6709\u6570\u636e\u64cd\u7eb5\u548c\u6570\u636e\u5b9a\u4e49\u7b49\u591a\u79cd\u529f\u80fd\u7684\u6570\u636e\u5e93\u8bed\u8a00\uff0c\u8fd9\u79cd\u8bed\u8a00\u662f\u4e00\u79cd\u7279\u5b9a\u76ee\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u7528\u4e8e\u7ba1\u7406\u5173\u7cfb\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\uff08 RDBMS \uff09\uff0c\u6216\u5728\u5173\u7cfb\u6d41\u6570\u636e\u7ba1\u7406\u7cfb\u7edf\uff08 RDSMS \uff09\u4e2d\u8fdb\u884c\u6d41\u5904\u7406\u3002<\/p>\n<p>nGQL \u662f\u4e00\u79cd\u7c7b SQL \u7684\u58f0\u660e\u578b\u7684\u6587\u672c\u67e5\u8be2\u8bed\u8a00\uff0c\u76f8\u6bd4\u4e8e SQL\uff0cnGQL \u4e3a\u53ef\u6269\u5c55\u3001\u652f\u6301\u56fe\u904d\u5386\u3001\u6a21\u5f0f\u5339\u914d\u3001\u5206\u5e03\u5f0f\u4e8b\u52a1\uff08\u5f00\u53d1\u4e2d\uff09\u7684\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00\u3002<\/p>\n<h2>\u6982\u5ff5\u5bf9\u6bd4<\/h2>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff92182661.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h2>\u8bed\u6cd5\u5bf9\u6bd4<\/h2>\n<h3>\u6570\u636e\u5b9a\u4e49\u8bed\u8a00 (DDL)<\/h3>\n<p>\u6570\u636e\u5b9a\u4e49\u8bed\u8a00\uff08 DDL \uff09\u7528\u4e8e\u521b\u5efa\u6216\u4fee\u6539\u6570\u636e\u5e93\u7684\u7ed3\u6784\uff0c\u4e5f\u5c31\u662f schema \u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff928b74e0.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h4>\u7d22\u5f15<\/h4>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff92eb460c.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h3>\u6570\u636e\u64cd\u4f5c\u8bed\u8a00\uff08 DML \uff09<\/h3>\n<p>\u6570\u636e\u64cd\u4f5c\u8bed\u8a00\uff08 DML \uff09\u7528\u4e8e\u64cd\u4f5c\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff933763e7.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h3>\u6570\u636e\u67e5\u8be2\u8bed\u8a00\uff08 DQL \uff09<\/h3>\n<p>\u6570\u636e\u67e5\u8be2\u8bed\u8a00\uff08 DQL \uff09\u8bed\u53e5\u7528\u4e8e\u6267\u884c\u6570\u636e\u67e5\u8be2\u3002\u672c\u8282\u8bf4\u660e\u5982\u4f55\u4f7f\u7528 SQL \u8bed\u53e5\u548c nGQL \u8bed\u53e5\u67e5\u8be2\u6570\u636e\u3002<\/p>\n<pre><code>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]] <\/code><\/pre>\n<pre><code>GO [[&lt;M&gt; TO] &lt;N&gt; STEPS ] FROM &lt;node_list&gt;  OVER &lt;edge_type_list&gt; [REVERSELY] [BIDIRECT]  [WHERE where_condition]  [YIELD [DISTINCT] &lt;return_list&gt;]  [| ORDER BY &lt;expression&gt; [ASC | DESC]]  [| LIMIT [&lt;offset_value&gt;,] &lt;number_rows&gt;]  [| GROUP BY {col_name | expr | position} YIELD &lt;col_name&gt;]  &lt;node_list&gt;    | &lt;vid&gt; [, &lt;vid&gt; ...]    | $-.id  &lt;edge_type_list&gt;    edge_type [, edge_type ...]  &lt;return_list&gt;     &lt;col_name&gt; [AS &lt;col_alias&gt;] [, &lt;col_name&gt; [AS &lt;col_alias&gt;] ...] <\/code><\/pre>\n<h3>\u6570\u636e\u63a7\u5236\u8bed\u8a00\uff08 DCL \uff09<\/h3>\n<p>\u6570\u636e\u63a7\u5236\u8bed\u8a00\uff08 DCL \uff09\u5305\u542b\u8bf8\u5982 <code>GRANT<\/code> \u548c <code>REVOKE<\/code> \u4e4b\u7c7b\u7684\u547d\u4ee4\uff0c\u8fd9\u4e9b\u547d\u4ee4\u4e3b\u8981\u7528\u6765\u5904\u7406\u6570\u636e\u5e93\u7cfb\u7edf\u7684\u6743\u9650\u3001\u5176\u4ed6\u63a7\u4ef6\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff939710cb.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h2>\u6570\u636e\u6a21\u578b<\/h2>\n<p>\u67e5\u8be2\u8bed\u53e5\u57fa\u4e8e\u4ee5\u4e0b\u6570\u636e\u6a21\u578b\uff1a<\/p>\n<h3>RDBMS \u5173\u7cfb\u7ed3\u6784\u56fe<\/h3>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff93e53ca4.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h3>Nebula Graph \u6700\u5c0f\u6a21\u578b\u56fe<\/h3>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff942e7258.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<p>\u672c\u6587\u5c06\u4f7f\u7528 NBA \u6570\u636e\u96c6\u3002\u8be5\u6570\u636e\u96c6\u5305\u542b\u4e24\u79cd\u7c7b\u578b\u7684\u70b9\uff0c\u4e5f\u5c31\u662f\u4e24\u4e2a\u6807\u7b7e\uff0c\u5373 <code>player<\/code> \u548c <code>team<\/code> \uff1b\u4e24\u79cd\u7c7b\u578b\u7684\u8fb9\uff0c\u5206\u522b\u662f <code>serve<\/code> \u548c <code>follow<\/code>\u3002<\/p>\n<p>\u5728\u5173\u7cfb\u578b\u6570\u636e\u7ba1\u7406\u7cfb\u7edf\u4e2d\uff08 RDBMS \uff09\u4e2d\uff0c\u6211\u4eec\u7528\u8868\u6765\u8868\u793a\u70b9\u4ee5\u53ca\u4e0e\u70b9\u76f8\u5173\u7684\u8fb9\uff08\u8fde\u63a5\u8868\uff09\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u521b\u5efa\u4e86\u4ee5\u4e0b\u8868\u683c\uff1a<code>player<\/code>\u3001<code>team<\/code>\u3001<code>serve<\/code> \u548c <code>follow<\/code>\u3002\u5728 <strong>Nebula Graph<\/strong> \u4e2d\uff0c\u57fa\u672c\u6570\u636e\u5355\u4f4d\u662f\u9876\u70b9\u548c\u8fb9\u3002\u4e24\u8005\u90fd\u53ef\u4ee5\u62e5\u6709\u5c5e\u6027\uff0c\u76f8\u5f53\u4e8e RDBMS \u4e2d\u7684\u5c5e\u6027\u3002<\/p>\n<p>\u5728 <strong>Nebula Graph<\/strong> \u4e2d\uff0c\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\u7531\u8fb9\u8868\u793a\u3002\u6bcf\u6761\u8fb9\u90fd\u6709\u4e00\u79cd\u7c7b\u578b\uff0c\u5728 NBA \u6570\u636e\u96c6\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u8fb9\u7c7b\u578b <code>serve<\/code> \u548c <code>follow<\/code> \u6765\u533a\u5206\u4e24\u79cd\u7c7b\u578b\u7684\u8fb9\u3002<\/p>\n<h2>\u793a\u4f8b\u6570\u636e<\/h2>\n<h3>\u5728 RDBMS \u63d2\u5165\u6570\u636e<\/h3>\n<p>\u9996\u5148\uff0c\u8ba9\u6211\u4eec\u770b\u770b\u5982\u4f55\u5728 RDBMS \u4e2d\u63d2\u5165\u6570\u636e\u3002\u6211\u4eec\u5148\u521b\u5efa\u4e00\u4e9b\u8868\uff0c\u7136\u540e\u4e3a\u8fd9\u4e9b\u8868\u63d2\u5165\u6570\u636e\u3002<\/p>\n<pre><code>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); <\/code><\/pre>\n<p>\u7136\u540e\u63d2\u5165\u6570\u636e\u3002<\/p>\n<pre><code>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); <\/code><\/pre>\n<h3>\u5728 Nebula Graph \u63d2\u5165\u6570\u636e<\/h3>\n<p>\u5728 <strong>Nebula Graph<\/strong> \u4e2d\u63d2\u5165\u6570\u636e\u4e0e\u4e0a\u8ff0\u7c7b\u4f3c\u3002\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u597d\u6570\u636e\u7ed3\u6784\uff0c\u4e5f\u5c31\u662f\u521b\u5efa\u597d schema \u3002\u7136\u540e\u53ef\u4ee5\u9009\u62e9\u624b\u52a8\u6216\u4f7f\u7528 Nebula Graph Studio \uff08 Nebula Graph \u7684\u53ef\u89c6\u5316\u5de5\u5177\uff09\u5bfc\u5165\u6570\u636e\u3002\u8fd9\u91cc\u6211\u4eec\u624b\u52a8\u6dfb\u52a0\u6570\u636e\u3002<\/p>\n<p>\u5728\u4e0b\u65b9\u7684 <code>INSERT<\/code> \u63d2\u5165\u8bed\u53e5\u4e2d\uff0c\u6211\u4eec\u5411\u56fe\u7a7a\u95f4 NBA \u63d2\u5165\u4e86\u7403\u5458\u6570\u636e\uff08\u8fd9\u548c\u5728 MySQL \u4e2d\u63d2\u5165\u6570\u636e\u7c7b\u4f3c\uff09\u3002<\/p>\n<pre><code>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); <\/code><\/pre>\n<p>\u8003\u8651\u5230\u7bc7\u5e45\u9650\u5236\uff0c\u6b64\u5904\u6211\u4eec\u5c06\u8df3\u8fc7\u63d2\u5165\u7403\u961f\u548c\u8fb9\u7684\u91cd\u590d\u6b65\u9aa4\u3002\u4f60\u53ef\u4ee5\u70b9\u51fb\u6b64\u5904\u4e0b\u8f7d\u793a\u4f8b\u6570\u636e\u4eb2\u81ea\u5c1d\u8bd5\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/07\/20200728_5f1ff946b6b14.png\" alt=\"\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 nGQL \u5bf9\u6bd4\" \/><\/p>\n<h2>\u589e\u5220\u6539\u67e5\uff08 CRUD \uff09<\/h2>\n<p>\u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 SQL \u548c nGQL \u8bed\u53e5\u521b\u5efa\uff08 C \uff09\u3001\u8bfb\u53d6\uff08 R \uff09\u3001\u66f4\u65b0\uff08 U \uff09\u548c\u5220\u9664\uff08 D \uff09\u6570\u636e\u3002<\/p>\n<h3>\u63d2\u5165\u6570\u636e<\/h3>\n<pre><code>mysql&gt; INSERT INTO player VALUES (100, 'Tim Duncan', 42);  nebula&gt; INSERT VERTEX player(name, age) VALUES 100: ('Tim Duncan', 42); <\/code><\/pre>\n<h3>\u67e5\u8be2\u6570\u636e<\/h3>\n<p>\u67e5\u627e ID \u4e3a 100 \u7684\u7403\u5458\u5e76\u8fd4\u56de\u5176 <code>name<\/code> \u5c5e\u6027\uff1a<\/p>\n<pre><code>mysql&gt; SELECT player.name FROM player WHERE player.id = 100;  nebula&gt; FETCH PROP ON player 100 YIELD player.name; <\/code><\/pre>\n<h3>\u66f4\u65b0\u6570\u636e<\/h3>\n<pre><code>mysql&gt; UPDATE player SET name = 'Tim';  nebula&gt; UPDATE VERTEX 100 SET player.name = \"Tim\"; <\/code><\/pre>\n<h3>\u5220\u9664\u6570\u636e<\/h3>\n<pre><code>mysql&gt; DELETE FROM player WHERE name = 'Tim';  nebula&gt; DELETE VERTEX 121; nebula&gt; DELETE EDGE follow 100 -&gt; 200; <\/code><\/pre>\n<h2>\u5efa\u7acb\u7d22\u5f15<\/h2>\n<p>\u8fd4\u56de\u5e74\u9f84\u8d85\u8fc7 36 \u5c81\u7684\u7403\u5458\u3002<\/p>\n<pre><code>SELECT player.name FROM player WHERE player.age &lt; 36; <\/code><\/pre>\n<p>\u4f7f\u7528 nGQL \u67e5\u8be2\u6709\u4e9b\u4e0d\u540c\uff0c\u56e0\u4e3a\u60a8\u5fc5\u987b\u5728\u8fc7\u6ee4\u5c5e\u6027\u4e4b\u524d\u521b\u5efa\u7d22\u5f15\u3002\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u89c1 \u7d22\u5f15\u6587\u6863\u3002<\/p>\n<pre><code>CREATE TAG INDEX player_age ON player(age); REBUILD TAG INDEX player_age OFFLINE; LOOKUP ON player WHERE player.age &lt; 36; <\/code><\/pre>\n<h2>\u793a\u4f8b\u67e5\u8be2<\/h2>\n<p>\u672c\u8282\u63d0\u4f9b\u4e00\u4e9b\u793a\u4f8b\u67e5\u8be2\u4f9b\u60a8\u53c2\u8003\u3002<\/p>\n<h3>\u793a\u4f8b 1<\/h3>\n<p>\u5728\u8868 <code>player<\/code> \u4e2d\u67e5\u8be2 ID \u4e3a 100 \u7684\u7403\u5458\u5e76\u8fd4\u56de\u5176 <code>name<\/code> \u5c5e\u6027\u3002<\/p>\n<pre><code>SELECT player.name FROM player WHERE player.id = 100; <\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\u4f7f\u7528 <strong>Nebula Graph<\/strong> \u67e5\u627e ID \u4e3a 100 \u7684\u7403\u5458\u5e76\u8fd4\u56de\u5176 <code>name<\/code> \u5c5e\u6027\u3002<\/p>\n<pre><code>FETCH PROP ON player 100 YIELD player.name; <\/code><\/pre>\n<p><strong>Nebula Graph<\/strong> \u4f7f\u7528 <code>FETCH<\/code> \u5173\u952e\u5b57\u83b7\u53d6\u7279\u5b9a\u70b9\u6216\u8fb9\u7684\u5c5e\u6027\u3002\u672c\u4f8b\u4e2d\uff0c\u5c5e\u6027\u5373\u4e3a\u70b9 100 \u7684\u540d\u79f0\u3002nGQL \u4e2d\u7684 <code>YIELD<\/code> \u5173\u952e\u5b57\u76f8\u5f53\u4e8e SQL \u4e2d\u7684 <code>SELECT<\/code>\u3002<\/p>\n<h3>\u793a\u4f8b 2<\/h3>\n<p>\u67e5\u627e\u7403\u5458 Tim Duncan \u5e76\u8fd4\u56de\u4ed6\u6548\u529b\u7684\u6240\u6709\u7403\u961f\u3002<\/p>\n<pre><code>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' <\/code><\/pre>\n<p>\u4f7f\u7528\u5982\u4e0b nGQL \u8bed\u53e5\u5b8c\u6210\u76f8\u540c\u64cd\u4f5c\uff1a<\/p>\n<pre><code>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; <\/code><\/pre>\n<p>\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u4e00\u4e0b\uff0c\u5728 nGQL \u4e2d\u7684\u7b49\u4e8e\u64cd\u4f5c\u91c7\u7528\u7684\u662f C \u8bed\u8a00\u98ce\u683c\u7684 <code>==<\/code>\uff0c\u800c\u4e0d\u662f SQL \u98ce\u683c\u7684 <code>=<\/code>\u3002<\/p>\n<h3>\u793a\u4f8b 3<\/h3>\n<p>\u4ee5\u4e0b\u67e5\u8be2\u7565\u590d\u6742\uff0c\u73b0\u5728\u6211\u4eec\u6765\u67e5\u8be2\u7403\u5458 Tim Duncan \u7684\u961f\u53cb\u3002<\/p>\n<pre><code>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') <\/code><\/pre>\n<p>nGQL \u5219\u4f7f\u7528\u7ba1\u9053\u5c06\u524d\u4e00\u4e2a\u5b50\u53e5\u7684\u7ed3\u679c\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u5b50\u53e5\u7684\u8f93\u5165\u3002<\/p>\n<pre><code>GO FROM 100 OVER serve YIELD serve._dst AS Team | GO FROM $-.Team OVER serve REVERSELY YIELD $$.player.name; <\/code><\/pre>\n<p>\u60a8\u53ef\u80fd\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u6211\u4eec\u4ec5\u5728 SQL \u4e2d\u4f7f\u7528\u4e86 <code>JOIN<\/code>\u3002\u8fd9\u662f\u56e0\u4e3a <strong>Nebula Graph<\/strong> \u53ea\u662f\u4f7f\u7528\u7c7b\u4f3c Shell \u7684\u7ba1\u9053\u5bf9\u5b50\u67e5\u8be2\u8fdb\u884c\u5d4c\u5957\uff0c\u8fd9\u6837\u66f4\u7b26\u5408\u6211\u4eec\u7684\u9605\u8bfb\u4e60\u60ef\u4e5f\u66f4\u7b80\u6d01\u3002<\/p>\n<h2>\u53c2\u8003\u8d44\u6599<\/h2>\n<p>\u6211\u4eec\u5efa\u8bae\u60a8\u4eb2\u81ea\u5c1d\u8bd5\u4e0a\u8ff0\u67e5\u8be2\u8bed\u53e5\uff0c\u8fd9\u5c06\u5e2e\u60a8\u66f4\u597d\u5730\u7406\u89e3 SQL \u548c nGQL\uff0c\u5e76\u8282\u7701\u60a8\u4e0a\u624b nGQL \u7684\u5b66\u4e60\u65f6\u95f4\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u53c2\u8003\u8d44\u6599\uff1a<\/p>\n<ul>\n<li>Nebula Graph Studio \u7528\u6237\u6307\u5357<\/li>\n<li>Nebula Graph GitHub \u4ed3\u5e93<\/li>\n<li>Nebula Graph \u5feb\u901f\u5165\u95e8\u6587\u6863<\/li>\n<\/ul>\n<blockquote>\n<p>\u4f5c\u8005\u6709\u8bdd\u8bf4\uff1aHi\uff0cHi\uff0c\u5927\u5bb6\u597d\uff0c\u6211\u662f Amber\uff0cNebula Graph \u7684\u6587\u6863\u5de5\u7a0b\u5e08\uff0c\u5e0c\u671b\u4e0a\u8ff0\u5185\u5bb9\u53ef\u4ee5\u7ed9\u5927\u5bb6\u5e26\u6765\u4e9b\u8bb8\u542f\u53d1\u3002\u9650\u4e8e\u6c34\u5e73\uff0c\u5982\u6709\u4e0d\u5f53\u4e4b\u5904\u8fd8\u8bf7\u65a7\u6b63\uff0c\u5728\u6b64\u611f\u8c22^^<\/p>\n<\/blockquote>\n<p>\u559c\u6b22\u8fd9\u7bc7\u6587\u7ae0\uff1f\u6765\u6765\u6765\uff0c\u7ed9\u6211\u4eec\u7684 GitHub \u70b9\u4e2a star \u8868\u9f13\u52b1\u5566~~       <\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>4<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"2658901\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : zhangysh1995 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4ece\u5934\u5230\u5c3e\u6ca1\u770b\u5230 nGQL \u5168\u79f0\u662f\u4ec0\u4e48\u3002\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"2658902\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : vicsun2020 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @zhangysh1995 \u53c2\u8003\u8d44\u6599\u4e0d\u662f\u5199\u4e86\u53eb Nebula Graph Studio(QL) <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"2658903\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : zhangysh1995 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @vicsun2020 \u9996\u5148\u4e0d\u77e5\u9053\u662f\u4e2a\u5565\u4e1c\u897f\u80af\u5b9a\u5c31\u4e0d\u4f1a\u5f80\u4e0b\u770b\u4e86\u3002\u3002\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"2658904\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : newtype0092 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @zhangysh1995 <br \/>&#8220;\u6458\u8981\uff1a\u8fd9\u7bc7\u6587\u7ae0\u5c06\u4ecb\u7ecd\u56fe\u6570\u636e\u5e93 Nebula Graph \u7684\u67e5\u8be2\u8bed\u8a00 nGQL \u548c SQL \u7684\u533a\u522b\u3002&#8221;<br \/>\u4f60\u7684\u4ece\u5934\u5230\u5c3e\u6b63\u597d\u8df3\u8fc7\u7b2c\u4e00\u884c\u7684\u6458\u8981\u662f\u4e48\u3002\u3002\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>\u5173\u7cfb\u578b\u6570\u636e\u5e93\u67e5\u8be2\u8bed\u8a00 SQL \u548c\u56fe&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/139960"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=139960"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/139960\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=139960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=139960"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=139960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}