SQLite - 连接

来源:这里教程网 时间:2026-03-25 11:51:27 作者:

简述

SQLite Joins子句用于组合来自数据库中两个或多个表的记录。JOIN 是一种通过使用每个表的公共值来组合来自两个表的字段的方法。 SQL 定义了三种主要类型的连接 - 交叉连接 内连接 外连接 在我们继续之前,让我们考虑两个表 COMPANY 和 DEPARTMENT。我们已经看到 INSERT 语句填充 COMPANY 表。因此,让我们假设 COMPANY 表中可用的记录列表 -

ID NAME AGE ADDRESS SALARY---------- ---------- ---------- ---------- ----------1 Paul 32 California 20000.02 Allen 25 Texas 15000.03 Teddy 23 Norway 20000.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 James 24 Houston 10000.0 另一个表是具有以下定义的部门 -

CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL); 这是填充 DEPARTMENT 表的 INSERT 语句列表 -

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)VALUES (1, 'IT Billing', 1 );INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)VALUES (2, 'Engineering', 2 );INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)VALUES (3, 'Finance', 7 ); 最后,我们在 DEPARTMENT 表中有以下可用记录列表 -

ID DEPT EMP_ID---------- ---------- ----------1 IT Billing 12 Engineering 23 Finance 7

交叉连接

CROSS JOIN 将第一个表的每一行与第二个表的每一行进行匹配。如果输入表分别有 x 和 y 行,则结果表将有 x*y 行。因为 CROSS JOIN 有可能生成非常大的表,所以必须注意只在适当的时候使用它们。 以下是 CROSS JOIN 的语法 -

SELECT ... FROM table1 CROSS JOIN table2 ... 根据上表,您可以编写一个 CROSS JOIN 如下 -

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT; 上述查询将产生以下结果 -

EMP_ID NAME DEPT---------- ---------- ----------1 Paul IT Billing2 Paul Engineering7 Paul Finance1 Allen IT Billing2 Allen Engineering7 Allen Finance1 Teddy IT Billing2 Teddy Engineering7 Teddy Finance1 Mark IT Billing2 Mark Engineering7 Mark Finance1 David IT Billing2 David Engineering7 David Finance1 Kim IT Billing2 Kim Engineering7 Kim Finance1 James IT Billing2 James Engineering7 James Finance

内连接

INNER JOIN 通过基于连接谓词组合两个表(table1 和 table2)的列值来创建一个新的结果表。该查询将 table1 的每一行与 table2 的每一行进行比较,以找到满足连接谓词的所有行对。当满足连接谓词时,A 和 B 的每一对匹配的行的列值组合成一个结果行。 INNER JOIN 是最常见和默认的连接类型。您可以选择使用 INNER 关键字。 以下是 INNER JOIN 的语法 -

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ... 为了避免冗余并保持措辞更短,INNER JOIN 条件可以声明为 USING表达。此表达式指定一列或多列的列表。

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ... 自然连接类似于 JOIN...USING,只有它会自动测试两个表中存在的每一列的值之间的相等性 -

SELECT ... FROM table1 NATURAL JOIN table2... 根据上表,您可以编写一个 INNER JOIN 如下 -

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID; 上述查询将产生以下结果 -

EMP_ID NAME DEPT---------- ---------- ----------1 Paul IT Billing2 Allen Engineering7 James Finance

外连接

OUTER JOIN 是 INNER JOIN 的扩展。尽管 SQL 标准定义了三种类型的 OUTER JOIN:LEFT、RIGHT 和 FULL,但 SQLite 仅支持LEFT OUTER JOIN. OUTER JOIN 具有与 INNER JOIN 相同的条件,使用 ON、USING 或 NATURAL 关键字表示。初始结果表的计算方法相同。一旦计算出主 JOIN,OUTER JOIN 将从一个或两个表中获取任何未连接的行,用 NULL 填充它们,并将它们附加到结果表中。 以下是 LEFT OUTER JOIN 的语法 -

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ... 为了避免冗余并保持措辞更短,可以使用 USING 表达式声明 OUTER JOIN 条件。此表达式指定一列或多列的列表。

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ... 根据上表,您可以按如下方式编写外连接 -

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID; 上述查询将产生以下结果 -

EMP_ID NAME DEPT---------- ---------- ----------1 Paul IT Billing2 Allen Engineering Teddy Mark David Kim7 James Finance

相关推荐

热文推荐