Oracle数据库1

  1. 执行顺序:

FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

  1. 模糊查询:

LIKE + %(通配符) 如:LIKE '%A%'

LIKE + (占位符) 如:LIKE 'A_'

IN

NOT IN

JOB IN ('SALESMAN','CLERK')

BETWEEN ... AND ...

NOT BETWEEN... AND ...

5.查询去重 DISTINCT

SELECT DISTINCT DEPTNO,JOB FROM EMP

6.查询排序 ORDER BY

ASC 升序可以省略,默认由小到大排序即升序排列;

DESC 降序

SELECT EMPNO,ENAME,DEPTNO,SAL FROM EMP

ORDER BY DEPTNO,SAL DESC;

  1. 关键词:

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

VARCHAR2

NUMBER

DATE

SUM()、和

AVG()、平均值

COUNT()、总个数

MAX()、最大值

MIN()、最小值

MEDIAN() 中间值

OVER() 开窗函数:

SELECT EMPNO,ENAME,SAL,SUM(SAL)OVER() FROM EMP;

  1. 去null

NVL(COMM,0)

  1. 约束

PRIMARY KEY 主键约束

NOT NULL 非空约束

DEFAULT 0 无约束,默认为0

DEFAULT SYSDATE 添加系统时间为默认入职时间

①加别名 AS

SELECT SUM(SAL) AS 合计工资,

AVG(SAL) 平均工资, -- 这里省略了 AS

COUNT(*) AS CT, -- 工作中表头和表名尽量用英文表示

MAX(SAL) AS MAX_SAL1, -- 可以使用英文 + 下划线 + 数字表示,注意不能数字开头

FROM EMP;

②虚拟列 AS

CREATE TABLE PRORE(ID NUMBER,

名称 VARCHAR2(20),

数量 NUMBER,

单价 NUMBER,

金额 AS (数量 * 单价), -- 虚拟列:由数量乘以单价得来

其他名称 AS (名称||'国产') -- 虚拟列:由名称拼接国产得来

);

SELECT * FROM PRORE;

  1. ASCII码

  2. 删除语句:

----删除表结构和数据:DORP (DDL)

----删除指定条件数据语句:DELETE (DML)

----删除所有数据语句:TRUNCATE (DDL)不能回滚

① CONSTRAINT 限制

② COMMIT; 提交

( TCL 语句)

③ ROLLBACK; 回滚

④ COMMENT 注释

COMMENT ON TABLE EMP240515 IS '这是一个员工表,用于存储员工的相关信息';--给表添加注释

COMMENT ON COLUMN EMP240515.EMPNO IS '这是一个员工号';--给EMMPNO添加注释

COMMENT ON COLUMN EMP240515.HIREDATE IS '默认获取系统时间为入职时间';--给HIREDATE添加注释

  1. 集合:

UNION ALL(并集),

UNION(并集),

INTERSECT(交集),

MINUS(补集)

SELECT DEPTNO FROM DEPT --4 A

MINUS

SELECT DEPTNO FROM EMP --14 B A-B

  1. 分组拼接明细数据: LISTAGG

SELECT JOB,COUNT(*),SUM(SAL),

LISTAGG(ENAME,' , ')WITHIN GROUP(ORDER BY SAL) AS ENAME,

LISTAGG(SAL,' < ')WITHIN GROUP(ORDER BY SAL) AS SAL

FROM EMP

GROUP BY JOB

-- MYSQL分组拼接明细数据

SELECT JOB,GROUP_CONCAT(ENAME SEPARATOR ',')

FROM EMP

GROUP BY JOB;

ORACLE函数

分为系统函数和自定义函数

--系统函数又分为:单行函数、聚合函数、开窗函数/分析函数

--单行函数又分为:数字函数、字符函数、日期函数

--数字函数

①ABS() --取绝对值

②ROUND(X,Y) --对数字X保留Y位小数,并进行四舍五入

SELECT ROUND(3.146,2) FROM DUAL; --3.15

SELECT ROUND(3.141) FROM DUAL; --3

③TRUNC(X,Y) --对数字X保留Y位小数,但不会进行 四舍五入

SELECT TRUNC(3.146,2) FROM DUAL; --3.14

SELECT TRUNC(3.646) FROM DUAL; --3

④POWER(X,Y) --返回X的Y次方,求幂

SELECT POWER(3,2) FROM DUAL; --9

⑤MOD(X,Y) --对X取Y的余数

SELECT MOD(5,2) FROM DUAL ; --1

--日期函数

--日期-日期=天数

系统时间:SYSDATE

SELECT SYSDATE - TO_DATE('2026-8-1','YYYY-MM-DD') FROM DUAL;
--日期+数字=日期

SELECT SYSDATE + 7 FROM DUAL; --2026/8/31 9:37:12

①ROUND(日期,截取单位)

SELECT ROUND(TO_DATE('20260824133423','YYYYMMDDHH24MISS'),'DD') FROM DUAL; --2026/8/25

SELECT ROUND(TO_DATE('20260813','YYYYMMDD'),'MM') FROM DUAL; --2026/8/01

SELECT ROUND(TO_DATE('20260413','YYYYMMDD'),'YYYY') FROM DUAL;--2026/1/01

②TRUNC(日期,截取单位) --用法跟ROUND一致,唯一区别是TRUNC不会四舍五入

③ADD_MONTHS(日期,数字) --返回几个月之后的当前时间

SELECT ADD_MONTHS(SYSDATE,2) FROM DUAL; --2026/10/24 9:45:55

SELECT ADD_MONTHS(SYSDATE,-2) FROM DUAL; --2026/6/24 9:46:10

④LAST_DAY(日期) --返回日期对应月份的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

⑤MONTHS_BETWEEN(日期,日期) --返回两个日期相差的月份数

SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('20260521','YYYYMMDD')) FROM DUAL; --3.11084826762246

--字符函数

LENGTH() --返回字符串的长度

SELECT LENGTH('SCOTT') FROM DUAL; --5

--去空值时好用

REPLACE(X,Y,Z) --将字符串X中的Y替换成Z,Z不写默认替换成空值

SELECT REPLACE('SCOTT','S','T') FROM DUAL;

INSTR(X,Y,Z,M) --查找字符串X中字符Y的位置,从第Z为开始找,找第M次出现Y的位置

--示例:查找字符串'ABCDEFCG'中第一次出现C的位置

SELECT INSTR('ABCDEFCG','C',1,1) FROM DUAL; --3

SELECT INSTR('ABCDEFCG','C',4,2) FROM DUAL; --0

SUBSTR(X,Y,Z)

--截取函数,对字符串X进行截取,从第Y为开始截

--截取Z为长度,Y为负数时表示从右往左数,Z不写表示截取第Y为之后的所有字符

SELECT SUBSTR('20260824',1,4) FROM DUAL;

--2026

⑥CONCAT(X,Y) --拼接字符串X和Y,一次只能拼接两个参数

SELECT CONCAT('2026','08') FROM DUAL;

--202608

SELECT CONCAT(CONCAT('2026','08'),'24') FROM DUAL;

--20260824

⑦|| --管道符,也可以拼接多个字符串

WM_CONCAT() --拼接整个字段的值,默认用逗号拼接:

SELECT WM_CONCAT(ENAME) FROM EMP;

将EMP表的工作用横杠"-"拼接起来,并且不能重复

--输出:CLERK-SALESMAN-MANAGER-ANALYST-PRESIDENT

SELECT REPLACE(WM_CONCAT(DISTINCT JOB),',','-') FROM EMP

UPPER() 小写转大写

LOWER() 大写转小写

TRIM() --去左右空格

SELECT TRIM(' A B C ') FROM DUAL; --A B C
LTRIM() --去左空格

SELECT LTRIM(' A B C ') FROM DUAL; --A B C
RTRIM() --去右空格

SELECT RTRIM(' A B C ') FROM DUAL; -- A B C
--函数总结:

分析函数/开窗函数:可以同时输出明细数据和聚合值

主要有聚合型和非聚合型

--聚合型

SUM/AVG/MAX/MIN/COUNT()OVER(PARTITION BY ...ORDER BY ...)

--加了ORDER BY 有累计效果

--非聚合型

RATIO_TO_REPORT()OVER(PARTITION BY ...) --占比函数

FIRST_VALUE()OVER(PARTITION BY ...ORDER BY ...) --取第一个值

NTILE()OVER(PARTITION BY ...ORDER BY ...) --切片函数

WM_CONCAT()OVER(PARTITION BY ...ORDER BY ...) --拼接函数

--排名

ROW_NUMBER()OVER(PARTITION BY ...ORDER BY ...) --不考虑并列,1 2 3 4

RANK()OVER(PARTITION BY ...ORDER BY ...) --考虑并列,并空出排名,1 2 2 4

DENSE_RANK()OVER(PARTITION BY ...ORDER BY ...) --考虑并列,不会空出排名,1 2 2 3

--偏移

LAG()OVER(PARTITION BY ...ORDER BY ...) --向上偏移

LEAD()OVER(PARTITION BY ...ORDER BY ...) --向下偏移

--注意:分析函数不能直接用在WHERE之后,一般分析函数不会跟GROUP BY 一起使用

相关推荐
小则又沐风a1 小时前
MySQL表的约束详解
数据库·mysql
赵渝强老师1 小时前
【赵渝强老师】崖山数据库的联机重做日志文件
数据库·国产数据库·yashandb·崖山数据库
家有娇妻张兔兔1 小时前
Redis 报错 “MISCONF Redis is configured to save RDB snapshots“?一文讲透根因与根除方案
数据库·redis·故障排查·misconf
迷迭香yy1 小时前
回测过拟合检测体系从样本内外到组合稳健性评估 IG50免费开源股票数据API接口
服务器·开发语言·数据库·人工智能·python
敲上瘾3 小时前
Redis持久化存储机制:从RDB到AOF再到混合持久化的配置与实践
linux·数据库·redis·缓存
2401_894915536 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
正儿八经的少年11 小时前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
xrandzj11 小时前
MySQL8.0 从零通关核心操作手册(Ubuntu实战版)
数据库·mysql
我不会插花弄玉12 小时前
4.数据类型【由浅入深-MySQL】
数据库·mysql