当前位置: 首页 > news >正文

Oracle基础知识(二)

目录

1.聚合函数

2.COUNT(1)&COUNT(*)&COUNT(字段)区别(面试常问)

3.分组聚合——group by

4.去重:DISTINCT 、GROUP BY

5.聚合函数的过滤HAVING

6.oracle中having与where的区别  (面试常问)

7.ROUND与TRUNC函数

8.ROLLUP上卷与CUBE各维度汇总

9.子查询

单行子查询案例:

多行子查询案例:


1.聚合函数

聚合函数:可以同时对多行进行操作,并返回一个结果

聚合函数有:

(1)avg(x):返回x的平均值;

(2)count(x):查询返回的行数;

(3)max(x):返回x的最大值;

(4)min(x):返回x的最小值;

(5)median(x):返回x的中位数;

(6)sum(x):返回x的和;

2.COUNT(1)&COUNT(*)&COUNT(字段)区别(面试常问)

COUNT(1)&COUNT(*) 都是统计行数 得到的结果都是一样的

但是 COUNT(1) 比 COUNT(*) 性能要好一点,因为COUNT(*)需要先得到表的字段信息然后再计数。

而COUNT(1)相当于新增一列,然后对该列进行直接计数。

COUNT(字段)是统计该字段非空的行数(不把为空的行统计进去)

3.分组聚合——group by

分组的情况下,group by后面有什么字段,select 才可以查对应的字段

4.去重:DISTINCT 、GROUP BY

特性DISTINCTGROUP BY
主要用途去除查询结果中的重复行对数据进行分组并允许使用聚合函数
是否可与聚合函数一起使用不可以可以
对输出的影响返回去重后的结果集根据分组条件返回每组的汇总信息
性能考虑对于简单去重操作较为直接有效更适合需要汇总、统计等复杂查询
示例SELECT DISTINCT department_id FROM employees;SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;

5.聚合函数的过滤HAVING

HAVING必须和group by 配合使用,且having必须在group by后面

HAVING 关键字和 WHERE 关键字都可以用来过滤数据,

且 HAVING 支持 WHERE 关键字中所有的操作符和语法。

注意:使用聚合函数之前尽量先用where进行过滤,先过滤再分组

           避免查*,用到哪些字段就查询哪些字段          

6.oracle中having与where的区别  (面试常问)

  1. where 不能放在 group by 的后面
  2. HAVING 是跟 GROUP BY 连在一起用的,放在 GROUP BY 后面,此时的作用相当于WHERE
  3. WHERE 后面的条件中不能有聚合函数,比如 SUM()、AVG()等,而 HAVING 可以

示例1:找出部门平均薪资大于1000 并且 部门编号不为10的 部门和部门平均薪资

select deptno,avg(sal) avg_sal
from emp
where deptno<>10
group by deptno
having avg(sal)>1000;

7.ROUND与TRUNC函数

ROUND(x,y)--四舍五入至y位小数

ROUND(x)--四舍五入至整数

TRUNC(x,y)--根据指定的小数位数截断数值(不进行四舍五入)。

8.ROLLUP上卷与CUBE各维度汇总

特性ROLLUP(job, deptno)CUBE(job, deptno)
汇总层级层次化汇总所有可能组合
包含哪些分组(job, deptno), (job), ()(job, deptno), (job), (deptno), ()
是否包含部门小计❌ 不包含只按部门的小计✅ 包含
结果行数较少更多

9.子查询

--单行子查询,返回的结果里只有一条数据                SELECT COUNT(1) FROM EMP;

--多行子查询,返回的结果集里有多条数据                SELECT ENAME FROM EMP; 

单行子查询案例:

示例:查询EMP,找出哪些人薪资比SCOTT用户高

SELECT SAL
FROM EMP
WHERE ENAME = 'SCOTT';
--
SELECT ENAME
FROM EMP
WHERE SAL > 3000;
--
SELECT ENAME
FROM EMP
WHERE SAL > (SELECT SALFROM EMPWHERE ENAME = 'SCOTT');

多行子查询案例:

示例:在10 和 20 部门中找出工作岗位和30部门中存在的任意一个岗位相同的员工的信息

SELECT DISTINCT JOB
FROM EMP
WHERE DEPTNO = 30;SELECT *
FROM EMP
WHERE DEPTNO IN (10, 20)AND JOB IN (SELECT DISTINCT JOBFROM EMPWHERE DEPTNO = 30);

相关文章:

  • oracle使用SPM控制执行计划
  • (6)python爬虫--selenium
  • 游戏引擎学习第302天:使用精灵边界进行排序
  • Axure项目实战:智慧运输平台后台管理端-订单管理2(多级交互)
  • WebSocket 是什么?
  • Canvas进阶篇:鼠标交互动画
  • RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头
  • QMK固件RGB矩阵照明功能详解 - 打造你的专属炫彩键盘
  • DevExpress Blazor中文教程 - 如何用AI聊天组件构建大型语言模型聊天APP?
  • python爬虫和逆向:百度翻译数据采集的几种方式
  • 使用Terraform创建azure databrick
  • 【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)
  • 【Linux我做主】探秘进程与fork
  • 基于MDX的在线编译文档方案
  • 自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)
  • STM32 I2C硬件读写
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Hidden Search Widget (交互式搜索框)
  • 拉普拉斯高斯(LoG)滤波器掩模的注意事项
  • vue3 + vite 使用tailwindcss
  • 关于收集 Android Telephony 网络信息的设计思考2
  • 网站设计分析/今日热点事件
  • 西安市建设银行网站/百中搜优化
  • 三门峡做网站公司/seo综合查询什么意思
  • 蒙山县网站建设/关键词优化的发展趋势
  • 个人网页设计作品纯html/seo培训
  • 网站模板侵权问题/微平台推广