GROUP BY(分组)


ORDER BY(排序)


“union和union all都可以起到关联结果集的作用,区别在于,union会自动去除关联的两个结果集中的重复数据,union all则不会主动去除两个结果集中的重复数据,会展示所有的数据;”

==========

问题:from ( select employee_id from employees union all select employee_id from salaries ) as t,这段后面为什么要加个 as t ?

回答: 每个派生表都需要有自己的别名

============


union all 联合多表
group by 按照id分组
having 条件筛选
order by 升序排序

===

第二高薪水

https://leetcode.cn/problems/second-highest-salary/solution/di-er-gao-de-xin-shui-by-leetcode/

方法一:使用子查询和 LIMIT 子句

将不同的薪资按降序排序,然后使用 LIMIT 子句获得第二高的薪资。然而,如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。


方法二:使用 IFNULL 和 LIMIT 子句

解决 “NULL” 问题的另一种方法是使用 “IFNULL” 函数,如下所示。

方法三: Max函数


=======================

mysql中isnull, ifnull, nulli f的用法如下:


isnull(expr) 的用法: 如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。

 mysql> select isnull(1+1); -> 0 

mysql> select isnull(1/0); -> 1 

使用= 的null 值对比通常是错误的。


IFNULL(expr1,expr2)的用法:
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
mysql> SELECT IFNULL(1,0);
-> 1


mysql> SELECT IFNULL(NULL,10);
-> 10


mysql> SELECT IFNULL(1/0,10);
-> 10


mysql> SELECT IFNULL(1/0,'yes');

-> 10


==========================

Limit offset

limit X,Y ,跳过前X条数据,读取Y条数据

  • X表示第一个返回记录行的偏移量,Y表示返回记录行的最大数目
  • 如果X为0的话,即 limit 0, Y,相当于limit Y

https://zhuanlan.zhihu.com/p/402520598


在日期之间

max(sale_date) <= '2019-03-31'

and min(sale_date) >= '2019-01-01'