SQLite 3.39.0 发布,支持右外连接和全外连接
Posted 不剪发的Tony老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite 3.39.0 发布,支持右外连接和全外连接相关的知识,希望对你有一定的参考价值。
大家好,我是只谈技术不剪发的 Tony 老师。
SQLite 开发团队于 2022 年 06 月 25 日发布了 SQLite 3.39.0 版本。该版本最大的更新就是支持 RIGHT OUTER JOIN 和 FULL OUTER JOIN,本文给大家逐一进行分析。
如果觉得文章有用,欢迎评论📝、点赞👍、推荐🎁
右外连接和全外连接
一直以来,SQLite 都不支持右外连接和全外连接,SQLite 3.39.0 终于弥补上了这个缺陷。至此,SQLite 提供了 SQL 标准中所有的 JOIN 方式,mysql 需要加油了。
来看一个简单的示例:
sqlite> select sqlite_version();
3.39.0
sqlite> create table t1(id int);
sqlite> insert into t1 values(1),(2),(3);
sqlite> create table t2(id int, name text);
sqlite> insert into t2 values(1, 'one'),(4, 'four');
sqlite> select * from t1 left join t2 on t1.id=t2.id;
1|1|one
2||
3||
sqlite> select * from t2 right join t1 on t1.id=t2.id;
1|one|1
||2
||3
sqlite> select * from t1 full join t2 on t1.id=t2.id;
1|1|one
2||
3||
|4|four
IS [NOT] DISTINCT FROM
SQLite 3.39.0 还增加了两个新的二进制比较运算符:IS NOT DISTINCT FROM 和 IS DISTINCT FROM。
IS NOT DISTINCT FROM 等价于 IS 运算符,它们都和 = 运算符类似,但是支持 NULL 值的比较。例如:
sqlite> select 1=1, 1 IS 1, 1 IS NOT DISTINCT FROM 1;
1|1|1
sqlite> select NULL=NULL, NULL IS NULL, NULL IS NOT DISTINCT FROM NULL;
|1|1
与此类似,IS DISTINCT FROM 等价于 IS NOT 运算符。
新增的两个运算符和 SQL 标准以及 PostgreSQL 实现兼容。
C 接口增强
接口 sqlite3_vtab_distinct() 新增了一个返回码(3),表示查询同时使用了 DISTINCT 以及 ORDER BY 子句。
增加了一个新的接口 sqlite3_db_name(),用于返回数据库连接中的数据库名。
其他增强
UNIX 操作系统接口会在文件打开之前解析文件名中的所有符号链接,从而为数据库创建一个标准名称。
延迟视图的物化操作,直到真正需要时才物化,从而避免不必要的工作。
任何聚合查询中都可以使用 HAVING 子句,即使查询中没有 GROUP BY 子句。在之前的版本中,HAVING 子句必须和 GROUP BY 子句配套使用,不能单独出现。
大量微优化使得 CPU 周期整体减少了约 2.3%。
以上是关于SQLite 3.39.0 发布,支持右外连接和全外连接的主要内容,如果未能解决你的问题,请参考以下文章