概念

内连接和外连接是关系型数据库中常用的连接(Join)操作,用于在多个表之间建立关联关系。驱动表(Driving Table)是在连接操作中起到驱动作用的表,用于决定连接结果的基准。

  1. 内连接(Inner Join):内连接是根据两个表之间的匹配条件,返回两个表中满足条件的交集结果。在内连接中,只有在连接条件匹配的情况下,才会返回行。驱动表通常是指在内连接中拥有更小数据集的表,用于驱动连接操作。它确定了连接操作的基准。

  2. 外连接(Outer Join):外连接是根据两个表之间的匹配条件,返回满足条件的交集结果以及未匹配的行。外连接分为左外连接(Left Outer Join)和右外连接(Right Outer Join)。左外连接以驱动表为基准,返回驱动表的所有行以及与之匹配的关联表的行,未匹配的关联表行用空值填充。右外连接则以关联表为基准,返回关联表的所有行以及与之匹配的驱动表的行,未匹配的驱动表行用空值填充。

驱动表在连接操作中起到重要的作用,它决定了连接操作的起点和连接结果的基准。通常,选择驱动表时可以考虑数据量较小或筛选条件较为精确的表作为驱动表,以提高连接操作的效率。

需要注意的是,内连接和外连接可以根据具体的业务需求和数据关系来选择使用。使用内连接可以获取满足连接条件的交集数据,而使用外连接可以获取交集数据以及未匹配的行。正确选择连接类型和驱动表是设计和

举例

实例表

以下是 Customers(客户表)和 Orders(订单表)的创建语句示例,假设它们之间通过共享的列 “CustomerID” 进行关联:

Customers 表创建语句:

CREATE TABLE Customers (ID INT PRIMARY KEY,CustomerName VARCHAR(255),Email VARCHAR(255)
);

Orders 表创建语句:

CREATE TABLE Orders (ID INT PRIMARY KEY,OrderID INT,OrderDate DATE,CustomerID INT,FOREIGN KEY (CustomerID) REFERENCES Customers(ID)
);

在上面的示例中,Customers 表包含了 ID、CustomerName 和 Email 列,其中 ID 列被定义为主键。Orders 表包含了 ID、OrderID、OrderDate 和 CustomerID 列,其中 ID 列被定义为主键,CustomerID 列被定义为外键,引用了 Customers 表的 ID 列。

通过上述创建语句,可以创建 Customers 表和 Orders 表,并建立它们之间的关联关系。请注意,具体的创建语句可能会根据数据库管理系统的不同而有所差异,上述示例仅作为一种通用的创建表的示例。在实际使用时,请根据具体的数据库管理系统和表结构设计进行相应的调整。

创建表只是定义了表的结构,要向表中插入数据,可以使用 INSERT INTO 语句。以下是向 Customers 表和 Orders 表插入示例数据的示例:

向 Customers 表插入数据的示例:

INSERT INTO Customers (ID, CustomerName, Email)
VALUES (1, 'John', 'john@example.com');INSERT INTO Customers (ID, CustomerName, Email)
VALUES (2, 'Mary', 'mary@example.com');INSERT INTO Customers (ID, CustomerName, Email)
VALUES (3, 'David', 'david@example.com');

向 Orders 表插入数据的示例:

INSERT INTO Orders (ID, OrderID, OrderDate, CustomerID)
VALUES (1, 1001, '2023-06-01', 1);INSERT INTO Orders (ID, OrderID, OrderDate, CustomerID)
VALUES (2, 1002, '2023-06-02', 2);INSERT INTO Orders (ID, OrderID, OrderDate, CustomerID)
VALUES (3, 1003, '2023-06-03', 3);

通过执行上述 INSERT INTO 语句,可以将示例数据插入到 Customers 表和 Orders 表中。请根据实际需求和表结构进行适当调整,确保插入的数据符合表定义的约束条件。

注意:在执行插入语句时,要确保数据库连接已经建立,并选择正确的数据库进行操作。具体的插入语句和数据内容也可以根据需要进行修改和扩展。

内连接

内连接(Inner Join)和外连接(Outer Join)是关系型数据库中用于联接两个或多个表的操作。

内连接是基于两个表之间的共享值进行联接,只返回两个表中符合联接条件的行。内连接返回的结果集只包含满足连接条件的行

下面是一个内连接的示例:

假设有两个表:Customers(客户表)和 Orders(订单表),它们之间通过共享的列 “CustomerID” 进行关联。

Customers 表:

+----+----------+
| ID | Customer |
+----+----------+
|  1 | John     |
|  2 | Mary     |
|  3 | David    |
+----+----------+

Orders 表:

+----+---------+------------+
| ID | OrderID | OrderDate  |
+----+---------+------------+
|  1 |  1001   | 2023-06-01 |
|  2 |  1002   | 2023-06-02 |
|  3 |  1003   | 2023-06-03 |
+----+---------+------------+

通过以下 SQL 查询可以实现 Customers 表和 Orders 表的内连接:

SELECT Customers.Customer, Orders.OrderID, Orders.OrderDate
FROM Customers
INNER JOIN Orders
ON Customers.ID = Orders.ID;

结果集将只返回符合连接条件的行,即两个表中 “ID” 列的值相等的行:

+----------+---------+------------+
| Customer | OrderID | OrderDate  |
+----------+---------+------------+
| John     |  1001   | 2023-06-01 |
| Mary     |  1002   | 2023-06-02 |
| David    |  1003   | 2023-06-03 |
+----------+---------+------------+

外连接

外连接用于返回两个表中满足联接条件的所有行,同时还会包含不满足联接条件的行。外连接分为左外连接、右外连接和全外连接,具体选择取决于联接的方向和需求。

以下是一个左外连接的示例:

假设有两个表:Customers(客户表)和 Orders(订单表),它们之间通过共享的列 “CustomerID” 进行关联。

Customers 表:

+----+----------+
| ID | Customer |
+----+----------+
|  1 | John     |
|  2 | Mary     |
|  3 | David    |
+----+----------+

Orders 表:

+----+---------+------------+
| ID | OrderID | OrderDate  |
+----+---------+------------+
|  1 |  1001   | 2023-06-01 |
|  4 |  1004   | 2023-06-04 |
+----+---------+------------+

通过以下 SQL 查询可以实现 Customers 表和 Orders 表的左外连接:

SELECT Customers.Customer, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders
ON Customers.ID = Orders.ID;

结果集将返回符合连接条件的行,以及 Customers 表中不满足连接

右外连接

右外连接(Right Outer Join)是一种外连接类型,它返回右表中满足连接条件的所有行以及左表中符合条件的行(如果有匹配)。右外连接从右表开始,将右表的所有行与左表进行联接。

以下是一个右外连接的示例:

假设有两个表:Customers(客户表)和 Orders(订单表),它们之间通过共享的列 “CustomerID” 进行关联。

Customers 表:

+----+----------+
| ID | Customer |
+----+----------+
|  1 | John     |
|  2 | Mary     |
|  3 | David    |
+----+----------+

Orders 表:

+----+---------+------------+
| ID | OrderID | OrderDate  |
+----+---------+------------+
|  1 |  1001   | 2023-06-01 |
|  4 |  1004   | 2023-06-04 |
+----+---------+------------+

通过以下 SQL 查询可以实现 Customers 表和 Orders 表的右外连接:

SELECT Customers.Customer, Orders.OrderID, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders
ON Customers.ID = Orders.ID;

结果集将返回右表 Orders 中满足连接条件的行,以及左表 Customers 中符合条件的行(如果有匹配):

+----------+---------+------------+
| Customer | OrderID | OrderDate  |
+----------+---------+------------+
| John     |  1001   | 2023-06-01 |
| NULL     |   1004  | 2023-06-04 |
+----------+---------+------------+

在上面的示例中,右外连接返回了右表 Orders 中的所有行,并将符合连接条件的左表 Customers 中的行进行了联接。对于 Orders 表中没有匹配的行,结果集中对应的 Customers 列显示为 NULL。

需要注意的是,右外连接与左外连接是对称的,可以根据具体需求选择使用左外连接还是右外连接。

全外连接

全外连接(Full Outer Join)是一种外连接类型,它返回左表和右表中满足连接条件的所有行,并包括左表和右表中不满足连接条件的行。

以下是一个全外连接的示例:

假设有两个表:Customers(客户表)和 Orders(订单表),它们之间通过共享的列 “CustomerID” 进行关联。

Customers 表:

+----+----------+
| ID | Customer |
+----+----------+
|  1 | John     |
|  2 | Mary     |
|  3 | David    |
+----+----------+

Orders 表:

+----+---------+------------+
| ID | OrderID | OrderDate  |
+----+---------+------------+
|  1 |  1001   | 2023-06-01 |
|  4 |  1004   | 2023-06-04 |
+----+---------+------------+

通过以下 SQL 查询可以实现 Customers 表和 Orders 表的全外连接:

SELECT Customers.Customer, Orders.OrderID, Orders.OrderDate
FROM Customers
FULL OUTER JOIN Orders
ON Customers.ID = Orders.ID;

结果集将返回左表 Customers 和右表 Orders 中满足连接条件的行,以及左表和右表中不满足连接条件的行:

+----------+---------+------------+
| Customer | OrderID | OrderDate  |
+----------+---------+------------+
| John     |  1001   | 2023-06-01 |
| Mary     |  NULL   | NULL       |
| David    |  NULL   | NULL       |
| NULL     |  1004   | 2023-06-04 |
+----------+---------+------------+

在上面的示例中,全外连接返回了左表 Customers 和右表 Orders 中的所有行,以及左表和右表中不满足连接条件的行。如果某个表中没有与另一个表匹配的行,则对应的列显示为 NULL。

需要注意的是,全外连接的支持在不同的数据库管理系统中可能会有所差异。在某些数据库管理系统中,可能需要使用其他方式来实现全外连接,如使用 UNION 操作符来组合左外连接和右外连接的结果。请根据具体的数据库管理系统和语法规则进行相应的调整。

内连接和外连接 驱动表相关推荐

  1. Mysql表连接:内连接、外连接、交叉连接、自然连接真的都不一样吗

    文章目录 前言 测试环境 创建测试数据 对比测试 内连接 交叉连接 外连接 左外连接 右外连接 自然连接 一般自然连接 自然左外连接 自然右外连接 STRAIGHT_JOIN 逗号分隔连接表 各种连接 ...

  2. mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接

    一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...

  3. MySQL 内连接、左连接、右连接、外连接、多表查询

    MySQL 内连接.左连接.右连接.外连接.多表查询 构建环境: create table t_emp(id int primary key, name varchar(20),deptId int ...

  4. 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  5. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  6. Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...

  7. mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  8. Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

    Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...

  9. MySQL基础~多表查询分类与SQL92和99语法如何实现内连接和外连接

    文章目录 多表查询的分类 等值连接 vs 非等值连接 自连接 vs 非自连接 内连接 vs 外连接 SQL92和SQL99语法如何实现内外连接 多表查询的分类 这个分类是根据多表查询时的连接条件而划分 ...

最新文章

  1. 磁盘上没有足够的空间完成此操作_三年多啦,那么多IT人还没有搞定这个问题...
  2. ECCV2020 oral | 基于语义流的快速而准确的场景解析
  3. Android.mk 变量解释
  4. python(matplotlib5)——Contours 等高线图
  5. CefSharp试用
  6. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver
  7. js 多个定时器_JS中的同步/异步编程
  8. Mysql中几种插入效率的实例对比
  9. 特征工程系列之自动化特征提取器
  10. 2021-06-27 方法的调用
  11. 2021华为软挑赛题_思路分析——实时更新,做多少更多少(四)
  12. NCBI基本引物设计、(初学者)
  13. 测试用例的几种常见设计方法
  14. lineout是什么接口
  15. combobox实现模糊搜索匹配
  16. 神奇的e——Python编程算e
  17. cs1.6服务器修改游戏类型,如何自己架设CS1.6服务器?
  18. 测试架构师需要具备哪些能力?
  19. java 电脑模拟器_电脑java模拟器
  20. OSI七层网络参考模型详解

热门文章

  1. 《口吃者的自我治疗》(4. 影响治疗的因素)
  2. JQuery--事件总结
  3. Android Studio 安卓创建数据库
  4. .NET Framework 入门
  5. 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?
  6. Excel添加单引号
  7. 一键搜索多个搜索引擎
  8. 自媒体内容发布要求有哪些?
  9. 湖南大学python头歌实训-matplotlib
  10. 光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)