数据库操作

数据库操作

  • 1、 表之间连接
    MYSQL 题
    • 1、取第二高薪
    • 2、取第N高薪

inner join:2表值都存在

outer join:附表中值可能存在null的情况。

总结:

①A inner join B:取交集

②A left join B:取A全部,B没有对应的值,则为null

③A right join B:取B全部,A没有对应的值,则为null

④A full outer join B:取并集,彼此没有对应的值为null

1、取第二高薪

编写一个SQL查询以获得Employee表中第二高的薪水。

  • ---- + -------- +
    | Id | 薪水|

  • ---- + -------- +
    | 1 | 100 |
    | 2 | 200 |
    | 3 | 300 |

  • ---- + -------- +
    例如,给定上面的Employee表,查询应该返回200为第二高薪水。如果没有第二高的薪水,那么查询应该返回null。

  • --------------------- +
    | SecondHighestSalary |

  • --------------------- +
    | 200 |

  • --------------------- +
    或者

  • --------------------- +
    | SecondHighestSalary |

  • --------------------- +
    null

  • --------------------- +

关键字解释:
1、子查询,第一个select 如果查询没有值 为null。没有第一个select不能保证没有第二高薪的为null。
2、distinct 去重,如果一共两条数据,salary都是100,则第二个并不是第二高薪,因为查询结果并不能并列,所以将薪水为100,进行去重(薪水为100 保存一个,这样就起到一个并列的效果),这样第二高薪就为null,结果合理。

3、
① selete * from testtable limit 2,1;

② selete * from testtable limit 2 offset 1;

注意:

1.数据库数据计算是从0开始的

2.offset X是跳过X个数据,limit Y是选取Y个数据

3.limit X,Y 中X表示跳过X个数据,读取Y个数据

这两个都是能完成需要,但是他们之间是有区别的:

①是从数据库中第三条开始查询,取一条数据,即第三条数据读取,一二条跳过

②是从数据库中的第二条数据开始查询两条数据,即第二条和第三条。

select
    (select distinct salary 
from Employee as em
order by em.salary asc
limit 1 offset 1) as SecondHighestSalary

2、第N高薪水

表: Employee

±------------±-----+
| Column Name | Type |
±------------±-----+
| id | int |
| salary | int |
±------------±-----+
在 SQL 中,id 是该表的主键。
该表的每一行都包含有关员工工资的信息。

查询 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应该为 null 。
示例 1:

输入:
Employee table:
±—±-------+
| id | salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
n = 2
输出:
±-----------------------+
| getNthHighestSalary(2) |
±-----------------------+
| 200 |
±-----------------------+
示例 2:

输入:
Employee 表:
±—±-------+
| id | salary |
±—±-------+
| 1 | 100 |
±—±-------+
n = 2
输出:
±-----------------------+
| getNthHighestSalary(2) |
±-----------------------+
| null |
±-----------------------+

关键字声明

1、limit 和offset 上一个题中讲过。
2、

//声明参数,将形参赋值给你定义的属性,因为数据库下标是从0开始的。所以-1操作。
DECLARE A INT;
   SET A=N-1;

3、整体代码

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE A INT;
   SET A=N-1;
  RETURN (
      # Write your MySQL query statement below.
     select 
              select distinct salary
                 from Employee
                   order by salary desc
                     limit 1 offset A             
 );
END

你可能感兴趣的:(数据库)