阅读 192

SQL INNER JOIN 语句

在本教程中,您将学习如何使用SQL内部联接从两个表中获取数据。

使用内部联接

INNER JOIN是最常见的连接类型。它仅返回在两个联接表中都匹配的行。下维恩图说明了内部联接的工作方式。

SQL内部连接图

为了容易理解这一点,让我们来看看下面employeesdepartments表。

+--------+--------------+------------+---------+| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 ||      2 | Tony Montana | 2002-07-15 |       1 ||      3 | Sarah Connor | 2005-10-18 |       5 ||      4 | Rick Deckard | 2007-01-03 |       3 ||      5 | Martin Blank | 2008-06-24 |    NULL |+--------+--------------+------------+---------+

+---------+------------------+| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   ||       2 | Customer Service |
|       3 | Finance          ||       4 | Human Resources  |
|       5 | Sales            |+---------+------------------+
表: employees
表: departments

现在,假设您只需要检索分配给特定部门的那些员工的emp_id ,emp_name,hire_date和dept_name。因为在实际情况中,可能有些雇员尚未分配到部门,例如我们employees表中的第五名雇员“ Martin Blank” 。但是这里的问题是,如何在同一个SQL查询中从两个表中检索数据?

如果您看到employees表,您会注意到它有一个名为dept_id的列,该列保存每个雇员分配到的部门的ID,即按技术术语来说,employees表的dept_id列是departments表的外键, 因此,我们将使用此列作为这两个表之间的桥梁。

这是一个示例,该示例通过使用通用的dept_id列将employee 和departments表连接在一起来检索员工的id,姓名,雇用日期及其所属部门。 它不包括未分配给任何部门的那些雇员。

示例

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_nameFROM employees AS t1 INNER JOIN departments AS t2ON t1.dept_id = t2.dept_id ORDER BY emp_id;

提示:联接表时,请在每个列名称前添加其所属表的名称(例如 employees.dept_id,departments.dept_id 或 t1.dept_id,t2.dept_id 如果您使用表别名),以避免万一不同表中的列存在混淆和歧义的列错误同名。

注意:为了节省时间,可以在查询中使用表别名代替键入长表名。 例如,您可以为employees表赋予别名t1,并使用t1.emp_name而不是employees.emp_name 来引用其列emp_name。执行完上述命令后,您将得到如下结果集:

+--------+--------------+------------+-----------------+| emp_id | emp_name     | hire_date  | dept_name       |
+--------+--------------+------------+-----------------+
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources ||      2 | Tony Montana | 2002-07-15 | Administration  ||      3 | Sarah Connor | 2005-10-18 | Sales           ||      4 | Rick Deckard | 2007-01-03 | Finance         |+--------+--------------+------------+-----------------+


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐