SQLINNERJOIN查询来⾃两个或多个表的数据
在本教程中,我们将演⽰如何使⽤SQL INNER JOIN⼦句来查询来⾃两个或多个表的数据。
1. SQL INNER JOIN⼦句简介
到⽬前为⽌,您已经学习了如何使⽤从单个表中查询数据。但是,SELECT语句不限于从单个表中查询数据。SELECT语句可以将多个表链接在⼀起。
连接表的过程称为Join。 SQL提供了多种连接,如内连接,,右连接,全外连接等。本教程重点介绍内连接。
内部连接⼦句通过两列之间的关系链接两个(或更多)表。⽆论何时使⽤内连接⼦句,通常都要考虑交集。
通过⼀个简单的例⼦来理解内连接概念要容易得多。
假设有两个表:A和B。
sql语句怎么查询两张表的数据表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个表:A,B和C:
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个表的⽰例
我们将使⽤employees和departments表来演⽰INNER JOIN⼦句的⼯作原理。这两个表的结构和关系如下所⽰:
每个员⼯都属于⼀个且只有⼀个部门,⽽每个部门可以拥有多个员⼯。员⼯和部门表之间的关系是⼀对多的。
employees表中的department_id列是将员⼯链接到departments表的外键列。
要获取部门ID为:1,2和3的信息,请使⽤以下语句。
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
请注意,在中使⽤来获取department_id为1,2和3的⾏。
要获取在部门ID为:1,2和3中⼯作的员⼯的信息,请使⽤以下查询:
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,则employees和departments表中⾏的数据的组合⾏将包含在结果集中。
请注意,employees和departments表都具有相同的列名department_id,因此我们必须使⽤语法lumn_name限定department_id列。
SQL INNER JOIN 3个表的⽰例
每个员⼯都有⼀个⼯作岗位,⽽⼀个⼯作岗位可能会有多个员⼯。jobs表和employees表之间的关系是⼀对多的。
以下数据库图说明了employees, departments和jobs表之间的关系:
以下查询使⽤内部联接⼦句连接3个表:员⼯,部门和⼯作岗位,以获取在部门ID为:1,2和3中⼯作的员⼯的名字,姓⽒,职位和部门名称。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⼦句如何⼯作,并知道如何应⽤它来查询来⾃多个表的数据。