第二高的薪水
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;
- 注意事项
- asc:升序,desc:降序,如果不写,默认是升序。
- order by子句中可以支持单个字段,多个字段,表达式,函数,别名
- order by子句一般是放在查询语句的最后面,但有一个limit子句除外,即只有limit子句是放在order by子句的后面,其他的都是放在order by子句的前面
- 执行顺序:
select 查询列表 第三执行
from 表 第一执行
【where 筛选条件】 第二执行
order by 排序列表 【asc/desc】 第四执行
7. 例题
- 注意
- 如果表中只有一条记录
- 如果有多条相同的数据
- 如果查到的数据为空
- 解决方案
# 建立临时表
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';
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/15948983.html