今年最火的 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可能暂时还无法给到很正确提示,在后续的发展中正确性会越来越高的,感兴趣的小伙伴赶快去试试吧~