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 一起使用

相关推荐
这个DBA有点耶41 分钟前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
forestsea1 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
probex_2 小时前
从 ByConity 到 VictoriaMetrics:一次指标数据迁移引发的四种存储对比
数据库
Patrick在香港2 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
这个DBA有点耶2 小时前
自增主键用尽了怎么办?INT溢出、在线迁移与预防策略全解析
数据库·mysql·代码规范
老纪的技术唠嗑局3 小时前
Agent 习惯性删库跑路,数据库纷纷学 Git 续命
数据库·人工智能
Data_Journal3 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy
白远山4 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
虎虎(_ _)。゜zzZ4 小时前
SQLAlchemy入门教程
数据库·后端·python·sql·ai·sqlalchemy
Data_Journal5 小时前
如何将网页抓取用于机器学习
大数据·开发语言·数据库·python·scrapy