当前位置: 首页 > news >正文

neo4j数据库创建范例(SQL文)

SQL文:

SELECT c.id, c.name, o.amount
FROM customers c
JOIN orders o ON c.id = o.customer_id
  1. 先创建节点(Table、Column)。
  2. 再 MATCH 出节点,建立关系

✅ 针对你的 SQL 的完整 Cypher

// -----------------------------
// 1. 创建表节点
// -----------------------------
MERGE (t_customers:Table {name: "customers"});
MERGE (t_orders:Table {name: "orders"});// -----------------------------
// 2. 创建字段节点
// -----------------------------
MERGE (col_c_id:Column {name: "id", table: "customers"});
MERGE (col_c_name:Column {name: "name", table: "customers"});
MERGE (col_o_amount:Column {name: "amount", table: "orders"});
MERGE (col_o_customer_id:Column {name: "customer_id", table: "orders"});// -----------------------------
// 3. 建立表-字段关系
// -----------------------------
MATCH (t_customers:Table {name: "customers"}), (col_c_id:Column {name: "id", table:"customers"})
MERGE (t_customers)-[:HAS_COLUMN]->(col_c_id);MATCH (t_customers:Table {name: "customers"}), (col_c_name:Column {name: "name", table:"customers"})
MERGE (t_customers)-[:HAS_COLUMN]->(col_c_name);MATCH (t_orders:Table {name: "orders"}), (col_o_amount:Column {name: "amount", table:"orders"})
MERGE (t_orders)-[:HAS_COLUMN]->(col_o_amount);MATCH (t_orders:Table {name: "orders"}), (col_o_customer_id:Column {name: "customer_id", table:"orders"})
MERGE (t_orders)-[:HAS_COLUMN]->(col_o_customer_id);// -----------------------------
// 4. 建立字段间 JOIN 关系
// -----------------------------
MATCH (col_c_id:Column {name:"id", table:"customers"}),(col_o_customer_id:Column {name:"customer_id", table:"orders"})
MERGE (col_c_id)-[:JOINS {on:"="}]->(col_o_customer_id);

🔍 查询验证

MATCH (t:Table)-[:HAS_COLUMN]->(c:Column)
RETURN t.name AS table, c.name AS column;MATCH (c1:Column)-[j:JOINS]->(c2:Column)
RETURN c1.table AS table1, c1.name AS column1,j.on AS condition,c2.table AS table2, c2.name AS column2;

结果应该是:

表-字段

table      | column
-----------+------------
customers  | id
customers  | name
orders     | amount
orders     | customer_id

JOIN 关系

table1     | column1 | condition | table2 | column2
-----------+---------+-----------+--------+------------
customers  | id      | =         | orders | customer_id

完整的扩展方案,把 SQL JOIN 的信息 全部带进 Neo4j 的关系属性里。


1. SQL 信息里能提取的点

像你这句:

SELECT c.id, c.name, o.amount
FROM customers c
JOIN orders o ON c.id = o.customer_id;

可抽取出来的 JOIN 元数据:

  • 关系条件c.id = o.customer_id
  • 连接符号=
  • JOIN 类型INNER JOIN(省略 INNER 默认就是 INNER)
  • 左表字段customers.id
  • 右表字段orders.customer_id

2. 在 Neo4j 里扩展关系属性

建关系时,不只存 on:"=",而是存完整信息:

MERGE (col_c_id:Column {name:"id", table:"customers"})
MERGE (col_o_customer_id:Column {name:"customer_id", table:"orders"})
MERGE (col_c_id)-[:JOINS {condition: "c.id = o.customer_id",operator: "=",join_type: "INNER",left_table: "customers",left_column: "id",right_table: "orders",right_column: "customer_id"
}]->(col_o_customer_id);

3. 查询结果更直观

MATCH (c1:Column)-[j:JOINS]->(c2:Column)
RETURN j.join_type AS join_type,j.condition AS condition,j.left_table AS left_table,j.left_column AS left_column,j.operator AS operator,j.right_table AS right_table,j.right_column AS right_column;

结果就会是:

join_type | condition               | left_table | left_column | operator | right_table | right_column
----------+--------------------------+------------+-------------+----------+-------------+--------------
INNER     | c.id = o.customer_id    | customers  | id          | =        | orders      | customer_id

4. 通用做法

  • condition:存完整 SQL 条件
  • operator:存 =>< 这种符号
  • join_type:存 INNER / LEFT / RIGHT / FULL
  • left_table / right_table:存表名
  • left_column / right_column:存字段名

这样以后你要还原 SQL JOIN,或者做可视化,都很方便。



文章转载自:

http://FiOElP4i.hryhq.cn
http://G8KeytAY.hryhq.cn
http://te6uOm7W.hryhq.cn
http://NX3Wy0zV.hryhq.cn
http://epbsb7Re.hryhq.cn
http://sQNWqE83.hryhq.cn
http://8GVwzoEP.hryhq.cn
http://3EzMRcKZ.hryhq.cn
http://4TDozKgE.hryhq.cn
http://AyeHlrif.hryhq.cn
http://GwFXu5ht.hryhq.cn
http://WL06YL8N.hryhq.cn
http://eDM52yGF.hryhq.cn
http://OX5ZXgy4.hryhq.cn
http://SCzJqv0h.hryhq.cn
http://PopqUDj7.hryhq.cn
http://GShnZJWd.hryhq.cn
http://WI7i687O.hryhq.cn
http://2AgSl2FG.hryhq.cn
http://7enC6TsI.hryhq.cn
http://BHu1pBDd.hryhq.cn
http://w3cINUPi.hryhq.cn
http://We5lMOW5.hryhq.cn
http://ypuUesbq.hryhq.cn
http://85YSG2Sh.hryhq.cn
http://DneCyhzo.hryhq.cn
http://YfHIjBN5.hryhq.cn
http://pPNbRsoa.hryhq.cn
http://qBozCXuC.hryhq.cn
http://29Wa0YYp.hryhq.cn
http://www.dtcms.com/a/376664.html

相关文章:

  • [rStar] docs | 求解协调器
  • WPF迁移avalonia之触发器
  • 【WPF+Prism】日常开发问题总结
  • 差异基因分析实战:手把手教你用R语言找到关键基因
  • 金融数据库--3Baostock
  • 【ICLR 2023】可逆列网络(RevCol)
  • Java SE 与常用框架
  • Web安全基石:深入理解与防御越权问题
  • 手写MyBatis第58弹:如何优雅输出可执行的SQL语句--深入理解MyBatis日志机制:
  • 2025流量新逻辑:AI × IP × 联盟|创客匠人
  • UGUI源码剖析(15):Slider的运行时逻辑与编辑器实现
  • 第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API
  • 基于Matlab不同作战类型下兵力动力学模型的构建与稳定性分析
  • 基于AIS动态数据与AI结合得经纬度标示算法
  • 第5章 HTTPS与安全配置
  • ZYNQ PL端采集AD7606数据与ARM端QT显示实战指南
  • 头条号采集软件V12.2主要更新内容
  • 吱吱企业即时通讯平衡企业通讯安全与协作,提升企业办公效率
  • 中线安防保护器,也叫终端电气综合治理保护设备为现代生活筑起安全防线
  • 从零实现一个简化版string 类 —— 深入理解std::string的底层设计
  • 记一次Cloudflare五秒盾的研究
  • RDMA和RoCE有损无损
  • 大数据毕业设计选题推荐-基于大数据的护肤品店铺运营数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • C#,RabbitMQ从入门到精通,.NET8.0(路由/分布式/主题/消费重复问题 /延迟队列和死信队列/消息持久化 )/RabbitMQ集群模式
  • 开源芯片革命的起源与未来
  • 开源的Web服务器管理平台Termix
  • Dify开源AI框架介绍
  • Git 技巧:用 --no-walk 参数 + 别名,精准显示指定提交记录
  • kafka3.8集群搭建
  • 基于 Python + redis + flask 的在线聊天室