SELECT-2
排序
单列排序语法格式如下:
select 要查询列名 from 表名 order by 列名 desc/asc;
注:
- 若只在order by后接列名不指定排序规则则默认为asc升序
- asc/desc表示排序规则asc代表升序desc代表降序
- order by子句相对位置始终在最后
简单示例如下:
多列排序语法格式如下:
--按照order by后边的列名次序决定排序次序
select 要查询列名 from 表名 order by 列名1 desc/asc,... ,列名n desc/asc;
注:
- 排序顺序如下先按照列名1和其排序规则排序,若列名1中有相同值则按照列2和排序规则排序(从左到右)
示例如下:
聚合函数
--查询表中一共有多少条数据
select count(*) from emp;
select count(1) from emp;
select count(deptno) from emp;
运行效果如下:
注:三种方式虽写法一样,但运行效率不同*>常树>普通列,当表中设置主键或索引后索引效率最高
--max(列名)——求该列的属性值中最大的属性值
select max(sal) from emp;
运行效果如下:
--min(列名)——求该列的属性值中最小的属性值
select min(sal) from emp;
运行效果如下:
--avg(列名)——求平均值
select avg(sal) from emp;
运行效果如下:
--sum(列名)——求和
select sum(sal) from emp;
运行效果如下:
--distinct去重关键字,试比较以下三种语句的不同
select distinct deptno from emp;
select distinct deptno,empno from emp;
运行效果如下:
分组
--语法格式如下
select 列名,列名,...,列名 from 表名
where 条件
group by 分组列
order by 排序列 asc|desc;
--查看每个部门人数
select deptno,count(*) from emp group by deptno;
运行效果如下:
注:
- 必须保证group by后字段出现在select与from中且不能有多余字段,聚合函数除外
示例如下:
-
group by 字段1,字段2的执行原理为根据字段1,字段2同时相等的条件分组
-
若有聚合函数可以不在select与from之中显示group by后字段
示例如下:
having
having与group by 通常成对出现
--查看部门人数大于四的部门人数
select deptno,count(*) from emp group by deptno having count(*)>4
运行效果如下:
拓:where与having的不同如下
- where中不能使用聚合函数,having可以使用聚合函数