from emp
where hiredate > to_date(‘1982-1-1’, ‘YYYY-MM-DD’);
select ename, sal, hiredate
from emp
where sal > 1000
and job = ‘CLERK’;
select *
from emp
where sal > 1000
or job = ‘CLERK’;
–and 的优先级高于 or ,可以通过括号来
–提高 or 的优先级
查看工资高于1000并且职位是SALESMAN
或CLERK员工?
select ename, job, sal
from emp
where sal > 1000
and (job = ‘SALESMAN’ or job = ‘CLERK’);
–like 用于模糊查询字符串
–支持两个通配符:
_:表示匹配任意一个字符
%:表示任意多个字符(0-多个)
select ename,job from emp where ename like ‘_A%’;
–in 与 not in
in 用于判断等于列表中之一
not in 用于判断不在列表中
in 常用于子查询
select ename, job from emp where job in (‘MANAGER’, ‘CLERK’);
–and 与 all 是用于判断诸如:>,>=,<,<=
进行判断的,判断与一个列表中的内容的比较
all:大于列表中的所有(大于最大)
any:大于列表中其一(大于最小)
<all:小于列表中所有(小于最小)
<any:小于列表中其一(小于最大)
列表中的内容通常是一个查询的结果集(子查询:后面会讲),而
不是给定的具体值,否则实际就没意义了。
select ename, job, sal from emp where sal > any(‘3500’, ‘4000’, ‘4500’);
–在 where 中使用函数或表达式的结果
–作为过滤条件:
select ename,sal,job from emp where ename = upper(‘allen’);
select ename,sal,job from emp where sal*12>50000;
–distinct 关键字,去除其后指定
–的字段的重复行。
–distinct 可以对多个字段去除重复行,
–去重原则是这些字段值得组合没有重复。
查看公司共有多少种职位?
select distinct job,deptno from emp;
–排序
order by 字句
order by 字句会根据其后指定的
字段的进行升序或降序将结果集
进行排列后显示。
升序(asc):asc 可以不写,默认升序,
降序(desc):从小到大排列
desc 要注意与 查看表结构的sql命令desc区分
查看工资排名:
select ename,sal from emp order by sal desc;
order by 亦可以对多列进行排序,
排序优先级从左到右。
select ename,deptno,sal from emp order by deptno desc,sal;
排序的字段中若有 null 值, null被认作最大值。
select ename,comm from emp order by comm desc;
order by 子句必须写在 select 语句的最后一个子句上。
–聚合函数
聚合函数会将指定字段查询出的每一条记录
对应的值全部进行统计,然后得出一个结果。
max,min
求指定字段在查询出的所有记录中的最大值与最小值。
select max(sal),min(sal) from emp;
avg ,sum
求平均值与总和
select avg(sal),sum(sal) from emp;
select avg(comm),sum(comm) from emp;
–上面只考虑不为null的记录,会忽略为null记录的统计
聚合函数会忽略null值。
可使用nvl解决这个问题
select avg(nvl(comm,0)),sum(comm) from emp;
count()
统计给定字段值(不为null)的
的记录数。
查看公司共多少人?(emp表的记录数)
select count(ename) from emp;
通常查看表中记录总数使用count(*)
select count(*) from emp;
–分组
group by 子句
group by 是配合聚合函数进行分组统计结果使用的。
group by 会根据后面的给定的字段值相同的记录进行分组,
然后配合聚合函数根据每个组再统计结果。
查看每个部门的平均工资?
select avg(sal),deptno from emp group by deptno;
当select子句中有聚合函数时,凡不在聚合函数中的其他字段
都必须出现在 group by 子句中。反过来则不是必须的。
查看每个职位的最高工资是多少?
select max(sal),job from emp group by job;
group by 子句可以按照多个字段分组,
分组原则是这些记录的指定字段值的组合相同。
查看每个部门每个职位的平均工资?
select avg(sal), job, deptno from emp group by job, deptno;
–引入having
查看每个部门的平均工资,前提是该部门平均工资高于2000.
–错误写法
select avg(sal), deptno from emp where avg(sal) > 2000 group by deptno;
where 不能使用聚合函数作为过滤条件
原因在于:时机不对
having 子句
having 必须跟在 group by子句后,作用是在分组统计后,基于统计结果
再次进行过滤使用的。
having 中可以使用聚合函数的统计结果作为过滤条件来筛选分组。
select avg(sal), deptno
from emp
group by deptno
having avg(sal) > 2000;
查看平均工资高于2000的部门的最高薪水是多少?
select max(sal), deptno from emp group by deptno having avg(sal) > 2000;
where 的过滤时机是在第一次检索表中
数据时进行过滤的。where 决定着从表
中查询出多少数据。
having 是在分组统计后再进行过滤的,
二分组是在查询出的数据基础上进行的
所以 having 的过滤是在 where 之后进行的
having 决定着取舍那些分组。
部门最高工资大于2900的那些部门的平均工资?
最后
面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?
掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。
出多少数据。
having 是在分组统计后再进行过滤的,
二分组是在查询出的数据基础上进行的
所以 having 的过滤是在 where 之后进行的
having 决定着取舍那些分组。
部门最高工资大于2900的那些部门的平均工资?
最后
面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?
掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。
[外链图片转存中…(img-h6Ut6Aw9-1714201591421)]
[外链图片转存中…(img-EUPmICRk-1714201591421)]