Code前端首页关于Code前端联系我们

如何对数据库表自连接执行 SQL 查询?

terry 2年前 (2023-09-26) 阅读数 47 #数据库

自关联映射:表与其自身关联。此时,从同一个表进行查询,并使用 join 语句使用别名将一个表变成两个表。

示例 1:id 自关联

隐式内连接:

数据库表自关联如何进行SQL查询?

数据库表自关联如何进行SQL查询?

示例 2:编写一个 SQL 查询来查找温度高于前一个(昨天)日期的所有日期的 id。返回结果的顺序没有要求。

查询结果格式如下:

Weather
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+

Result table:
+----+
| id |
+----+
| 2  |
| 4  |
+----+
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)

SQL:

SELECT
    weather.id AS 'Id'
FROM
    weather
        JOIN
    weather w ON DATEDIFF(weather.date, w.date) = 1
        AND weather.Temperature > w.Temperature;

因此,我们可以通过将天气与自身、结合使用FF 函数来对进行自关联。

示例3:收入超过经理的员工

Employee表包含所有员工,其经理s也属于员工。每个员工都有一个ID,对应员工的还有一栏经理的ID。

+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+

给定表 Employee,编写一个 SQL 查询来获取收入高于 经理 的员工姓名。在上表中,乔是唯一一位收入高于经理同事的员工。

+----------+
| Employee |
+----------+
| Joe      |
+----------+

SQL:id 自连接

SELECT
     a.NAME AS Employee
FROM Employee AS a JOIN Employee AS b
     ON a.ManagerId = b.Id
     AND a.Salary > b.Salary;

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门