INNER JOIN
联接表
在关系数据库中,数据经常被组织到多个表中,以最大程度地减少冗余并提高数据完整性。 这种称为规范化的设计方法可避免在不同位置重复相同的信息。 但是,这意味着有用的信息通常分布在多个表中。
联接是弥合此差距的基本 SQL 操作,使你能够合并两个或多个表中的行并在单个统一的结果集中检索相关数据。 从本质上讲,联接使你能够查询逻辑上连接但物理上分离的信息。 它们通过根据各个表之间一个或多个公用列中找到的值识别并匹配行来实现此合并。 这些公用列通常充当一个表中的主键与另一个表中的外键之间的链接,从而建立数据库架构中定义的关系。
注意:主键是一个表中每个记录的唯一标识符,确保此列中没有两行具有相同的值。 另一方面,外键是一个表中引用另一个表中的主键的列,从而链接了两个表。
联接(INNER、LEFT、RIGHT、FULL OUTER、NATURAL)有多种“风格”,每种联接旨在以略有不同的方式组合表。 它们通过控制结果集中包含哪些行,这取决于联接表中是否存在匹配值。
INNER JOIN
INNER JOIN 是最常用的 SQL 联接类型之一。 它基于指定共享列中匹配值的条件,合并来自多个表的行。
在执行 INNER JOIN 时,结果集中只包含那些在两个表中满足条件的行,从而有效地过滤掉所有不匹配的数据。 这使得 INNER JOIN 非常适合用于检索显式定义表之间的连接的相关信息,例如客户订单或员工分配。
SELECT orders.order_id, customers.customer_name, employees.first_name, employees.last_name
FROM sales.orders AS orders
INNER JOIN sales.customers AS customers ON orders.customer_id = customers.customer_id
INNER JOIN sales.employees AS employees ON orders.employee_id = employees.employee_id;
提供的查询使用多个 INNER JOIN 操作,检索包含有关 orders、customers 和 employees 的详细信息的统一结果集。
它将 orders 表中的 customer_id 与 customers 表中的对应 customer_id 匹配,并将 orders 表中的 employee_id 与 employees 表中的对应 employee_id 匹配。 因此,该查询输出每个订单的 ID 以及所涉及的客户和员工的姓名。