前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能数据库客户端工具真香!

智能数据库客户端工具真香!

作者头像
永恒君
发布2023-09-02 15:17:41
4510
发布2023-09-02 15:17:41
举报
文章被收录于专栏:开源小分队

今年最火的 IT 技术当属 AIGC,AI 已经应用到各种场景,最近在逛github时候发现了一个智能且多功能的多数据库客户端工具--Chat2DB,目前在GitHub上标星8k+。

项目简介

Chat2DB 是阿里开源多数据库客户端工具,支持 Windows、Mac、Linux等操作系统,Chat2DB 相比于其他数据库客户端 Navicat、DBeaver,Chat2DB集成了AIGC的能力,能够通过自然语言转换成 SQL,也可以将SQL转换为自然语言,同时还可以优化 SQL。目前支持MySQL、PostgreSQL、Oracle、SQLServer、ClickHouse、OceanBase、H2、SQLite等数据库。

下载安装

项目地址https://github.com/alibaba/Chat2DB/releases,根据自己操作系统下载安装即可。

配置AI,API_KEY 可以在Chat2DB 官网中获取。

自然语言转SQL

首先准备3张测试表

代码语言:javascript
复制
-- 1、建部门表
create table dept(
DEPTNO INT(2) NOT NULL PRIMARY KEY,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);

-- 2、建员工表
CREATE TABLE emp(
EMPNO INT(4) NOT NULL PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR NUMERIC(4),
HIREDATE DATETIME,
SAL NUMERIC(7,2),
COMM NUMERIC(7,2),
DEPTNO INT(2)
);

-- 3、建工资等级表
CREATE TABLE salgrade (
GRADE NUMERIC,
LOSAL NUMERIC,
HISAL NUMERIC
);

Chat2DB 可以使用自然语言直接添加测试数据,这个功能太香了!查询支持单表查询、多表联合查询。

温馨提示自然语言转SQL,需要在选中需要处理的语句后选择用于生成的SQL的原始表。

代码语言:javascript
复制
--- BEGIN ---
员工表插入测试10条测试数据

--- 自然语言转换 ---
INSERT INTO emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) 
VALUES 
(1, 'John', 'Manager', NULL, '2021-01-01', 5000, NULL, 1),
(2, 'Jane', 'Salesman', 1, '2021-02-01', 3000, 500, 1),
(3, 'Bob', 'Clerk', 1, '2021-03-01', 2000, NULL, 2),
(4, 'Mary', 'Salesman', 1, '2021-04-01', 2500, 100, 2),
(5, 'Tom', 'Manager', NULL, '2021-05-01', 6000, NULL, 1),
(6, 'Sue', 'Salesman', 5, '2021-06-01', 3500, 700, 1),
(7, 'Mike', 'Clerk', 5, '2021-07-01', 2200, NULL, 2),
(8, 'Lisa', 'Salesman', 5, '2021-08-01', 2800, 200, 2),
(9, 'Jack', 'Manager', NULL, '2021-09-01', 7000, NULL, 1),
(10, 'Jill', 'Clerk', 9, '2021-10-01', 2400, NULL, 2);
--- END --- 


--- BEGIN ---
部门表插入5条数据

--- 自然语言转换 ---
INSERT INTO dept (DEPTNO, DNAME, LOC) VALUES 
(1, '部门1', '地点1'), 
(2, '部门2', '地点2'), 
(3, '部门3', '地点3'), 
(4, '部门4', '地点4'), 
(5, '部门5', '地点5');
--- END --- 

--- BEGIN ---
工资等级表插入3条数据
--- 自然语言转换 ---
INSERT INTO salgrade (GRADE, LOSAL, HISAL) VALUES 
(1, 700, 1200), 
(2, 1201, 1400), 
(3, 1401, 2000);
--- END --- 

--- BEGIN ---
查询年龄大于30岁的员工
--- 自然语言转换 ---
SELECT * FROM emp WHERE TIMESTAMPDIFF(YEAR, HIREDATE, CURDATE()) > 30;
--- END --- 

--- BEGIN ---
查询各个部门工资总和

--- 自然语言转换 ---
SELECT DEPTNO, SUM(SAL) AS TOTAL_SALARY FROM emp GROUP BY DEPTNO;
--- END ---

SQL解释

把SQL翻译为自然语言,适合很长的 sql 语句,便于理解。

代码语言:javascript
复制
--- BEGIN ---
select ename as "姓名",sal*12+comm as "年 薪" from emp;

--- 解释SQL ---
这个SQL语句从emp表中选择ename和sal列,并将sal乘以12加上comm列的值作为“年薪”列。结果将以“姓名”和“年薪”列的形式返回。
--- END ---

SQL优化

对于性能不好的sql,给出优化建议。

代码语言:javascript
复制
--- BEGIN ---
SELECT COUNT(*) FROM emp WHERE HIREDATE  BETWEEN '2012-01-01' AND '2012-12-31';

--- SQL优化 ---
优化建议如下:

1. 索引优化:为HIREDATE列创建索引,可以加快查询速度。

2. 数据库分区:如果emp表非常大,可以考虑对其进行分区,以提高查询效率。

3. 日期格式优化:将日期格式转换为标准格式,如YYYY-MM-DD,可以避免不必要的转换和比较操作,提高查询效率。

4. 缓存优化:如果查询频率较高,可以考虑将查询结果缓存起来,以减少数据库访问次数。

5. 查询语句优化:使用EXISTS或IN子查询代替BETWEEN操作符,可以提高查询效率。例如:

SELECT COUNT(*) FROM emp WHERE HIREDATE IN (SELECT HIREDATE FROM emp WHERE HIREDATE >= '2012-01-01' AND HIREDATE <= '2012-12-31');

或者:

SELECT COUNT(*) FROM emp WHERE EXISTS (SELECT 1 FROM emp WHERE HIREDATE >= '2012-01-01' AND HIREDATE <= '2012-12-31' AND emp.HIREDATE = HIREDATE);
--- END ---

项目地址

代码语言:javascript
复制
https://github.com/alibaba/Chat2DB

总结

Chat2DB 不仅具有传统的数据库客户端的增删改查能力,同时还是具有了AI 能力,在复杂的业务SQL可能暂时还无法给到很正确提示,在后续的发展中正确性会越来越高的,感兴趣的小伙伴赶快去试试吧~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源小分队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目简介
  • 下载安装
  • 自然语言转SQL
  • SQL解释
  • SQL优化
  • 项目地址
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档