📜  在 oracle 中通过查询连接 - SQL (1)

📅  最后修改于: 2023-12-03 14:51:03.468000             🧑  作者: Mango

在 Oracle 中通过查询连接 - SQL

在 Oracle 中,连接是指将多个表中的数据组合起来,以便可以查询和分析它们。连接通常是通过某些共同的列进行的,例如,每个表都包含相同的客户 ID。

连接类型

Oracle 支持以下几种类型的连接:

  • 内连接:返回两个表中共同的行;
  • 外连接:返回两个表中至少有一行的行,对于没有相匹配行的数据,将使用 null 填充;
  • 自连接:指在同一表中使用连接查询,通常在表包含自引用关系时使用;
  • 交叉连接:返回两个表所有可能的组合,通常在需要计算笛卡尔积时使用。
连接语法

在 Oracle 中,连接是通过使用 JOIN 关键字实现的。一个基本的连接查询包括要连接的两个表、连接类型和连接条件。

SELECT [columns]
FROM table1
JOIN table2 ON table1.column = table2.column;

其中,table1table2 是要连接的两个表,JOIN 是连接关键字,ON 是连接条件关键字。

内连接查询

内连接返回两个表中相互匹配的行。例如,我们有一个名为 customers 的表,其中包含客户 ID、名字和姓氏,在另一个名为 orders 的表中,我们有与客户 ID 相关联的订单。

SELECT customers.first_name, customers.last_name, orders.order_date
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id;

这将返回所有客户和他们的订单日期。

左外连接查询

左外连接仅返回左边的表的所有行和右边的表中已经匹配的行。对于没有相匹配行的右边表中的数据将使用 null 填充。

SELECT customers.first_name, customers.last_name, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

这将返回所有客户和他们的订单日期,即使他们在订单表中没有订单。

右外连接查询

右外连接与左外连接类似,仅返回右侧表的所有行和左侧表中已经匹配的行。

SELECT customers.first_name, customers.last_name, COALESCE(orders.order_date, 'No order') AS order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

这将返回所有订单和订单日期,即使他们没有对应的客户。

自连接查询

自连接允许在同一表中使用连接查询。例如,我们有一个名为 employees 的表,其中包含员工的 ID、名字和经理 ID。我们可以使用自连接查询,将经理的名字添加到每个员工的记录中。

SELECT e1.first_name, e1.last_name, e2.first_name AS manager_first_name, e2.last_name AS manager_last_name
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.employee_id
ORDER BY e1.last_name, e1.first_name;

这将返回由经理和他们的员工组成的列表。

交叉连接查询

交叉连接查询返回两个表中的所有可能组合。通常不建议在实际开发中使用此类查询,因为返回的行数可能非常大。

SELECT *
FROM customers
CROSS JOIN orders;

这将返回客户表和订单表的所有组合。