数据库开发基础-Oracle-SQL基础-004

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)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值