sql99和sql92的发展历史
比如表
id name age
1 1 2
1 2 3
通过ID分组,查最大的age,顺便把name查出来
得到的是1 1 3
那个函数查出来的数据就是取的分组后的第一行
不一定会和聚合函数的值同一行
group by必须和select的数据保持强一致,不然带出的数据可能会不正确.
MySQL中的any_value()函数可以让我们绕过sql99的规范,并且约束数据.
嵌套查询用的最多.
WITH AS
WITH AS短语也叫子查询部分,用来定义一个SQL片段,且该SQL片段会被整个SQL语句用到,这个语句算是公用表表达式(CTE)。
eg:
with子句优点
- SQL可读性增强。比如对于特定with子查询取个有意义的名字等。
- with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。
with子句语法
Withalias_nameas (select1), --as和select中的括号都不能省略alias_name2as (select2),--后面的没有with,逗号分割,同一个主查询同级别地方,with子查询只能定义一次如查询销售部门员工的姓名:withaas(selectidfroms_deptwherename=Salesorderbyid) selectlast_name,titlefroms_empwheredept_idin (select*froma);--使用select查询别名