可视化(Visual) SQL初探
一、背景
在当今数字化时代,数据信息作为企业和组织的宝贵资源之一,如何挖掘其中的价值并帮助企业和组织个体决策,已然成为炙手可热的话题。数据分析作为其具体载体,是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程。再者,SQL作为数据分析的核心,扮演着不可或缺的角色。SQL是一种强大的编程语言,用于管理和查询关系型数据库中的数据。它使数据分析师和数据库管理人员能够轻松地提取、过滤、汇总和转换大量数据,解决各种业务问题。
然而,掌握SQL这门语言并非易事。SQL不仅包括简单的SELECT查询、INSERT插入等语句,也包括JOIN、GROUP BY、HAVING等复杂概念和特定的语法及函数。也因为这些SQL的高门槛性,限制了数据分析的普世发展。
正是在这样的背景之下,可视化SQL工具优势变得尤为明显。该工具以可视化、工具化的方式呈现SQL任务,让使用者用图形化的方式完成SQL的创建与修改而不必直接书写SQL语句,从而整体降低使用者的学习曲线、提高效率、减少人为细节错误。并且可视化展示SQL任务也能让业务更直观
二、基本概念介绍
该部分涉及SQL 和 可视化部分的基本概念介绍,因篇幅有限,此处会侧重介绍与SQL可视化相关的部分信息,完整的资料可前往本篇结尾的索引部分
01、SQL
SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化编程语言。以下是SQL的一些基本概念:
- 数据库管理
创建数据库、表格和其他数据库对象,以及管理它们的结构和关系。
- 数据操作
允许用户执行各种数据操作,包括查询以获取特定数据、插入新数据、更新现有数据和删除数据。
- 数据查询
通过SELECT语句,用户可以从一个或多个表格中检索数据,并可以对结果进行排序、筛选和聚合。
- 数据完整性
通过约束,如主键、外键和唯一约束,以确保数据的完整性和一致性。
- 数据运算
用与常用的数学运算,如计算总和、平均值、统计数据和执行复杂的数据操作。
- 标准化
SQL是一个标准化的语言,具有广泛的支持和广泛的学习资源。它允许不同数据库管理系统(如MySQL、Oracle、SQL Server)使用相同的语法进行操作。
02、可视化
可视化(Visual)是一种呈现方法,通过使用图形、图表和视觉元素,将抽象的数据结构转化为可见和易于理解的形式,通过可视化,将SQL语句可视化呈现,帮助用户快速、轻松的理解操作语句的条件、关联关系等,以图形和仪表板的形式展示,使复杂的业务查询变得直观可见。一般来说,可视化包括以下部分:
- 建立连接
使用可视化工具建立与数据库的连接。这通常需要提供数据库的连接信息,如主机名、用户名、密码等。
- 操作实体
可创建表、定义字段、更新表
- 操作语句
使用SELECT来选择特定的数据,或者执行其他SQL操作,如INSERT、UPDATE、DELETE等
- 限定条件
可视化选择WHERE语句的条件,限定GROUP BY/ORDER BY等
- 子查询
可视化呈现查询关系
三、方案分解
01、结构化SQL
拆解
通过SQL的拆解完成结构化描述,以此表达数据元素之间的关系和操作,以便有效的进行数据的访问和处理。首先以一个简单的SQL语句为例


以上图为例,一条SQL包含了操作、对象、查询条件,也会包含更高级的子表、联表、视图等。

抽象语法树
抽象语法树(Abstract Syntax Tree,AST)是一种树状数据结构,用于表示编程语言的源代码的抽象结构。它将代码分解成语法元素(如语句、表达式、变量声明等),并以层次结构的方式表达其关系。
通过抽象语法树方法,对SQL语句进行结构化处理,得到对象、操作、条件等,以此达到数据化存储运算的目的,以下为抽象语法树的转换例子


02、图
图通过视觉元素(矩形、点、线)等表达业务关系。
在可视化SQL中可通过图形与SQL结构化数据对应,完成SQL的图表达

03、转换

SQL与图分别由对应的数据模型控制,两者相互之间的转换同步由对应的数据模型之间的同步更新完成。又因为无论是图操作还是SQL输入,均有可能导致两者无法同步,会有同步状态表示当前SQL与图是否“相等”
四、实现设计
01、流程
用户输入转化为图

图操作转换为SQL

02、界面介绍

- 表节点
通过拖拽左侧表节点至右侧图区域可生成表节点,包含选择表,显示表字段信息能力
- 操作节点
通过拖拽左侧操作节点至右侧图区域可生成操作节点。以SELECT节点为例,包含选择字段、配置条件等能力
- 边
节点之间通过单向边连接,表示节点关系,如FROM,子表,JOIN等
- 图区域
SQL可视化区域,包含拖拽、连线、删除、节点操作等能力,可视化清晰展示SQL
- SQL 代码区域
代码显示区域,支持用户修改
- 合法提醒
提示图与SQL输入的等效关系,也表示当前是否合法
03、演示
视频
04、引用框架介绍
- Vue
Vue.js是一款现代化的JavaScript框架,用于构建用户界面和单页面应用程序。Vue具有响应式数据绑定、组件化开发、简洁的模板语法和强大的生态系统等特性,使其成为构建现代Web应用程序的强大工具。
- CodeMirror
CodeMirror是一款高度可定制的开源文本编辑器,特别适用于在Web应用程序中嵌入代码编辑功能。它支持多种编程语言和文件格式的语法高亮显示,拥有丰富的插件和主题库,以及交互式的编辑功能,使开发者能够创建强大的代码编辑器和开发环境。
- Antv X6
AntV X6(Ant Visualization X6)是一个基于JavaScript的现代数据可视化库,帮助开发者创建交互性强、美观的数据可视化图表和图形。AntV X6具有强大的可扩展性,支持绘制各种图表,包括流程图、组织图、树状图等,同时提供了丰富的布局和自定义选项,广泛应用于数据仪表板、数据分析和数据可视化应用程序的构建。
- node-sql-parser
node-sql-parser 是一个基于 Node.js 的 JavaScript 库,用于解析和操作 SQL 查询语句。它将 SQL 查询文本解析为数据结构,以便在应用程序中进行进一步的处理、修改或转换。
05、架构图

06、优化策略
- 离线本地计算
所有的转换计算均通过本地客户端完成,减轻服务端压力
- 跨线程运算
计算放置于Worker中,不阻塞主线程渲染
- 节流操作
无论是SQL结构化转换还是图数据的转化计算,都非常耗费计算资源,通过节流处理,减少不必要的计算
五、同类产品
- SQL Server Management Studio

SSMS 提供了一个功能强大的 SQL 查询编辑器,可用于编写、测试和执行 SQL 查询。支持语法高亮显示、智能代码完成和调试功能
- MySQL Workbench

MySQL Workbench内置了一个高级 SQL 查询编辑器,支持语法高亮显示、自动完成和查询执行计划分析,使用户能够轻松编写和测试 SQL 查询
- Navicat Premium

可视化查询创建工具用于创建、编辑和运行查询。透过关键字建议和减少重复输入相同的代码,自动完成代码和自定义的代码段功能可让编码更加快速。调试组件能快速寻找和更正错误,可设置断点,逐步运行程序,查看和修改变量值,以及检查调用堆栈。
- VisualSQL

VisualSQL是个人开发者发布的基于MIT开源协议的Demo作品,包含完整的图功能
六、总结
本文尚处在探索与试验Demo阶段,功能演示并不成熟。但可视化SQL工具在解决数据分析普世传播和提高数据分析的效率上有一定的现实意义。通过本文,我们可以了解到SQL 在数据分析中的关键作用与SQL 语言的高门槛性,进而引出可视化 SQL 查询工具的优势。
通过这种工具,用户可以轻松地创建复杂的 SQL 查询,无需深入了解 SQL 语法的细节。这使更多的人能够参与数据分析过程,促进了数据驱动的决策和业务洞察的应用,使数据分析变得更加直观、高效且容易上手,有望推动数据驱动决策的广泛应用。
七、其他的一些思考
本文介绍了使用可视化图的方法来降低 SQL 语言学习门槛,但还存在其他创新方法可以进一步简化 SQL 查询的创建过程,从而使更多人能够参与数据分析和数据库管理。以下是一些其他方向的思考
- 语音输入接口
语音识别技术的发展使得使用语音输入 SQL 查询变得可能。通过自然语言的语音命令,用户可以直接向数据库提出查询请求,而无需手动编写 SQL 代码。
- SQL 智能提示
利用机器学习和自然语言处理技术,可以开发出智能提示工具,能够根据用户的输入自动补全 SQL 查询或提供相关建议。这有助于减少语法错误,提高查询的准确性,并加速查询构建的过程。
- 自动化数据关系发现
在数据分析中,很多时候用户需要查询多个表之间的关系,这通常需要复杂的联接操作。自动化数据关系发现工具可以分析数据库架构并自动创建查询,减少了用户的工作负担。
- AI 生成 SQL
基于人工智能的自动生成 SQL 工具。这些工具可以根据用户的数据需求和条件生成 SQL 查询,无需用户手动干预。这将进一步简化 SQL 查询的创建,让用户专注于问题定义而不是编写代码。
八、附录
Vue.js
X6图编辑引擎
CodeMirror
Nodejs SQL Parser
What is Visual SQL
Best SQL Query Builder & Generator Tools
VisualSQL
抽象语法树
数据结构
相关文章:
可视化(Visual) SQL初探
一、背景 在当今数字化时代,数据信息作为企业和组织的宝贵资源之一,如何挖掘其中的价值并帮助企业和组织个体决策,已然成为炙手可热的话题。数据分析作为其具体载体,是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程…...
多目标权重融合方式
1. 多目标学习在推荐系统的应用(MMOE/ESMM/PLE) - 知乎 ## combine loss ctr_log_var tf.get_variable(namectr_log_var,dtypetf.float32,shape(1,),initializertf.zeros_initializer() ) ysl_log_var tf.get_variable(nameysl_log_var,dtypetf.float32,shape(1,),initializ…...
软件工程与计算总结(二十)软件交付
软件交付是软件项目的结束阶段 ,标志着软件开发任务的完成——其作为一个分水岭,区分了软件开发与软件维护两个既连续又不同的软件产品生存状态~ 在经历连续的辛苦工作之后,开发人员在胜利曙光之前难免会忽视软件交付阶段的一些工作——在准…...
02 开闭原则
官方定义: 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修 改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保 软件系统开发和维护过程的可靠性。 通俗解释: 对扩展开放…...
LamdaUpdateWapper失效问题
因为入参是json的文本格式,结果ID多输入了一个空格直接修改返回条数为0。 比如ID入参在swagger中或前端入参:“412210293355454”,结果不小心为“ 412210293355454”, 而且几乎看不出来这个空格。 记住:事出原因必有妖…...
“权限之舞:Linux安全之道”
W...Y的主页😊 代码仓库分享💕 🍔前言: 在之前的Linux博客中,我们学习了基础的Linux指令,具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中,只有在root账号中…...
Visual Studio Code官网下载、vscode下载很慢、vscode下载不了 解决方案
前言 开发界的小伙伴们对于Visual Studio Code开发环境来可以说非常熟悉了,但由于在Visual Studio Code官网的下载速度非常的慢,即便开了代理也是一样的很慢、甚至下载被中断,几乎不能下载。 解决方案 1、在Web浏览器上打开vscode官网&#…...
URL、域名和网址的区别
网址、域名和URL 都用于描述在互联网上定位资源的标识符,通常它们可以互换使用,但严格来说有区别: URL(Uniform Resource Locator):URL是统一资源定位符的缩写,它是一个包含地址信息的完整字符串…...
【oceanbase】centos7/kylinv10部署oceanbase(x86版本)
1. 修改系统 vim /etc/sysctl.conf fs.file-max 102400 net.nf_conntrack_max 1024000 net.netfilter.nf_conntrack_max 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下…...
论文导读 | 支持事务与图分析的图存储系统
事务系统保证了系统的数据一致性,确保事务更新的原子性或是不同事务之间的数据隔离性等在多线程并发环境下所必不可少的ACID特性。而在今天快速变化的商业环境下,诸如物流和供应链,金融风控和欺诈检测等场景都需要图分析系统提供对数据动态更…...
Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )
ESLint 在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一…...
【C++】命名空间和using namespace std的注意事项
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
修改51单片机中数组元素的值
在8051单片机中,code关键字用于将数据存储在ROM中。由于ROM是只读的,所以在运行时无法直接修改seven_seg数组中的值。 如果您想在main函数中修改seven_seg[1]的值为0xc0,您可以将seven_seg数组定义为可写的变量,而不是存储在ROM中…...
Ruby和面向对象技术
Ruby和许多极为流行的编程语言都是面向对象的。多数的面向对象编程语言,每个对象都是一个样例或者既定类的实例以及独立对象的行为。 一、创建一个通用对象 创建一个通用对象 obj Object.new定义通用对象的行为 def obj.talk puts "I am an object"p…...
C++11常用新特性——可变参数模板
可变参数模板 C11中,可变参数模板是一个非常强大的特性,它允许函数和类模板接受任意数量和类型的参数,这为类型的安全编程提供了更广泛的灵活性。下面我将详细介绍这一新特性。 基础概念: 可变参数模板允许你传递多个类型和数量…...
SpringCloud-Seata
一、介绍 (1)实现分布式事务 (2)解决Spring只支持单机事务 (3)事务ID TC(事务协调者) TM(事务管理者) RM(资源管理者)...
java击球小游戏运行代码
创建一个图形化的小游戏通常需要使用Java图形库,例如Swing或JavaFX。下面是一个使用JavaFX创建的简单的图形化小游戏示例,其中一个小球会在窗口内移动,你需要点击小球以增加得分: import javafx.application.Application; import…...
Hadoop面试题+详解
20道面试题及详细解答! 1.说说什么是结构化数据、非结构化数据和半结构化数据 结构化数据、非结构化数据和半结构化数据是根据数据的组织结构和格式来划分的不同类型的数据。 结构化数据:结构化数据是按照预定义的数据模型进行组织和存储的数据。它通常…...
PDF编辑阅读:Acrobat Pro DC 2021中文稳定版
Acrobat Pro DC 2021是一款专业的PDF编辑和阅读软件。它可以创建、编辑、组合、签署和分享PDF文件,提供了许多强大的功能,如PDF文件转换、OCR识别、PDF文件合并、加密和解密等等。Acrobat Pro DC 2021的界面简单直观,易于使用,而且…...
单词规律(C++解法)
题目 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern "abba", s …...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
