• SQL INNER JOIN查询来自两个或多个表的数据


    在本教程中,我们将演示如何使用SQL INNER JOIN子句来查询来自两个或多个表的数据。

    1. SQL INNER JOIN子句简介

    到目前为止,您已经学习了如何使用SELECT语句从单个表中查询数据。 但是,SELECT语句不限于从单个表中查询数据。 SELECT语句可以将多个表链接在一起。

    连接表的过程称为Join。 SQL提供了多种连接,如内连接,左连接,右连接,全外连接等。本教程重点介绍内连接。

    内部连接子句通过两列之间的关系链接两个(或更多)表。 无论何时使用内连接子句,通常都要考虑交集。

    通过一个简单的例子来理解内连接概念要容易得多。

    假设有两个表:AB

    A有四行:(1,2,3,4),表B有四行:(3,4,5,6)

    当表A使用内部联接与表B连接时,我们得到结果集(3,4),它是表A和表B的交集。

    更多教程请访问http://www.manongzj.com

    对于表A中的每一行,内部连接子句查找表B中的匹配行。如果匹配行,则它将包含在最终结果集中。

    假设A&B表的列名是n,以下语句说明了内连接子句:

    SELECT
      A.n
    FROM A
    INNER JOIN B ON B.n = A.n;
    

    INNER JOIN子句出现在FROM子句之后。 在ON关键字之后指定表A和表B之间匹配的条件。这种情况称为连接条件,即B.n = A.n

    INNER JOIN子句可以连接三个或更多表,只要它们具有关系,通常是外键关系。

    例如,以下语句说明了如何连接3个表:ABC

    SELECT
      A.n
    FROM A
    INNER JOIN B ON B.n = A.n
    INNER JOIN C ON C.n = A.n;
    

    2. SQL INNER JOIN示例

    SQL INNER JOIN 2个表的示例

    我们将使用employeesdepartments表来演示INNER JOIN子句的工作原理。这两个表的结构和关系如下所示:

    每个员工都属于一个且只有一个部门,而每个部门可以拥有多个员工。 员工和部门表之间的关系是一对多的。

    employees表中的department_id列是将员工链接到departments表的外键列。

    要获取部门ID为:1,23的信息,请使用以下语句。

    SELECT
        department_id,
        department_name
    FROM
        departments
    WHERE
        department_id IN (1, 2, 3);
    

    执行上面查询语句,得到以下结果 -

    +---------------+-----------------+
    | department_id | department_name |
    +---------------+-----------------+
    |             1 | 管理            |
    |             2 | 市场营销        |
    |             3 | 采购            |
    +---------------+-----------------+
    3 rows in set
    

    请注意,在WHERE子句中使用IN运算符来获取department_id1,23的行。

    要获取在部门ID为:1,23中工作的员工的信息,请使用以下查询:

    SELECT
        first_name,
        last_name,
        department_id
    FROM
        employees
    WHERE
        department_id IN (1, 2, 3)
    ORDER BY
        department_id;
    

    执行上面查询语句,得到以下结果 -

    要组合这两个表中的数据,请使用内部连接子句,组成成以下查询:

    SELECT 
        first_name,
        last_name,
        employees.department_id,
        departments.department_id,
        department_name
    FROM
        employees
            INNER JOIN
        departments ON departments.department_id = employees.department_id
    WHERE
        employees.department_id IN (1 , 2, 3);
    

    执行上面查询语句,得到以下结果 -

    对于employees表中的每一行,该语句检查department_id列的值是否等于departments表中department_id列的值。

    如果满足条件employees.department_id = departments.department_id,则employeesdepartments表中行的数据的组合行将包含在结果集中。

    请注意,employeesdepartments表都具有相同的列名department_id,因此我们必须使用语法table_name.column_name限定department_id列。

    SQL INNER JOIN 3个表的示例

    每个员工都有一个工作岗位,而一个工作岗位可能会有多个员工。 jobs表和employees表之间的关系是一对多的。

    以下数据库图说明了employeesdepartments 和 jobs 表之间的关系:

    以下查询使用内部联接子句连接3个表:员工,部门和工作岗位,以获取在部门ID为:1,23中工作的员工的名字,姓氏,职位和部门名称。

    SELECT
        first_name, last_name, job_title, department_name
    FROM
        employees e
    INNER JOIN departments d ON d.department_id = e.department_id
    INNER JOIN jobs j ON j.job_id = e.job_id
    WHERE
        e.department_id IN (1, 2, 3);
    

    执行上面查询语句,得到以下结果 -

    通过上面的学习,现在您应该了解SQL INNER JOIN子句如何工作,并知道如何应用它来查询来自多个表的数据。

  • 相关阅读:
    C#系列之聊聊.Net Core的InMemoryCache
    函数式编程之-重新认识泛型(2)
    函数式编程之-重新认识泛型(1)
    ThreadLocal源码深度剖析
    使用ThreadLocal
    详解Redis中两种持久化机制RDB和AOF(面试常问,工作常用)
    Cassandra
    一致性HASH算法在分布式应用场景使用
    柔性分布式事务关于异步解决方案MQ版
    AtomicReference
  • 原文地址:https://www.cnblogs.com/myhomepages/p/15827254.html
Copyright © 2020-2023  润新知