数据库_多表查询_内连接&外连接

首先明确一下定义:

内连接:在多表查询的时候,只检索出表之间相互匹配的行(满足匹配条件的行),结果中不包括两个表之间不匹配的行。

一个不太准确但易懂的例子:比如有两个表,表1存储了 (1,2,3,4,5 )这五个数字。表2存储了(3,4,5,6,7,8)这6个数字。多表查询时两个表的关联条件是 “表1 = 表2”.

则检索的输出是两个表的交集。也就是说,3,4,4,5。

[En]

Then the output of the retrieval is the intersection of the two tables. That is, 3, 4, 4, 5.

数据库_多表查询_内连接&外连接

外连接:在多表查询的时候,处理检索出内连接的数据外,还返回左表(或者右表)中不满足匹配条件的行。这种连接称为左(或者右)外连接。

也是上面的小例子:左侧外部链接的返回结果为(1),右侧外部链接的返回结果为(3),右侧外部连接的返回结果为(3)。

[En]

It is also the small example above: the return result of the left outer link is (1), the return result of the right outer link is (3), and the return result of the right outer connection is (3).

如果是 左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。如下简图:

数据库_多表查询_内连接&外连接

如果是 右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表

数据库_多表查询_内连接&外连接

代码实现:

以下是代码示例中使用的三个表

[En]

Here are three tables to be used in the code example

employees表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id    | int         | NO   | PRI | 0       |       |
| first_name     | varchar(20) | YES  |     | NULL    |       |
| last_name      | varchar(25) | NO   |     | NULL    |       |
| email          | varchar(25) | NO   | UNI | NULL    |       |
| phone_number   | varchar(20) | YES  |     | NULL    |       |
| hire_date      | date        | NO   |     | NULL    |       |
| job_id         | varchar(10) | NO   | MUL | NULL    |       |
| salary         | double(8,2) | YES  |     | NULL    |       |
| commission_pct | double(2,2) | YES  |     | NULL    |       |
| manager_id     | int         | YES  | MUL | NULL    |       |
| department_id  | int         | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

departments表:

+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id   | int         | NO   | PRI | 0       |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
| manager_id      | int         | YES  | MUL | NULL    |       |
| location_id     | int         | YES  | MUL | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+

locations表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| location_id    | int         | NO   | PRI | 0       |       |
| street_address | varchar(40) | YES  |     | NULL    |       |
| postal_code    | varchar(12) | YES  |     | NULL    |       |
| city           | varchar(30) | NO   |     | NULL    |       |
| state_province | varchar(25) | YES  |     | NULL    |       |
| country_id     | char(2)     | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

注:以下所用语法:JOIN…ON 为 SQL99 中的多表查询实现语法。

内连接:检索返回员工姓名,部门名组成的表(需要用到employees表及departments表)

mysql> SELECT last_name,department_name
    -> FROM employees e  # 表1 JOIN 表2 ON 匹配条件;
    -> JOIN departments d
    -> ON e.department_id = d.department_id;   # 关联条件

检索一个返回员工姓名、部门名称和部门所在城市的表。

[En]

Retrieve a table that returns the name of the employee, the name of the department, and the city where the department is located.

mysql> SELECT last_name,department_name,city
    -> FROM employees e
    -> JOIN departments d
    -> ON e.department_id = d.department_id
    -> JOIN locations l
    -> ON d.location_id = l.location_id;
    /*
    表1
    JOIN 表2
    ON 表1和表2的匹配条件
    JOIN 表3
    ON 表2和表3的匹配条件;
    */

外连接:从两个表中,检索返回所有员工的姓名、部门名组成的表。

mysql> SELECT employee_id,department_name
    -> FROM employees e   # employees表为主表,departments表为从表。主表 LEFT OUTER JOIN 从表 ON 匹配条件;
    -> LEFT OUTER JOIN departments d   # 左外连接
    -> ON e.department_id = d.department_id;

Original: https://www.cnblogs.com/iot502/p/16503600.html
Author: 康康在路上
Title: 数据库_多表查询_内连接&外连接

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505180/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux 目录

    以下是对这些目录的解释: /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动 Linux 时使用的…

    数据库 2023年6月6日
    086
  • MariaDB主从备份

    MariaDB主从备份 修改my.ini的参数 注释第30行左右的bind-address bind-address=127.0.0.1 注释61行左右的log-bin=mysql…

    数据库 2023年6月9日
    056
  • Javaweb09-请求跳转项目 分页条件查询 + 增删改 + 邮件登录

    1、Jar 包 UTF-8 1.7 1.7 1.18.12 4.11 5.1.47 1.2.62 javax.servlet javax.servlet-api 3.1.0 pro…

    数据库 2023年6月16日
    077
  • 内部类

    🐓内部类 可以将一个类定义在另一个类或方法中,这样的类称为内部类 将类定义在另一个类中成员的位置 public class Inner { // 定义在类内部 class Demo…

    数据库 2023年6月14日
    062
  • vue进阶(一)

    vue.js 数据绑定 定义:将数据和视图相关联,当数据发生变化时,可以自动更新视图。 语法 1) 插值 使用双大括号{{}},双大括号会将里面的值当做字符串进行处理;而如果值是H…

    数据库 2023年6月6日
    094
  • Vim配置文件-详解(.vimrc)

    Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim 所有系统用户在启动Vim时,都会加载这个配置文件。…

    数据库 2023年6月14日
    067
  • NO.1 通讯录管理系统+源代码(C++)

    功能描述:显示简单的菜单,供用户选择操作 实现步骤:直接cout输出 功能描述:根据用户不同的操作代码选择,进入不同的功能,我们使用switch分支结构进行搭建 实现步骤:用whi…

    数据库 2023年6月14日
    061
  • CSS速学!!

    padding:内边距 缩写:缩写: padding:值; 上下左右的内边距一样 padding:值1 值2; 值1代表上下内边距,值2代表左右内边距 padding:值1 值2 …

    数据库 2023年6月16日
    070
  • FTP文件上传

    一、配置FTP文件服务器 以Ubuntu为例 FTP两种模式简介 PORT(主动模式)第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务…

    数据库 2023年6月6日
    083
  • 设计模式之简单工厂

    一、简单工厂:为了客户类和服务类之间的解耦,把对象的创建任务交给第三方类,这个第三方类就充当工厂的作用,严格来说简单工厂不属于23种设计模式之一。 二、实现思路 :创建一个简单工厂…

    数据库 2023年6月14日
    074
  • jieba分词java版本自定义stop_words

    背景 项目使用到jieba分词,分词部分结果产品不满意,想过滤一些不重要的高频词汇;我们是使用的结巴分词java版。maven引入如下: com.huaban jieba-anal…

    数据库 2023年6月11日
    081
  • 2022-8-9 第六组 输入输出流

    IO流 Java中输入/输出流常用的流: 字节输入流 &#x5…

    数据库 2023年6月14日
    071
  • 8、IDEA提交代码出现: Fetch failed fatal: Could not read from remote repository

    转载自 第一步、确认Git公钥/密钥是否生成: 1、 首先查看本地是否生成git密钥,一般在C盘home目录下:【C:你自己的home目录.ssh】 第二步:添加Git密钥: 右键…

    数据库 2023年6月6日
    075
  • 使用REST风格完成MVC前后端分离

    一个具有REST风格项目的基本特征: 使用REST框架实现前后端分离架构,我们需要首先确定返回的JSON响应结构是统一的,也就是说,每个REST请求将返回相同结构的JSON响应结构…

    数据库 2023年6月11日
    0100
  • ImageIo.read 返回null

    一、问题描述 今天收到一个bug就是imageio读取图片会返回null,具体如下 但是其他的图片就没有问题 二、问题分析 结合百度发现这张图片原本的后缀并非是jpg,使用notp…

    数据库 2023年6月6日
    082
  • ReentrantLock可重入、可打断、Condition原理剖析

    本文紧接上文的AQS源码,如果对于ReentrantLock没有基础可以先阅读我的上一篇文章学习ReentrantLock的源码 重入加锁其实就是将AQS的state进行加一操作 …

    数据库 2023年6月11日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球