内连接和外连接 驱动表
概念
内连接和外连接是关系型数据库中常用的连接(Join)操作,用于在多个表之间建立关联关系。驱动表(Driving Table)是在连接操作中起到驱动作用的表,用于决定连接结果的基准。
内连接(Inner Join):内连接是根据两个表之间的匹配条件,返回两个表中满足条件的交集结果。在内连接中,只有在连接条件匹配的情况下,才会返回行。驱动表通常是指在内连接中拥有更小数据集的表,用于驱动连接操作。它确定了连接操作的基准。
外连接(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 操作符来组合左外连接和右外连接的结果。请根据具体的数据库管理系统和语法规则进行相应的调整。
内连接和外连接 驱动表相关推荐
- Mysql表连接:内连接、外连接、交叉连接、自然连接真的都不一样吗
文章目录 前言 测试环境 创建测试数据 对比测试 内连接 交叉连接 外连接 左外连接 右外连接 自然连接 一般自然连接 自然左外连接 自然右外连接 STRAIGHT_JOIN 逗号分隔连接表 各种连接 ...
- mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接
一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...
- MySQL 内连接、左连接、右连接、外连接、多表查询
MySQL 内连接.左连接.右连接.外连接.多表查询 构建环境: create table t_emp(id int primary key, name varchar(20),deptId int ...
- 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)
mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...
- 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)
MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...
- Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...
- mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...
mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...
- MySQL基础~多表查询分类与SQL92和99语法如何实现内连接和外连接
文章目录 多表查询的分类 等值连接 vs 非等值连接 自连接 vs 非自连接 内连接 vs 外连接 SQL92和SQL99语法如何实现内外连接 多表查询的分类 这个分类是根据多表查询时的连接条件而划分 ...
最新文章
- Hibernate 异常org.hibernate.LazyInitializationException: could not initialize prox
- window COM调试2[转]
- 怎样在计算机上插入机构图,Win7系统如何在excel中添加word文档结构图?
- 更改idea控制台输出字体
- android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...
- MINST数据集下载失败
- python 用pip安装python库下载超时的解决办法
- htnl 点击系统记录显示在右侧_软网推荐:时间管理者 记录工时与薪酬
- Kaldi AMI数据集脚本学习1----cmd.sh和path.sh
- google erath api v3 与v2版本在定位方面的区别
- 丹佛机场行李处理系统分析
- android健身app毕设,几款健身类App的分析报告
- 从零开始学python第八篇
- 火影忍者ol手游服务器注册上限怎么办,火影忍者ol手游进不去是怎么办 火影忍者ol手游上不去原因详解...
- html制作跳动的心注释比较全
- Elo Rating System 简介及其在游戏中的运用
- 销售经理应具备哪些技能
- 在互联网寒潮来临之际,怎么样才能站稳脚跟!
- iOS 利用摄像头闪光灯测心率绘画心率图
- 电脑win10计算机图标,win10系统桌面的计算机图标没了的详细技巧
热门文章
- 函数对象的方法、argument、Date对象、Math、包装类、正则表达式
- 什么是文件共享软件?文件传输软件如何共享?
- 真人拳皇项目第三次Scrum总结——史经浩
- revit模型怎么在手机上看_BIM查看软件是什么?BIM模型手机查看软件有哪些?
- Ibatis 大于小于符号
- 影育科技在上海市卢湾高级中学开展常规性元宇宙系列课程教学,上海市教委相关领导莅临现场观摩指导
- linux命令 mv -v,linux中的mv命令
- 【网络编程】大端模式和小端模式(大头序和小头序)
- GeoPandas入门 | 02-坐标参考系统
- java面向对象解决兔子问题_用面向对象的想法解决费波那奇数列的兔子问题