Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Inner Join子句
SQL Inner Join子句
作者:--    发布时间:2019-11-20

在本教程中,我们将演示如何使用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的交集。

如下图所示 -

对于表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表之间的关系是一对多的。

以下数据库图说明了employees, departmentsjobs 表之间的关系:

以下查询使用内部联接子句连接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子句如何工作,并知道如何应用它来查询来自多个表的数据。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册