如何对数据库表自连接执行 SQL 查询?
自关联映射:表与其自身关联。此时,从同一个表进行查询,并使用 join 语句使用别名将一个表变成两个表。
示例 1:id 自关联 。
隐式内连接:
示例 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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。