当前位置:首页>python>Python开发从零开始-49.13-数据库操作

Python开发从零开始-49.13-数据库操作

  • 2026-09-03 00:17:29
Python开发从零开始-49.13-数据库操作

接上文Python开发从零开始-49.12-数据库操作,本文小编与大家分享 Python 数据库操作的相关知识。

(24)多表查询概述

多表查询是指‌在一条 SQL 语句中同时从两张及以上关联表中提取数据‌的操作。‌‌SQLite 的多表查询主要包括:

  • ‌连接查询(JOIN)‌:用于结合两个或多个数据库中表的记录;

  • ‌联合查询(UNION)‌:合并两个或多个 SELECT 语句的结果,不返回任何重复的行;

  • ‌子查询‌(SUBQUERY):是指在一个 SQL 查询语句中嵌套的另一个查询。子查询通常用于从数据集中选择数据,然后将这些数据用作外部查询的条件、表达式或结果。

为方便多表查询示例,除使用前文中的 COMPANY 表外,另外新建 DEPARTMENT 表,该表定义如下:

CREATE TABLE DEPARTMENT(    DEP_ID INT       PRIMARY KEY,    DEPT   CHAR (50) NOT NULL,    EMP_ID INT       NOT NULL);

插入 3 条数据如下:

INSERT INTO DEPARTMENT (DEP_ID, DEPT, EMP_ID)VALUES (1, 'IT Billing', 1 );INSERT INTO DEPARTMENT (DEP_ID, DEPT, EMP_ID)VALUES (2, 'Engineering', 2 );INSERT INTO DEPARTMENT (DEP_ID, DEPT, EMP_ID)VALUES (3, 'Finance', 7 );

DEPARTMENT 表查询结果为:

(25)多表查询-JOIN 查询

JOIN 子句用于结合两个或多个数据库中表的记录。JOIN 是一种通过共同值来结合两个表中字段的手段。

SQL 定义了三种主要类型的连接:

1)交叉连接(CROSS JOIN)

把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,m 列和 n 列,则结果表有 x * y 行,m + n 列。交叉连接返回被连接的两个表所有数据行的笛卡尔积,可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。

【小编提示】

笛卡尔积是数学中两个集合所有可能有序对组成的集合,数据库中指多表无条件连接‌。‌‌

  • 数学定义‌:集合 A 与 B 的笛卡尔积记作 A×B,由所有第一元素来自 A、第二元素来自 B 的有序对构成,元素总数为两集合元素数之积 。

  • ‌数据库应用‌:在 SQL 查询中,若多表连接未指定条件(如 CROSS JOIN),会生成笛卡尔积,结果行数等于各表行数乘积。

交叉查询的基本语法如下:

SELECT column_list FROM table1 CROSS JOIN table2;
  • table1,table2:表1,表2;

  • column_list:查询字段列表。如果使用 * 号,则显示 table1表的所有列与 table2 表的所有列之和。

使用 COMPANY 表和 DEPARTMENT 表进行交叉连接查询示例如下:

① 查询语句

SELECT * FROM COMPANY CROSS JOIN DEPARTMENT;

② 查询结果

2)内连接(INNER JOIN)

内连接用于返回两表中‌连接条件匹配‌的行,不匹配者被排除。内连接是最常见的连接类型,是默认的连接类型。INNER 关键字是可选的。

内连接的基本语法如下:

SELECT column_list FROM table1 

[INNER] JOIN table2 

ON conditional_expression;

语法解释:

  • table1,table2:表1,表2;

  • column_list:查询字段列表;

  • conditional_expression:条件表达式。通常为 table1.column = table2.column。

使用 COMPANY 表和 DEPARTMENT 表进行内连接查询示例如下:

① 查询语句

SELECT EMP_ID, NAME, DEPTFROM COMPANYJOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;

② 查询结果

当两表的连接字段名完全相同‌时,为了避免冗余,可以使用 USING 表达式声明内连接条件,这个表达式指定一个或多个列的列表。相关语法如下:

SELECT column_list FROM table1 

JOIN table2

USING(column1, column2,,,) 

注意:column1, column2,,, 等字段名在 table1 和 table2 中应完全相同。

内连接有一种自连接(SELF JOIN)的特殊方式,它是同一张表别名化后相互连接,常用于层级数据(如员工所属领导编号 = 领导的员工编号)。其基本语法为:

SELECT column_list FROM table1 AS a

JOIN table1 AS b

ON a.column = b.column;

SQLite 中还有一种自然连接(NATURAL JOIN)语法,它可以自动查找两个表中同名且同类型的字段做等值匹配,并在结果里去重。但是,自然连接在实际项目中基本不会使用,因为它依赖表结构自动匹配,如果字段增删容易导致静默错连或丢数据,且缺乏显式契约和跨库一致性。所以,小编不做介绍。

受文章篇幅所限,下文将继续介绍 Python 数据库操作的相关知识。

最新文章

随机文章