导图社区 大数据思维导图
COUNT(1) & COUNT(*) 都是统计行数 得到的结果都是一样的但是 COUNT(1) 比 COUNT(*) 性能要好一点,因为COUNT(*)需要先得到表的字段信息然后再计数,而COUNT(1)差不多是直接计数。
编辑于2022-04-09 14:50:16大数据:递归:从顶层到下一层级,一层一层递归去找。递归里面有一个很重要的关键字, LEVEL -- 级别。
偏移函数分向上偏移 LAG 向下偏移 LEAD 区别 就是 排序不同语法:LAG(字段A,X,缺省值) OVER (PARTITION BY 字段B,字段C ORDER BY 字段D)按照 字段B,字段C分组,按照字段D排序,取上一条记录字段A的值。
截取字段,从X位开始,Y位长度,如果X为负数,则从 -- 倒数的第X位开始往 后截取;截取字符串'ABCDEFGFAFAFDF'中'B'之后的内容SELECT SUBSTR('ABCDEFGFAFAFDF',3) FROM DUAL。
社区模板帮助中心,点此进入>>
大数据:递归:从顶层到下一层级,一层一层递归去找。递归里面有一个很重要的关键字, LEVEL -- 级别。
偏移函数分向上偏移 LAG 向下偏移 LEAD 区别 就是 排序不同语法:LAG(字段A,X,缺省值) OVER (PARTITION BY 字段B,字段C ORDER BY 字段D)按照 字段B,字段C分组,按照字段D排序,取上一条记录字段A的值。
截取字段,从X位开始,Y位长度,如果X为负数,则从 -- 倒数的第X位开始往 后截取;截取字符串'ABCDEFGFAFAFDF'中'B'之后的内容SELECT SUBSTR('ABCDEFGFAFAFDF',3) FROM DUAL。
BI 大数据
PLSQL(ORCL)
2022.3.26
安装ORCL查询工具
2022.3.27
介绍Oracle是一个以表的形式来储存数据的数据库工具
基本的查询语法
基本查询(常用)
SELECT 要查询的信息 AS 字段别名 FROM 表名 表的别名;
SELECT -- 收集 查询/输出格式
*或者要查询的字段名称 -- * 通配符:表示查询出这个表里面的所有数据,即所有字段
FROM --从哪里获取,从哪张表,第一运行程序
表名 --要查询的表名
AS 别名 --表名 别名 列/字段 别名,列/字段 AS 别名,列/字段 AS "别名"
条件查询(常用)
SELECT * FROM 表名 WHERE 查询的前提条件;
WHERE --在表的什么地方 过滤条件也可以叫做卡口径
条件 --要开始查询这个表格的前提条件,即第二运行程序
ORACLE数据库的常用数据类型
字符型:VARCHAR2(X) -- 字符串,X 表示字符串的最大长度,要用单引号,如:'字符串'
TO_CHAR(目标字段[,输出的格式])
TO_CHAR(E.HIREDATE, 'YYYY-MM-DD') 或 TO_CHAR(E.HIREDATE, 'YYYYMMDD')等,把日期转化为字符串;
数字型:NUMBER(X ,Y ) -- 数值, X 表示整个数字的最大长度,Y 表示小数部分的最大长度,也可以是NUMBER(X )或者NUMBER
TO_NUMBER(目标字段) ---注意:这里的目标字段必须是一个纯数字的字符型的值
TO_NUMBER('20200622') 把字符串转变成数字
日期型:DATE -- 日期 ,在ORACLE中日期格式默认是显示为 年月日 时分秒的
TO_DATE(目标字段,输出格式) ---注意:这里的目标字段必须是一个符合实际日期的字符型的值
TO_DATE('20200622135012','YYYYMMDDHH24MISS') 或 TO_DATE('20200622','YYYYMMDD') 把字符串转化为日期
范围查询
目标字段的值 BETWEEN 较小的值 AND 较大的值
相当于 目标字段的值 >= 较小值 AND 目标字段的值 <= 较大的值
IN( ) 或 NOT IN( )
在什么和什么的范围里 相当于 = OR = ,也相当于 = ANY( , ) | 不在什么和什么的选项里 相当于 != and != , 也相当于 != ALL( , )
模糊查询
WHERE 目标字段的值 LIKE 'A%'
占位符:%:表示0位或者多位,_:表示具体的1位,查询出目标字段的值第一个字母是 A
WHERE 目标字段的值 LIKE '%S'
查询出目标字段的值最后一个字母是 S
LIKE '%O%'
查询出目标字段的值中任意位置包含 字母是 O
LIKE '____'
有几个”_“就代表这里有一个字节的内容
LENGTH(参数1):返回参数1的长度
关系运算符
> 、 < 、 >=、 <=、 != 就相当于 <>都是不等于的意思
目标字段的值 IS NULL ,就是过滤出空值的数据
将有空值的字段进行计算的时候,需要用NVL(参数1,参数2):判断参数1是否为空,如果不为空,则取参数1的值, 如果为空,则将赋值参数2的值 NVL(有空值的字段 , 0)
NULL 参加排序的时候,永远是最大的
NULL 不参与任何比较运算
NULL 不等于 数值0 而是没有值的意思
IS NOT NULL 过滤出非空值的数据
排序 ORDER BY 按照某列/某几列进行排序,且 ORDER BY 字段 默认为升序 ORDER BY 最后一个运行的程序
升序:order by 字段/列 ASC;
降序:order by 字段/列 DESC;
关联查询(常用)
子查询(常用)
2022.3.28
聚合函数
SUM → 求和
SUM(目标字段的值) 别名 显示目标字段的总值 ,
AVG → 平均值
AVG(目标字段的值) 别名 显示目标字段的平均值,
MAX → 最大值
MAX(目标字段的值) 别名 显示目标字段的最高值 ,
MIN → 最小值
MIN(目标字段的值) 别名 显示目标字段的最低值 ,
COUNT → 计数(统计非空行数)
COUNT(1) 别名 显示按照分组后的总行数
COUNT(1) & COUNT(*) 都是统计行数 得到的结果都是一样的 但是 COUNT(1) 比 COUNT(*) 性能要好一点,因为COUNT(*)需要先 得到表的字段信息然后再计数,而COUNT(1)差不多是直接计数。
COUNT(字段) 是统计该字段非空的行数(不把为空的行统计进去)
分组聚合 GROUP BY
SELECT 后面要查询的所有字段,除了聚合函数表示出来的字段外,其他全都得写在 GROUP BY 后面进行字段分组 GROUP BY 是倒数第三执行的程序(如果还要进行排序的话)
SELECT 输出字段 -- ⑤ FROM 表 -- ① WHERE 过滤条件1 -- ② GROUP BY 分组字段 -- ③ HAVING 过滤条件2 -- ④ ORDER BY 排序字段 -- ⑥
HAVING & WHERE 的区别是: HAVING 是过滤 聚合函数 & 分组字段的过滤条件 WHERE 是过滤 所有表字段 包含 分组字段
连接查询/多表关联查询
等值关联
内连接(INNER JOIN)
FROM A表 INNER JOIN B表 ON 关联条件 比较常用
内关联求的结果集是两张表的交集
Oracle 独有 的写法: FROM A表 , DEPT D WHERE 关联条件
关联条件如果 漏写了 会生成 笛卡尔乘积 : 得到A表的行数 * B表的行数 一定要写关联字段,否则会产生笛卡尔积(查询出来的结果会相乘)
外连接(OUTER JOIN)
左[外]连接 FROM A表(主表) LEFT JOIN B表(从表) ON 关联条件 比较常用
右[外]连接 FROM A表(从表) RIGHT JOIN B表(主表) ON 关联条件
FROM 从表 RIGHT JOIN 主表 ON 从表 . 字段名 = 主表 . 字段名 等同于 FROM 从表 , 主表 WHERE 从表 . 字段名(+) = 主表 . 字段名
全[外]连接 FROM A表(主表) FULL JOIN B表(从表) ON 关联条件
1. FULL JOIN 取的是 两张表的全量结果集; 2. 两张表的 共有字段,一定要 用 NVL 处理(防止有的数据在A表B表没有,有的数据 在B表有A表没有); -- 数据开发,金额要么有数据,要么为0,一般不会为NULL
区别于内连接: 1、语法结构上,内连接是[INNER] JOIN,左(右)外连接是LEFT [OUTER] JOIN 2、结果上,内连接取的是两个表的交集, 左外连接取得是主表的所有信息加上从表的信息,主表的数据就算不满足关联条件 也可以被查询出来,从表不够的就用NULL补全剩余的行数
重点:用and过滤条件不会过滤主表的信息。用where的时候,会过滤掉主表的部分信息。 所以,我们在用外连接的时候,大部分都是用and来接过滤条件
自关联
自己跟自己关联(当一个表中存在 上下层级关系的时候),将一个表拆分成两份或者从一个表中提取一个小一点的表格
FROM EMP E -- 员工表 主表 LEFT JOIN EMP F -- 经理表 从表 ON E.MGR = F.EMPNO -- 子表的父字段 = 父表的子字段 员工表的领导编号=经理表的员工编号 -- 先找到 员工的 经理编号 , 然后把经理编号 放到 EMP表去找 对应的员工编号 -- 是这个的行,然后员工编号就能找到对应的经理的姓名
不等值关联
即两个表的关联字段不相等
FROM EMP T1 INNER JOIN SALGRADE T2 ON T1.SAL >= T2.LOSAL AND T1.SAL <= T2.HISAL
FROM EMP E INNER JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL
子查询
当某个条件不确定的时候,就需要用到子查询
WHERE 后面 接子查询
FROM 后面接子查询