zoukankan      html  css  js  c++  java
  • 自关联映射:一个表自己关联自己,此时从同一个表中查询,通过起别名将一张表变成两张表,使用join语句。

    实例1:id自关联

    隐式内连接:

     

     

     实例二:编写一个 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 -> 252015-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;

    因此,我们可以通过将 weather 与自身相结合,并使用 DATEDIFF() 函数自关联

    实例三:超过经理收入的员工

    Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。

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

    给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。

    +----------+
    | 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;
  • 相关阅读:
    sprint2第一天任务完成情况
    第七天完成任务
    第六天任务情况
    第五天任务完成情况
    第四天任务完成情况
    第三天任务完成情况
    第二天任务完成情况
    第一天任务完成情况
    组队开发项目NABCD分析
    网络设置-指定ip
  • 原文地址:https://www.cnblogs.com/zwh0910/p/14396206.html
Copyright © 2011-2022 走看看