模糊查询:
关键字:like
通配符: %:表示0到多个字符
_:表示一个字符
1练习:第三个姓名为N
select * from emp where job LIKE '_ _N%';
--练习:10,20部门中,名字有E,L的
select * from emp where deptno in(10,20) and (ename LIKE '%E%L%' or ename like '%L%E%');
--练习:10,20部门中,有E或L的姓名
select * from emp where deptno in(10,20) and (ename LIKE '%E%' or ename like '%E%');
--2:条件中可以使用表达式或函数
--练习:查询年薪大于20000的员工信息
select * from emp where SAL*12>20000
--练习:查看姓名叫jones的员工 不区分大小写
select job,sal from emp where lower(ename)='jones';
--练习:姓名 长度大于5
select * from emp where ename like '_ _ _ _ _%'
位置:一定要放在查询语句的最后
用法:order by colName列名
升序:asc,默认不写
降序:desc
按照一个字段进行排序: order by colName asc/desc
排序时,null为最大值,理解为无穷大。
按照两个字段排序:
逻辑:先按照第一个字段排序,当值一样时,才会按照第二个字段排序
每个字段都有自己的排序规则。
reg: order by colName asc,colName
--练习:查询所有员工信息,按照月薪的降序排序
select * from emp order by sal desc
--练习:查看10和20部门的姓名,部门号,月薪,奖金,按照奖金升序排序
select deptno,sal,comm from emp where deptno in (10,20) order by comm asc
--工资升序,奖金降序
select * from emp order by sal asc,comm desc;
4.去重
去掉重复的数据,显示一次(过滤掉重复的数据)
关键字:distinct(col)
用法L:此关键字
--练习:查看员工表部门号,按照部门号升序排序
select distinct(deptno) from emp order by deptno;
--练习:按照职位降序排序
select distinct(job) from emp order by length(job) desc;
--练习:按照奖金降序排序
select distinct(comm) from emp order by comm desc;
5 聚合函数
需求:查看员工表中最高月薪
查看每个部门的平均工资
所要的数据,表中无法直接体现,需要经过计算
需要统计多条记录,然后显示成一条记录。
这时就需要使用聚合函数,也叫多行函数,分组函数
max()/min()
max():查看每一组中最大值
min():每一组中数据最小值
-- 练习:查看员工最高月薪和最低月薪
select max(sal),min(sal) from emp
--练习:统计员工表中最高年收入,最低奖金
select max((sal+nvl(comm,0))*12),min(nvl(comm,0)) from emp
select max((sal+nvl(comm,0))*12),min(comm),max(comm) from emp
select max ((sal+ comm )*12),min(comm),max(comm) from emp
**所有的聚合函数都忽略空值
1 --sum()每一组数据的和
--练习:计算月薪,奖金的总和,月薪的最大值
select sum(sal),sum(comm),max(sal) from emp
--练习:计算员工表中的平均月薪
select sum(sal)/14 from emp
2--avg()求每一组数据的平均值 必须要有nvl(_)
通常都要进行nvl(,0)
--练习:查看员工表中平均奖金
select avg(nvl(comm,0)) from emp
--练习:查看员工表平均奖金
select sum(comm)/14 from emp
select avg(sal) from emp == select sum(sal)/14 from emp
select avg(nvl(comm,0)) from emp==select sum(comm)/14 from emp
--练习:统计员工的年收入的平均数
select sum((sal+nvl(comm,0))*12)/12 from emp
3 ---count():
统计每一组中的数据记录数,就是有多少行
通配符 * 可以代替任意字段。可以统计总记录数
--练习:统计员工表中月薪个数
select count(sal) from emp
--练习:统计员工表中奖金个数
select count(comm) from emp
--练习:统计员工表中人数
select count(nvl(comm,0)) from emp
4 group by子句:
作用是通过字段进行分组。字段值一样的为一组。
用法:group by colNamee
--练习:查看每个部门的最高月薪,最低月薪,平均月薪,平均奖金,总人数
select deptno,max(sal),min(sal),avg(nvl(comm,0)),avg(nvl(sal,0)),count(*) from emp group by deptno
***分组查询时,只有分组字段可以放在select子句中
练习:查看每组职位的最高月薪,平均月薪
select job,max(sal),avg(nvl(sal,0)) from emp group by job
练习:按照部门和职位进行分组,查看最高工资,平均奖金
select deptno,job,max(sal),avg(nvl(comm,0)) from emp group by deptno,job
5 having子句 过滤
--练习:查看部门平均工资大于2000的部门号
select deptno,avg(nvl(sal,0)) avg_sal from emp group by deptno having avg(nvl(sal,0)) >2000
--练习:查看部门最高月薪大于3000的部门
select deptno,max(sal) max_sal from emp group by deptno having max(sal)>3000
注意:判断的话,聚合函数要用having
关键字:like
通配符: %:表示0到多个字符
_:表示一个字符
1练习:第三个姓名为N
select * from emp where job LIKE '_ _N%';
--练习:10,20部门中,名字有E,L的
select * from emp where deptno in(10,20) and (ename LIKE '%E%L%' or ename like '%L%E%');
--练习:10,20部门中,有E或L的姓名
select * from emp where deptno in(10,20) and (ename LIKE '%E%' or ename like '%E%');
--2:条件中可以使用表达式或函数
--练习:查询年薪大于20000的员工信息
select * from emp where SAL*12>20000
--练习:查看姓名叫jones的员工 不区分大小写
select job,sal from emp where lower(ename)='jones';
--练习:姓名 长度大于5
select * from emp where ename like '_ _ _ _ _%'
select * from emp where length(ename) >5
3.排序:也是查询语句中的一个子句
用法:order by colName列名
升序:asc,默认不写
降序:desc
按照一个字段进行排序: order by colName asc/desc
排序时,null为最大值,理解为无穷大。
按照两个字段排序:
逻辑:先按照第一个字段排序,当值一样时,才会按照第二个字段排序
每个字段都有自己的排序规则。
reg: order by colName asc,colName
--练习:查询所有员工信息,按照月薪的降序排序
select * from emp order by sal desc
--练习:查看10和20部门的姓名,部门号,月薪,奖金,按照奖金升序排序
select deptno,sal,comm from emp where deptno in (10,20) order by comm asc
--工资升序,奖金降序
select * from emp order by sal asc,comm desc;
4.去重
去掉重复的数据,显示一次(过滤掉重复的数据)
关键字:distinct(col)
用法L:此关键字
--练习:查看员工表部门号,按照部门号升序排序
select distinct(deptno) from emp order by deptno;
--练习:按照职位降序排序
select distinct(job) from emp order by length(job) desc;
--练习:按照奖金降序排序
select distinct(comm) from emp order by comm desc;
5 聚合函数
需求:查看员工表中最高月薪
查看每个部门的平均工资
所要的数据,表中无法直接体现,需要经过计算
需要统计多条记录,然后显示成一条记录。
这时就需要使用聚合函数,也叫多行函数,分组函数
max()/min()
max():查看每一组中最大值
min():每一组中数据最小值
-- 练习:查看员工最高月薪和最低月薪
select max(sal),min(sal) from emp
--练习:统计员工表中最高年收入,最低奖金
select max((sal+nvl(comm,0))*12),min(nvl(comm,0)) from emp
select max((sal+nvl(comm,0))*12),min(comm),max(comm) from emp
select max ((sal+ comm )*12),min(comm),max(comm) from emp
**所有的聚合函数都忽略空值
1 --sum()每一组数据的和
--练习:计算月薪,奖金的总和,月薪的最大值
select sum(sal),sum(comm),max(sal) from emp
--练习:计算员工表中的平均月薪
select sum(sal)/14 from emp
2--avg()求每一组数据的平均值 必须要有nvl(_)
通常都要进行nvl(,0)
--练习:查看员工表中平均奖金
select avg(nvl(comm,0)) from emp
--练习:查看员工表平均奖金
select sum(comm)/14 from emp
select avg(sal) from emp == select sum(sal)/14 from emp
select avg(nvl(comm,0)) from emp==select sum(comm)/14 from emp
--练习:统计员工的年收入的平均数
select sum((sal+nvl(comm,0))*12)/12 from emp
3 ---count():
统计每一组中的数据记录数,就是有多少行
通配符 * 可以代替任意字段。可以统计总记录数
--练习:统计员工表中月薪个数
select count(sal) from emp
--练习:统计员工表中奖金个数
select count(comm) from emp
--练习:统计员工表中人数
select count(nvl(comm,0)) from emp
4 group by子句:
作用是通过字段进行分组。字段值一样的为一组。
用法:group by colNamee
--练习:查看每个部门的最高月薪,最低月薪,平均月薪,平均奖金,总人数
select deptno,max(sal),min(sal),avg(nvl(comm,0)),avg(nvl(sal,0)),count(*) from emp group by deptno
***分组查询时,只有分组字段可以放在select子句中
练习:查看每组职位的最高月薪,平均月薪
select job,max(sal),avg(nvl(sal,0)) from emp group by job
练习:按照部门和职位进行分组,查看最高工资,平均奖金
select deptno,job,max(sal),avg(nvl(comm,0)) from emp group by deptno,job
5 having子句 过滤
--练习:查看部门平均工资大于2000的部门号
select deptno,avg(nvl(sal,0)) avg_sal from emp group by deptno having avg(nvl(sal,0)) >2000
--练习:查看部门最高月薪大于3000的部门
select deptno,max(sal) max_sal from emp group by deptno having max(sal)>3000
注意:判断的话,聚合函数要用having