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

首先明确一下定义:

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

一个不太准确但易懂的例子:比如有两个表,表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)

大家都在看

  • Ubuntu 服务器安装 MySQL 远程数据库

    在 Web 项目中,我们需要使用到远程数据库,开发阶段也需要连接并查看数据库的状况。腾讯云、阿里云等云平台提供了远程数据库,可直接使用;当然也可以自己在部署 Web 的服务器上安装…

    数据库 2023年6月14日
    076
  • Nginx 配置参数优化

    nginx 配置参数优化 nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求。以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业…

    数据库 2023年6月6日
    081
  • 一、SQL高级语句

    摘抄别的博主的博客主要总去CSDN看不太方便自己整理一下加深记忆! 导入文件至数据库 #将脚本导入 source 加文件路径 mysql> source /backup/te…

    数据库 2023年5月24日
    096
  • 使用归并排序思想解决逆序对数量问题

    概述 归并排序算法,想必诸位都十分熟悉。其基本思想也就是 分治。整个排序过程分成两部分–分治法将问题 分(divide)成一些小的问题然后递归求解,而 治(conque…

    数据库 2023年6月11日
    077
  • JVM

    JVM 一、什么是JVM 定义 Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收…

    数据库 2023年6月16日
    050
  • JavaEE知识点思维导图

    posted @2020-12-08 08:39 一方玩 阅读(122 ) 评论() 编辑 Original: https://www.cnblogs.com/tianyuwohu…

    数据库 2023年6月6日
    0111
  • jQuery基础

    作者导言: 引用偶像刘德华的一句话 “学到的就要教人,赚到的就要给人”! 以下是关联的web前端基础知识文章,通过这些文章,您既可以系统地学习和了解这些知识…

    数据库 2023年6月14日
    087
  • entitybuilder–一个简单的业务通用框架

    关于业务通用框架的思考 业务系统是千差万别的,例如,保存、更新和删除订单,或者保存订单和保存客户,走的根本不是一个流程。但是,它们还是有共同点,它们的流程大致可以分成下面的几个部分…

    数据库 2023年6月6日
    082
  • Nginx实现服务器端集群搭建

    Nginx实现服务器端集群搭建 Nginx与Tomcat部署 前面课程已经将Nginx的大部分内容进行了讲解,我们都知道了Nginx在高并发场景和处理静态资源是非常高性能的,但是在…

    数据库 2023年6月6日
    066
  • mysql解压版简洁式本地配置方式

    1. 设置全局变量 解压mysql压缩包到指定位置, 然后配置全局变量, 在 path 中添加全局变量, 值为 mysql 根目录下 bin 目录路径, 比如: D:\code_s…

    数据库 2023年5月24日
    0119
  • 翻译|是否应该在 Kubernetes 上运行数据库?

    数据库如何在 Kubernetes 上运行?如果可以,哪些类型的数据库和数据最适合使用 K8s?让我们一起来看看。 Kubernetes 是用于自动部署、扩展和管理容器化应用程序的…

    数据库 2023年5月24日
    080
  • MySQL锁:02.InnoDB锁

    传送门:MySQL锁:01.总览传送门:MySQL锁:02.InnoDB锁传送门:MySQL锁:03.InnoDB行锁 InnoDB锁 InnoDB行锁实现机制 InnoDB隐式、…

    数据库 2023年6月16日
    075
  • Typora加七牛云实现实时图片自动上传

    Typora加七牛云实现实时图片自动上传 前言: ​ Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.重点是免…

    数据库 2023年6月9日
    0184
  • Java基础一—面向对象三大特性

    写在最前 本系列为个人对BAT大厂面试题与全栈知识体系结合的简化梳理及本人在日常学习中一些知识的整理(包括但不限于书本、他人博客、微信公众号等渠道),仅为个人总结学习与整理知识框架…

    数据库 2023年6月6日
    069
  • 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵

    💡 作者:韩信子@ShowMeAI📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40📘 机器学习实战系列:https://www.s…

    数据库 2023年6月14日
    074
  • 配置nginx只打印延迟超过0.1s和非2XX的accesslog

    背景 当业务accesslog全开时,写入es的qps达到了10W,评估后觉得不太值得,所以考虑抽样打印。查看相关文档后发现目前我们使用的nginx版本不支持抽样打印,所以考虑其他…

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