sqlite中FROM和CROSS JOIN有什么区别?

问题描述 投票:0回答:1

我有3张桌子:

CREATE TABLE test1 (
    id INTEGER
);

CREATE TABLE test2 (
    id INTEGER
);

CREATE TABLE test3 (
    id INTEGER
);

我将 10 插入

test1
,将 10 和 20 插入
test2
,将 10、20 和 30 插入
test3
,方法如下:

INSERT INTO test1 (id)
VALUES (10);

然后我尝试通过以下两种方式检索数据:

第一种方式:

SELECT *
FROM test1, test2, test3;

第二种方式:

SELECT *
FROM test1
CROSS JOIN test2, test3;

两种方式我都得到相同的结果:

"10"    "10"    "10"
"10"    "10"    "20"
"10"    "10"    "30"
"10"    "20"    "10"
"10"    "20"    "20"
"10"    "20"    "30"

正如我所见,没有区别,那有什么用呢

CROSS JOIN

sqlite
1个回答
0
投票

就它们返回的结果而言,没有有什么区别。 来自 SQLite 文档:

“INNER JOIN”、“JOIN”和“,”连接运算符之间没有区别。它们在 SQLite 中是完全可以互换的。 “CROSS JOIN”连接运算符产生与“INNER JOIN”、“JOIN”和“,”运算符相同的结果,但查询优化器的处理方式不同,因为它会阻止查询优化器对连接中的表重新排序。

无论哪种方式,您都会获得指定表中行的笛卡尔积。

但从风格上来说,显式使用

JOIN
关键字使得查询的意图比旧的逗号连接语法更清晰。

© www.soinside.com 2019 - 2024. All rights reserved.