数据库的简单查询
查询的分组
1、group by子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致的进行分组
2、除聚集计算语句外,select语句中的每一列都必须在group by 子句中给出
3、如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回,如果列中有多行NULL值,它们将分为一组
4、group by子句必须出现在where子句之后,order by子句之前
例如:我想列出每个部门的最高薪水,sql语句如下:
select dept,max(salary) as max_salary from B group by dept;
注意:SQL还允许过滤分组,规定包括哪些分组,排除哪些分组。having和where 的差别
目前为止所学过的所有类 型的WHERE子句都可以用HAVING来替代。唯一的差别是,WHERE过滤行,而HAVING过滤分组。
例如:查询平均工资不足2000的部门
select dept,avg(salary) as avg_salary from B
group by dept
having avg_salary<2000;
查询的排序
1、按多个列排序:经常需要按照不知一个列进行数据排序。
例如:按每个部门的最高工资进行排序
select dept,max(salary) as max_salary from B group by dept order by max_salary;
2、按列位置排序:除了能用列名指出排序列外,order by 还支持相对列位置排序。
例:对查询并对id和salary进行排序
select id,salary from products order by 1,2;
分析:这里的输出与上面的查询相同。不同之处在于order by 子句,select清单中指定的是选择列的相对位置而不是列名。order by 2 表示按select清单中第二个列,name进行排序。order by 2,3表示先按price排序,再按name进行排序。
3、指定排序方向:如果打算对多个列进行排序。
例:select salary ,id,name from products order by salary desc,id;
desc关键字只作用于位于其前面的列名。必须对每个列指定desc关键字。