📜  连接操作与 DBMS 中的嵌套查询(1)

📅  最后修改于: 2023-12-03 15:41:56.100000             🧑  作者: Mango

连接操作与 DBMS 中的嵌套查询

在关系型数据库管理系统(DBMS)中,连接(join)操作可以用来联合两个或多个表中的行。而嵌套查询(nested query)则是在一个SQL语句内部嵌套另外一个SQL语句,以便在查询时使用一个表的结果来过滤另一个表的结果。

连接操作

连接操作有以下几种常用的类型:

  • 内连接(inner join):仅返回两个表都有匹配行的行。
  • 左连接(left join):返回左侧表中的所有行以及右侧表中与它们匹配的行。
  • 右连接(right join):返回右侧表中的所有行以及左侧表中与它们匹配的行。
  • 全连接(full join):返回两个表中所有的行,并在必要时用 NULL 值填充那些没有匹配行的值。

下面是一个示例,展示如何使用内连接获取两个表的交集:

SELECT customers.name, orders.order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;

可以看到,我们使用 INNER JOIN 关键字来将 customers 表和 orders 表联合起来,并在 ON 子句中指定它们之间的连接条件。

嵌套查询

通过使用嵌套查询,我们可以在一个 SELECT 语句中嵌套另一个 SELECT 语句。这使得我们可以在一个查询中使用另一个查询的结果来构建我们所需要的数据集。

下面是一个示例,展示如何使用嵌套查询来获取各个部门的平均工资:

SELECT departments.department_name, AVG(employees.salary) AS average_salary
FROM departments
INNER JOIN employees ON departments.department_id = employees.department_id
GROUP BY departments.department_name
HAVING AVG(employees.salary) > (
    SELECT AVG(employees.salary)
    FROM employees
);

可以看到,我们在外部查询中获取了每个部门的平均工资,并在内部查询中获取了所有员工的平均工资。然后,我们将这些结果组合在一起,并使用 HAVING 关键字将结果限制为仅包含那些平均工资高于整个公司平均工资的部门。

总结

连接操作和嵌套查询是 SQL 查询中两个常用的概念。通过使用它们,我们可以在一个 SQL 查询中访问多个表,以及使用一个查询的结果来构建另一个查询的结果。学会使用这些操作,可以使我们更加灵活地处理各种复杂的查询场景。