第二高的薪水

1. 介绍

将题中所需的知识点提取出来,达到巩固的效果。

2. 起别名

  • 方式一:使用as
    SELECT 100%98 AS 结果;
  • 方式二:使用空格
    SELECT last_name 姓,first_name 名 FROM 库名;
  • 注意:
    如果别名内含有关键字,建议用双引号引起来,单引号也可以,但是建议用双引号;

3. 去重

  • 示例
  # 查询员工表中涉及到的所有的部门编号:
  SELECT  DISTINCT  department  
  FROM  employees;
  • distinct后面只能有一个字段

4. ifnull与isnull

ifnull
  • 示例
  # 第一个参数可能为null的表达式  假如说真的为null了就写0 
  select IFNULL(commission_pct, 0)  
  from employees;
isnull
  • 示例
  # isnull判断某字段表达式是否为null,如果是null,则返回1,否则返回0
  SELECT 
  ISNULL(commission_pct),commission_pct
  FROM
  employees;

5. 分页查询

  • 应用场景
    当要显示的数据,一页显示不全,需要分页提交sql请求
  • 语法
  select  查询列表  第七执行
  from  表  第一执行
  【join type join 表2  第二执行
  on 连接条件  第三执行
  where 筛选条件  第四执行
  group by 分组字段  第五执行
  having 分组后的筛选  第六执行
  order by 排序的字段】 第八执行
  limit 【offset,】size;  最后执行
  offset要显示条目的起始索引(起始索引是从0开始的)
  size要显示的条目个数
  • 示例
  # 案例2:查询第11条-第25条
  SELECT * FROM employees LIMIT 10,15;

LIMIT里面不能做运算
limit 2,1:跳过2条取出1条数据,即读取第3条数据
limit 2 offset 1:跳过1条取两条,即读取第2,3条

6. 排序查询

  • 语法
  SELECT 查询列表
  FROM 表
  【where 筛选条件】
  ORDER BY 排序列表 【 ASC / DESC 】
  • 示例
  # 案例:查询员工信息,要求工资从高到低排序
  SELECT 
  	*
  FROM
  	employees
  ORDER BY salary DESC;

  SELECT
  	*
  FROM
  	employees
  ORDER BY salary ASC;
  • 注意事项
  1. asc:升序,desc:降序,如果不写,默认是升序。
  2. order by子句中可以支持单个字段,多个字段,表达式,函数,别名
  3. order by子句一般是放在查询语句的最后面,但有一个limit子句除外,即只有limit子句是放在order by子句的后面,其他的都是放在order by子句的前面
  4. 执行顺序:
  select  查询列表 第三执行
  from  表 第一执行
  【where 筛选条件】 第二执行
  order by 排序列表 【asc/desc】 第四执行

7. 例题

  • 注意
  1. 如果表中只有一条记录
  2. 如果有多条相同的数据
  3. 如果查到的数据为空
  • 解决方案
  # 建立临时表
  select
  ifnull(
      (
      select distinct salary
      from employee
      order by salary desc
      limit 1, 1
      ), NULL
  )
   as 'SecondHighestSalary';


  select 
      (
      select distinct salary
      from employee
      order by salary desc
      limit 1, 1
      ) 
  as 'SecondHighestSalary';
posted @ 2022-03-01 10:22  jsqup  阅读(21)  评论(0编辑  收藏  举报